Избранное трейдера genih
Disclaimer: Эта статья носит исключительно образовательный характер и не является рекомендацией к каким-либо действиям. Я советую вам строго следовать любым законным и подзаконным актам, и не пытаться выполнять какие-либо действия в их обход. Учитывайте, что к моменту прочтения вами статьи какая-то информация ниже может уже устареть.
Как мы разбирали в прошлом гайде, существует немало рабочих способов вывода денег из РФ. Однако, у каждого из них есть свои недостатки:
-- -- Выполнение действий с массивами. -- local pairs = pairs local type = type module(...) --- Создать копию массива (таблицы) -- @return копию массива (таблицы) function copy(array) local copy_array = {} if type(array) ~= "table" then return array end for k, v in pairs(array) do if type(v) == "table" then copy_array[k] = copy(v) else copy_array[k] = v end end return copy_array end --- Узнать, начинается ли индексация в массиве с нуля или с единицы. -- @return 0 или 1 function base(array) if array[0] ~= nil then return 0 else return 1 end end --- Вычислить число элементов в массиве. -- @return число элементов в массиве function size(array) local n = 0 for _, _ in pairs(array) do n = n + 1 end return n end --- Проверить пустой или нет массив. -- @return true/false function isEmpty(array) for _, _ in pairs(array) do return false end return true end --- Получить первый индекс массива, где ничего не записано. Поиск начинается с 1. -- @return первый индекс массива, где ничего не записано function firstEmptyIndex(array) local i = 1 while array[i] ~= nil do i = i + 1 end return i end
Всем привет!
Вдохновился данным постом ( https://smart-lab.ru/blog/616708.php ) и решил немного подпилить код, пока карантин делать нечего.
Кто не знал как скачивать котировки по одной компании вручную — сайт для скачивания котировок по одному тикеру (финам):
www.finam.ru/profile/moex-akcii/gazprom/export/
Тут через питон скачиваем котировки из текстового файла, в который вносим желаемые тикеры компаний:
Сайт для скачивания среды программирования Python (PyCharm), пойдет обычная версия:
www.jetbrains.com/ru-ru/pycharm/download/#section=windows
Файлы из видео, в том числе и со списком тикеров:
yadi.sk/d/R3BSbFjV3Pfydg
Код программы:
import requests import datetime import pathlib import apimoex import pandas as pd board = 'TQBR' with open("C:/PYEX/TICK.txt", "r") as TICKs: TICKs = [line.rstrip() for line in TICKs] pathlib.Path("C:/PYEX/Database/{}".format(board)).mkdir(parents=True, exist_ok=True) process = 0 with requests.Session() as session: for TICK in TICKs: process = process + 1 print((process / len(TICKs)) * 100, ' %') data = apimoex.get_board_history(session, TICK, board=board) if data == []: continue df = pd.DataFrame(data) df = df[['TRADEDATE','CLOSE']] df.to_excel("C:/PYEX/Database/{}/{}.xlsx".format(board,TICK), index=False)
Статья про налоги. Прочтите пожалуйста. 3-НДФЛ
Доброго времени суток, коллеги!
Сегодня в своей статье я опишу крайне важную и объемную тему, с которой рекомендую ознакомиться всем.
Покажу на примере Interactive Brokers.
У других брокеров аналогичная схема.
Итак, начнем
В статье будет идти повествование по налогообложению резидентов. Данная информация поможет Вам ориентироваться на рынке ценных бумаг. Информация будет полезной, как инвесторам, так и спекулянтам.
Кто признается налоговым резидентом: признаются граждане РФ, иностранные граждане, лица без гражданства, если они находится на территории РФ более 183 календарных дней в течение 12 следующих подряд месяцев. Период нахождения физического лица в Российской Федерации не прерывается на периоды выезда физического лица за пределы Российской Федерации для краткосрочного (менее шести месяцев) лечения или обучения, а также для исполнения трудовых или иных обязанностей, связанных с выполнением работ (оказанием услуг) на морских месторождениях углеводородного сырья. И другие.
TICER = "SBER"; CLASS_CODE = "TQBR"; FilePath = getScriptPath() .. "\\export.txt";--путь к файлу save = false;--сохранять данные в файл если false нет, true да f = nil; stopped = false; t_id = nil H = -1; M = -1; VSELL = 0; VBUY = 0; CDelta = 0; CountTrans = 0; PriceTrans = 0.0; t = ""; function OnInit() CountTrans = 0; if save then f = io.open(FilePath,"w"); end CreateTable(); end function main() while not stopped do if IsWindowClosed(t_id) then stopped = true; end sleep(10); end end function CreateTable() t_id = AllocTable(); AddColumn(t_id, 0, "Время", true, QTABLE_STRING_TYPE, 10); AddColumn(t_id, 1, "BUY", true, QTABLE_INT_TYPE, 10); AddColumn(t_id, 2, "SELL", true, QTABLE_INT_TYPE, 10); AddColumn(t_id, 3, "Дельта V", true, QTABLE_INT_TYPE, 10); AddColumn(t_id, 4, "AVG Цена", true, QTABLE_DOUBLE_TYPE, 15); AddColumn(t_id, 5, "Накопленная Дельта", true, QTABLE_INT_TYPE, 15); AddColumn(t_id, 6, "Кол-во сделок", true, QTABLE_DOUBLE_TYPE, 12); tab = CreateWindow(t_id); local NAME = tostring(getParamEx(CLASS_CODE,TICER,"LONGNAME").param_image); SetWindowCaption(t_id, TICER.." ("..NAME..") Баланс покупок/продаж"); SetTableNotificationCallback(t_id, EventCallBack); end function Calc(alltrade) if bit.test(alltrade.flags, 0) then VSELL = VSELL+alltrade.qty; --Продажа else VBUY = VBUY+alltrade.qty; end CountTrans = CountTrans+1; PriceTrans = PriceTrans+alltrade.price; end function OnAllTrade(alltrade) if alltrade.sec_code == TICER then local Rows, Col = GetTableSize(t_id); if H==-1 or H~= alltrade.datetime.hour then H = alltrade.datetime.hour; M = alltrade.datetime.min; t = tostring(alltrade.datetime.hour)..":"..tostring(alltrade.datetime.min); end if M==alltrade.datetime.min then Calc(alltrade); else M=alltrade.datetime.min; InsertRow(t_id, -1); local Delta = VBUY-VSELL; Price = PriceTrans/CountTrans; SetCell(t_id, Rows, 6, tostring(CountTrans)); SetCell(t_id, Rows, 0, t); SetCell(t_id, Rows, 1, tostring(VBUY)); SetCell(t_id, Rows, 2, tostring(VSELL)); SetCell(t_id, Rows, 3, tostring(Delta)); local SEC_SCALE = tostring(getParamEx(CLASS_CODE,TICER,"SEC_SCALE").param_value); SEC_SCALE = string.format("%.0f",SEC_SCALE); SetCell(t_id, Rows, 4, string.format("%."..SEC_SCALE.."f", tostring(Price))); if Rows>=2 then local OldPrice = tonumber(GetCell(t_id,Rows-1,4).image); if OldPrice>Price then Red(Rows,4); else Green(Rows,4); end CDelta = tonumber(GetCell(t_id,Rows-1,5).image); CDelta = CDelta + Delta; else CDelta = Delta; end SetCell(t_id, Rows, 5, tostring(CDelta)); if Delta<0 then Red(Rows,3); end if Delta>0 then Green(Rows,3); end if CDelta<0 then Red(Rows,5); end if CDelta>0 then Green(Rows,5); end if save then local Str = tostring(H)..";"..tostring(M)..";"..tostring(VBUY)..";"..tostring(VSELL)..";" ..tostring(Delta)..";"..tostring(Price)..";"..tostring(CDelta); Str=Str.."\n"; SaveFile(Str); end t = tostring(alltrade.datetime.hour)..":"..tostring(alltrade.datetime.min); VBUY = 0;VSELL = 0; PriceTrans = 0; CountTrans = 0; Calc(alltrade); end end --if alltrade.sec_code == TICER then end function SaveFile(Str) if f ~= nil then f:write(Str); f:flush(); end end function Red(row,col) SetColor(t_id, row, col, RGB(255,0,0), RGB(0,0,0), RGB(255,0,0), RGB(0,0,0)); end function Yellow(row,col) SetColor(t_id, row, col, RGB(240,240,0), RGB(0,0,0), RGB(240,240,0), RGB(0,0,0)); end function Green(row,col) SetColor(t_id, row, col, RGB(0,200,0), RGB(0,0,0), RGB(0,200,0), RGB(0,0,0)); end function EventCallBack(t_id, msg, par1, par2) if msg==QTABLE_CLOSE then OnStop(); end; end function OnStop(s) if f ~= nil then f:close(); end if t_id ~= nil then DestroyTable (t_id); end; stopped = true; end
Доброго времени суток, господа!
М-да… Вся лента забита новостями: коронавирус, нефть-матушка, кризис...
А где же будоражащие душу исследования, напрямую ведущие к Граалю? Нетути… Нетути Грааля аль, все ж таки, есть?
Продолжим путешествие в мир случайности/закономерности рыночных временных рядов с целью узреть Свет и Счастие для всех страждущих.
В предыдущих частях проекта:
https://smart-lab.ru/blog/579572.php
https://smart-lab.ru/blog/580961.php
https://smart-lab.ru/blog/582407.php
мы убедились, что заработать на теоретических случайных процессах («монетка», Laplace motion, ...) довольно просто. Пользуемся тем фактом, что сумма независимых или слабозависимых случайных величин (приращений) дает число, принадлежащее нормальному распределению Гаусса и при выходе текущей кумулятивной суммы за пределы диапазона +-Delta*1.96, где Delta = sqrt(2*(b^2)*t), заключаем сделки, а при возврате в 0 — закрываем их. Дело сделано...