Избранное трейдера dusheska

по

Автологин для квика на javascript

Надоело логиниться в квик каждый день по 10 раз, всё время за логином-паролем лазить в файл и копипастить. Сделал скрипт, к-й это автоматизирует. Работает на javascript, так что от версии Windows зависеть не должно.

Сам скрипт кладётся в файл типа C:\Util\Js\Q.js или куда угодно, только не у всех на виду. На этот скрипт делается ярлык, он кладётся на рабочий стол куда-то в угол, и ему прописывается горячая клавиша типа Ctrl-Alt-X или любая другая буква. После этого вы запускаете квик, появляется окно логина, нажимаете Ctrl-Alt-X и через полсекунды оно срабатывает. Важно, что ярлык должен быть на рабочем столе, иначе горячая клавиша не работает. 

Вообще вводить данные в другую программу можно двумя способами: copy&paste и эмуляция клавиш. Я в данном случае пошёл по второму пути, хотя и первый тоже реализуем и даже чем-то лучше, т.к. там не надо парится с языком. Из-за этого, если вы хотите использовать этот скрипт, нужно проверить ряд моментов и при необходимости внести исправления. 

⦁ В варианте, к-й я выкладываю, логин/пароль должны быть прописаны прямо в скрипте, но можно и читать из файла. У меня дома рабочий вариант вообще ищет их в rtf-файле где много всяких данных. Если логин/пароль положить во внешний файл, то их можно конечно и закодировать. 
⦁ Чтобы отработало правильно, надо чтобы текущий язык ввода (по сути язык ввода по умолчанию в системе) в квике был русский. Если это не так, то вначале надо поменять bEngSystem=true
⦁ У меня логин русский, а пароль английский, так что между ними производится переключение клавиатуры. Если у вас что угодно из этого не так, надо в нужных местах убрать или добавить переменную LangSwitch, к-я содержит клавиши «Alt-Shift». Если у вас опять же язык переключается по-другому, там надо прописать другие клавиши.
⦁ У меня вводится и логин и пароль. Если у вас вводится только пароль, то поменять тоже нужно и не сложно. 

В общем, можно было бы написать более универсальную версию, чтобы определяеть, когда надо переключать языки автоматом, но мне не нужно, а кому надо разберутся. Или же можно переписать через copy&paste. Делать полностью автоматизированный логин, когда вообще ничего нажимать не нужно я не хочу, потому что тогда любой, кто получит доступ к вашему компьютеру сможет получить доступ и к вашим деньгам, просто кликнув на квике. Так хоть комбинацию клавиш знать надо. 

bEngSystem=false; //язык системы по умолчанию
LangSwitch="%+!";

WshShell=WScript.CreateObject("WScript.Shell");
InitKeys();
KeysSeq=GetData();
if (KeysSeq) EnterData(KeysSeq);

//------------------------------------------------------------------------

function GetData(){
//(Возможно) читаем данные из файла и преобразуем в последовательность клавиш
//"!" означает паузу для специальных клавиш, к-е требуют время обработки
var DataFN, oStream, Data, Pos1, Pos2, Line;

if (0){ //данные в файле
	DataFN='C:/...';
	FSO=new ActiveXObject("Scripting.FileSystemObject"); 
	oStream=FSO.OpenTextFile(DataFN, 1); Line=oStream.ReadAll(); oStream.Close();
	}
else Line='имя:password';

//Tab должен быть и вначале, потому что при фокусировке квика текущее поле - список серверов
Line="{Tab}!"+Line.replace(/:/g, "{Tab}!"+LangSwitch); 
//Переключение языка в самом начале если логин русский
if (bEngSystem) Line=LangSwitch+Line; 
//конвертация русских символов
Line=Line.replace(/[А-Яа-я]/g, RusCB);

return Line;
}

function EnterData(KeysSeq){
var ret;

WScript.Sleep(300); //Пауза позволяет убрать руки от клавиатуры до того, как скрипт начал работать

ret=WshShell.AppActivate("Идентификация пользователя"); if (ret==0) return;
WScript.Sleep(100); 

aSeq=KeysSeq.split('!');
for(var i=0; i<aSeq.length; i++){
	Seq=aSeq[i]; 
	if (Seq!=''){
		WshShell.SendKeys(Seq); WScript.Sleep(100); 
		}
	}

WshShell.SendKeys("{Enter}");
//WshShell.SendKeys("%+"); WScript.Sleep(100); //switch to Russian
//WshShell.SendKeys("{Tab}"); WScript.Sleep(100); 
//WshShell.SendKeys("^V"); WScript.Sleep(100); //paste
}

function RusCB(s){
var n, ch, i;

if (s.length==1){
	ch=s;
	}
else{ //rtf
	//код символа в Ansi
	s=s.substr(2); n=parseInt(s, 16); ch=String.fromCharCode(n);
	}

//Преобразовать в Utf и найти в русских клавишах
i=RusKeys.indexOf(Ansi2Utf(ch));
//Найти соотв. латинскую клавишу
return LatKeys.charAt(i);
}

//------------------------------------------------------------------------

function Ansi2UtfN(Code){
if (Code>=192 && Code<=255) Code+=848;
else if (Code==168) Code=1025; else if (Code==184) Code=1105;
return String.fromCharCode(Code);
}

function Utf2AnsiN(Code){
if (Code>=1040 && Code<=1103) Code-=848;
else if (Code==1025) Code=168; else if (Code==1105) Code=184;
return String.fromCharCode(Code);
}

function Ansi2Utf(Str, bRev){
var Buf='', Ch, Res='', c=0, L, n, f;

L=Str.length; f=(!bRev ? Ansi2UtfN : Utf2AnsiN);
for(n=0; n<L; n++){
	Ch=Str.charCodeAt(n); Buf+=f(Ch); c++;
	if (c>=100){Res+=Buf; Buf=''; c=0;}
	}
return Res+Buf;
}

//------------------------------------------------------------------------

function alert(S){WScript.Echo(S);}

function InitKeys(){
//Проблема в том, что влияет текущий язык в той программе!
//Можно нажимать только английские клавиши. Если надо нажимать русские, надо вычислить какие им соответствуют английские
RusKeys="йцукенгшщзхъфывапролджэячсмитьбю"; LatKeys="qwertyuiop[]asdfghjkl;'zxcvbnm,.";
RusKeys=RusKeys+RusKeys.toUpperCase(); LatKeys=LatKeys+LatKeys.toUpperCase();
}

Есть другие решения: Автологин для Quik 8 x64.
  • обсудить на форуме:
  • QUIK

Достали с этими квалами, пришлось самому копать, ловите статьи

Поскольку в предыдущих темах даются ссылки на законы, не имеющие номеров и которые еще не приняты, нашел ФЗ № 39 о рынке ценных бумаг, который и регламентирует эту деятельность. 
Начнем с того, что нужно для того, чтобы стать квалом:
Глава 2. Требования, которым должно соответствовать лицо для признания его квалифицированным инвестором
 Указание Банка России от 29.04.2015 N 3629-У «О признании лиц квалифицированными инвесторами и порядке ведения реестра лиц, признанных квалифицированными инвесторами» (Зарегистрировано в Минюсте России 28.05.2015 N 37415)
Глава 2. Требования, которым должно соответствовать лицо для признания его квалифицированным инвестором

2.1. Физическое лицо может быть признано квалифицированным инвестором, если оно отвечает любому из следующих требований.

2.1.1. Общая стоимость ценных бумаг, которыми владеет это лицо, и (или) общий размер обязательств из договоров, являющихся производными финансовыми инструментами и заключенных за счет этого лица, рассчитанные в порядке, предусмотренном пунктом 2.4 настоящего Указания, должны составлять не менее 6 миллионов рублей. При расчете указанной общей стоимости (общего размера обязательств) учитываются финансовые инструменты, предусмотренные 


( Читать дальше )

Налоги и финансовая математика

Первая аналогичная моя тема тут. Продолжим?

Итак, рассмотрим пример расчета, который часто любят обсасывать в темах про налоги.
С гражданина РФ удерживают НДФЛ, платятся отчисления в фонды. Покупая товары, работы и услуги он участвует в уплате НДС, налога на прибыль, акцизов и много чего еще. В итоге, у гражданина государство просто так отбирает более 60% от результатов его труда.
Так ли это? Применяя простые финансовые расчеты можно увидеть реальную картину мира. Давайте проверим 2019 год.

Отсюда возьмем данные по поступлениям консолидированного бюджета РФ и фондов.
Налоги и финансовая математика
Отсюда возьмем данные по доходам граждан РФ.
Налоги и финансовая математика

( Читать дальше )

Бесплатный сайт для учёта инвестиций

В 2018 открыл себе брокерский счёт и начал потихоньку разбираться в инвестициях. Сразу начал вести всю историю своих сделок в Excel-файле и считал в нём доходность. Со временем пришёл к тому, что расчёты нужно как-то автоматизировать.

Сначала пробовал разные платные сервисы вроде интелинвеста и блэктерминала, но их платность и недостаток функционала заставили меня делать что-то самому.

В январе 2020 начал писать программу для учёта инвестиций. Т.к. опыт программирования у меня в основном на php, писать начал в виде сайта.

Сегодня 2021 год и моему сайту уже больше года. Вот он

https://izi-invest.ru

Давал ссылку на этот сайт на некоторых форумах и сайтах, на сайт пришли пользователи и начали предлагать добавить улучшения и функции. С их помощью я развивал сайт. Многие делились ссылкой в социальных сетях, сейчас на сайте активно ведут свой портфель несколько сотен человек.
Использование супер простое:

1. Создаём портфель
2. Загружаем в него отчёт вашего брокера (или вводим сделки вручную)

( Читать дальше )

Как платить налоги с продажи и дивидендов акций США у interactive brokers. Декларация 3 НДФЛ за 2020

Видео: пошаговая инструкция
Стартовала декларационная кампания 2021. Заполняю декларацию 3 НДФЛ для уплаты налогов с дивидендов и прибыли от продажи акций США за 2020 год. Для резидентов России, кто использует зарубежного брокера interactive brokers.

для торгующих на СПб

я уже упоминал ранее что отфильтровал ВСЕ бумаги торгующиеся на спб по критериям — цена и перспективы
цена — от пары долларов до сотни.
перспективы — всё то что не падает годами, не продолжало падать после марта прошлого года, не продолжало 
падать после ноября прошлого года

фильтровал то что втб даёт торговать ( а он даёт не всё что есть на спб )

а поскольку у меня этот список неоднократно спрашивали, то я его привёл в читаемый вид и предоставляю для всеобщего доступа.
ну я же пользуюсь чьими-то наработками, публикуемые здесь, ну вот мой вклад. 



( Читать дальше )

Научно-популярные книги бесплатно!!!

Впервые в истории России!На сайте https://vsenauka.ru/knigi/besplatnyie-knigi.html вы сможете скачать бесплатно и легально лучшие научно-популярные книги.

Научно-популярные книги бесплатно!!!



Из анонса. Десятки ключевых научно-популярных книг по важнейшим темам любой из нас сможет скачать бесплатно и при этом полностью легально. Акция не имеет аналогов в российской практике. Ее инициатором стала программа «Всенаука», возглавляемая Георгием Васильевым, известным по таким проектам, как мюзикл «Норд-Ост» и мультсериал «Фиксики».

Бесплатными стали книги, отобранные экспертами Всенауки и Комиссией РАН по популяризации науки. В их числе: «Теория всего» Стивена Хокинга, «Будущее разума» Митио Каку, «Эгоистичный ген» Ричарда Докинза, «Вселенная» Сергея Попова, «Эволюция человека» Александра Маркова — всего более 40 книг. Все они уже доступны на сайте Всенауки.

Буквально одним кликом любой желающий может скачать себе целую библиотеку умных книг по важнейшим темам. Эти книги были отобраны в результате двухлетней работы сотен экспертов. Речь идет не просто о наборе интересных книг. Бесплатная библиотека Всенауки отражает современную научную картину мира.

Все книги, ставшие бесплатными, были на законных основаниях предоставлены ведущими российскими издательствами научно-популярной литературы: «Альпина Нон-фикшн», АСТ, Corpus, Neoclassic, МИФ, «Питер», «Бином. Лаборатория знаний», «Альпина паблишер», МЦНМО.

( Читать дальше )

3-НДФЛ Дивиденды. Пошаговая инструкция.

Добрый день Дамы и Господа.

Написал инструкцию для себя, чтобы не забыть. Решил тут выложить, вдруг кому пригодится. Есть уточнения или ошибся где- поправляйте.

Пришло время отчитаться о полученных дивидендах по акциям иностранных компаний и ГДР. Необходимо заплатить налог и сдать налоговую декларацию физических лиц (3-НДФЛ). Сделать это просто. Займет 10-20 минут. Проследуем вместе шаг за шагом.

Поехали:

1. Нам нужен «Отчет о выплате доходов по ценным бумагам иностранных эмитентов». Заказываем у брокера или сразу скачиваем. Например, тинькофф предоставляет данную справку автоматически.

2. Открываем личный кабинет налогоплательщика вот ссылка



( Читать дальше )

Автоматизация сигналов из TradingView за 2 минуты. Websockets Python

from websocket import create_connection
import json
import random
import string
import re
import pandas as pd
import csv
from datetime import datetime
from time import sleep

def filter_raw_message(text):
    try:
        found = re.search('"m":"(.+?)",', text).group(1)
        found2 = re.search('"p":(.+?"}"])}', text).group(1)
        print(found)
        print(found2)
        return found1, found2
    except AttributeError:
        print("error")
    

def generateSession():
    stringLength=12
    letters = string.ascii_lowercase
    random_string= ''.join(random.choice(letters) for i in range(stringLength))
    return "qs_" +random_string

def generateChartSession():
    stringLength=12
    letters = string.ascii_lowercase
    random_string= ''.join(random.choice(letters) for i in range(stringLength))
    return "cs_" +random_string

def prependHeader(st):
    return "~m~" + str(len(st)) + "~m~" + st

def constructMessage(func, paramList):
    #json_mylist = json.dumps(mylist, separators=(',', ':'))
    return json.dumps({
        "m":func,
        "p":paramList
        }, separators=(',', ':'))

def createMessage(func, paramList):
    return prependHeader(constructMessage(func, paramList))

def sendRawMessage(ws, message):
    ws.send(prependHeader(message))

def sendMessage(ws, func, args):
    ws.send(createMessage(func, args))

def generate_csv(a):
    out= re.search('"s":\[(.+?)\}\]', a).group(1)
    x=out.split(',{\"')
    
    with open('data_file.csv', mode='w', newline='') as data_file:
        employee_writer = csv.writer(data_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    
        employee_writer.writerow(['index', 'date', 'open', 'high', 'low', 'close', 'volume'])
        
        for xi in x:
            xi= re.split('\[|:|,|\]', xi)
            print(xi)
            ind= int(xi[1])
            ts= datetime.fromtimestamp(float(xi[4])).strftime("%Y/%m/%d, %H:%M:%S")
            employee_writer.writerow([ind, ts, float(xi[5]), float(xi[6]), float(xi[7]), float(xi[8]), float(xi[9])])
            


# Initialize the headers needed for the websocket connection
headers = json.dumps({
    # 'Connection': 'upgrade',
    # 'Host': 'data.tradingview.com',
    'Origin': 'https://data.tradingview.com'
    # 'Cache-Control': 'no-cache',
    # 'Upgrade': 'websocket',
    # 'Sec-WebSocket-Extensions': 'permessage-deflate; client_max_window_bits',
    # 'Sec-WebSocket-Key': '2C08Ri6FwFQw2p4198F/TA==',
    # 'Sec-WebSocket-Version': '13',
    # 'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.478.56',
    # 'Pragma': 'no-cache',
    # 'Upgrade': 'websocket'
})

    
# Then create a connection to the tunnel
ws = create_connection(
    'wss://data.tradingview.com/socket.io/websocket',headers=headers)

session= generateSession()
print("session generated {}".format(session))

chart_session= generateChartSession()
print("chart_session generated {}".format(chart_session))

# Then send a message through the tunnel 
sendMessage(ws, "set_auth_token", ["unauthorized_user_token"])
sendMessage(ws, "chart_create_session", [chart_session, ""])
sendMessage(ws, "quote_create_session", [session])
sendMessage(ws,"quote_set_fields", [session,"ch","chp","current_session","description","local_description","language","exchange","fractional","is_tradable","lp","lp_time","minmov","minmove2","original_name","pricescale","pro_name","short_name","type","update_mode","volume","currency_code","rchp","rtc"])
sendMessage(ws, "quote_add_symbols",[session, "BINANCE:BTCUSDT", {"flags":['force_permission']}])

sendMessage(ws, "resolve_symbol", [chart_session, "symbol_1","={\"symbol\":\"BINANCE:BTCUSDT\",\"adjustment\":\"splits\"}"])
sendMessage(ws, "create_series", [chart_session,"s1","s1","symbol_1","1",300])

sendMessage(ws, "quote_fast_symbols", [session,"BINANCE:BTCUSDT"])

sendMessage(ws, "create_study", [chart_session,"st1","st1","s1","Volume@tv-basicstudies-118",{"length":20,"col_prev_close":"false"}])
sendMessage(ws, "quote_hibernate_all", [session])

#st='~m~140~m~{"m":"resolve_symbol","p":}'
#p1, p2 = filter_raw_message(st)
#sendMessage(ws, "resolve_symbol", [chart_session,"symbol_1","={\"symbol\":\"BINANCE:BTCUSDT\",\"adjustment\":\"splits\",\"session\":\"extended\"}"])
#sendMessage(ws, "create_series", [chart_session, "s1", "s1", "symbol_1", "1", 2])
#sendMessage(ws, "create_study", [chart_session,"st4","st1","s1","ESD@tv-scripting-101!",{"text":"BNEhyMp2zcJFvntl+CdKjA==_DkJH8pNTUOoUT2BnMT6NHSuLIuKni9D9SDMm1UOm/vLtzAhPVypsvWlzDDenSfeyoFHLhX7G61HDlNHwqt/czTEwncKBDNi1b3fj26V54CkMKtrI21tXW7OQD/OSYxxd6SzPtFwiCVAoPbF2Y1lBIg/YE9nGDkr6jeDdPwF0d2bC+yN8lhBm03WYMOyrr6wFST+P/38BoSeZvMXI1Xfw84rnntV9+MDVxV8L19OE/0K/NBRvYpxgWMGCqH79/sHMrCsF6uOpIIgF8bEVQFGBKDSxbNa0nc+npqK5vPdHwvQuy5XuMnGIqsjR4sIMml2lJGi/XqzfU/L9Wj9xfuNNB2ty5PhxgzWiJU1Z1JTzsDsth2PyP29q8a91MQrmpZ9GwHnJdLjbzUv3vbOm9R4/u9K2lwhcBrqrLsj/VfVWMSBP","pineId":"TV_SPLITS","pineVersion":"8.0"}])


# Printing all the result
a=""
while True:
    try:
        sleep(1)
        result = ws.recv()
        pattern = re.compile("~m~\d+~m~~h~\d+$")
        if pattern.match(result):
            ws.recv()
            ws.send(result)
            print("\n\n\n hhhhhhhhhhhhhhhhhhhhhh "+ str(result) + "\n\n")
        print(result)
        a=a+result+"\n"
    except Exception as e:
        print(e)
        break
    
generate_csv(a)
'https://github.com/rushic24/tradingview-scraper'

Хотел вывести деньги с брокерского счета — почти все ушло на налог. Что случилось😳?

Налоги — штука полезная для общества, но коварная для несведущего инвестора.

Случаются такие парадоксальные ситуации. Инвестору вдруг понадобились деньги. Решил их вывести с брокерского счета, благо торгует успешно, есть прибыль. Но ожидая вывести одну сумму, получает намного меньшую. Вплоть до того, что она будет стремиться к нулю. Инвестору кажется, что налог съел всю прибыль. Как же так?

Все дело в расчетах налога при выводе денежных средств с брокерского счета.

Когда вы снимаете деньги со своего брокерского счета, брокер рассчитывает ваш финансовый результат и удерживает налог, который потом перечисляет в бюджет.

Если сумма налога от финансового результата по сравнению с суммой вывода:

  • Больше —то удерживается налог только от суммы вывода.
  • Меньше — то удерживается налог от финансового результата.

Не понятно? Давайте на примерах. 

1️⃣ Допустим, инвестору приспичило вывести 100 000 рублей с брокерского счета. Весь год он успешно торговал. Прибыль по сумме всех операций составила 700 000 рублей. Тогда при выводе средств будет начислен налог (13%) — 91 000 рублей. В итоге инвестору капнет на счет всего 9 000 рублей 😳.



( Читать дальше )

....все тэги
UPDONW
Новый дизайн