Избранное трейдера АлексейФ
Привет всем любителям и ценителям опционов. С большим вниманием ознакомился с содержанием раздела на смартлабе и принял решение зарегистрировать здесь свой опционный блог. Пока учился торговле этим замечательным инструментом, перечитал стопку учебников, пересмотрел сутки видеороликов на русском и английском, взял платные курсы, облазил интернет в поисках скудных крох практических аспектов, но в итоге все практические навыки пришлось извлекать самому, некоторые — весьма болезненно. Думаю, от меня не убудет поделиться, и считаю, что удивительный мир опционной торговли заслуживает того, чтобы о нем писали больше и чаще.
Во первых строках — кратко о себе и о том, что, как и где торгую. Мне 46, в мир опционов пришел давно, лет 5 назад, но с первого захода не сложилось — торговал рублевыми опционами, и неудачно. Я потом объясню, почему неудачно. В прошлом году покинул, наконец, работу, открыл счет в IB, закинул туда столько, сколько не жаль потерять полностью, и начал учиться на свои кровные. Начал, как водится, с покрытых коллов. Потом перешел к голым путам. Кривая обучения выглядит классически: первые два месяца — уверенный, но небольшой плюс.
Сегодня темой нашей очередной статьи будет пример попытки улучшения своей доходности, при торговле по тренду.
Начальный алгоритм достаточно прост и стандартен — хай/лоу с периодом в 2000 баров. Тикер РТС Фьючерс. Специально был взят отрезок из прошлого, так как на нем он лучше всего «летал».
Параметр не подогнанный — начальный период в блоках TSLab обычно 20 и мы приписали пару нулей для увеличения продолжительности сделки.
Эквити в начальном виде.
Результаты показывать не будем, так как они будут более интересными, чем график дохода. Рекомендуем посмотреть как это работает на практике лично, если вы уже пользователь нашей программы)
Да — это не плохой график, но попытаемся сделать лучше! Выводим следующую формулу — открываем позицию, считаем доход/количество удерживаемых баров. Если значение растет, — значит рынок двигается с хорошей скоростью в нашу сторону. Если же начинает медленно падать или уходит в минус — значит перестал двигаться в нужном направлении. Пользуясь таким методом, алгоритм приближает стоп-лосс на 1 шаг цены с каждым баром. Для заметки: если работаете с историческими данными, то перепроверьте какой шаг цены вы указали. Иначе рискуете искать долго причину почему стоп не двигается ближе, как это было у меня!)
--[[ индикатор: --]] Settings= { Name = "A_zig_channel_nested", -- название индикатора -- leng=50, -- длина proc0=10, proc=2, delt=40, minh = 0.5, line= { { Name = "cur1", Type =TYPE_LINE, Width = 2, Color = RGB(0,0,0) }, { Name = "cur2", Type =TYPE_LINE, Width = 2, Color = RGB(0,0,0) }, { Name = "cur3", Type =TYPE_LINE, Width = 2, Color = RGB(0,0,0) }, { Name = "cur4", Type =TYPE_LINE, Width = 2, Color = RGB(0,0,0) }, { Name = "cur5", Type =TYPE_LINE, Width = 2, Color = RGB(0,0,0) }, { Name = "cur6", Type =TYPE_LINE, Width = 2, Color = RGB(255,0,0) }, { Name = "cur7", Type =TYPE_LINE, Width = 2, Color = RGB(0,0,255) }, { Name = "cur8", Type =TYPE_LINE, Width = 2, Color = RGB(255,0,0) }, { Name = "cur9", Type =TYPE_LINE, Width = 2, Color = RGB(0,0,255) }, { Name = "cur10", Type =TYPE_LINE, Width = 2, Color = RGB(255,0,0) }, { Name = "cur11", Type =TYPE_LINE, Width = 2, Color = RGB(0,0, 255) }, { Name = "cur12", Type =TYPE_LINE, Width = 2, Color = RGB(255,0, 0) }, { Name = "cur13", Type =TYPE_LINE, Width = 2, Color = RGB(0,0,255) }, { Name = "cur14", Type =TYPE_LINE, Width = 2, Color = RGB(0,0,0) } } } function Init() v1=nil v2=nil v3=nil v4=nil v5=nil v6=nil v7=nil v8=nil v9=nil v10=nil v11=nil v12=nil v13=nil v14=nil y_1 = nil y_2 = nil x_1 = 1 x_2 = 1 x_3 = 1 sz = 1 minh = 0 return 14 end function recalcline(num1, num2, vFrom, vTo, index, delt) --[[ if index == Size()-sh and rec == 0 then for i = 1, index do if m == 1 then SetValue(i, 3, nil) SetValue(i, 4, nil) end if m == 2 then SetValue(i, 6, nil) SetValue(i, 7, nil) end end end --]] a1 = 0 a2 = 0 a3 = 0 a4 = 0 n = 0 a = 0 b = 0 for i = vFrom, vTo do n=n+1 a1 = a1+i*C(i) a2 = a2+i a3 = a3+C(i) a4 = a4+i*i end if((n*a4 - a2*a2) ~= 0) then -- if oldindex ~= Size() then a = (n*a1 - a2*a3)/(n*a4 - a2*a2) b = (a3 - a*a2)/n vminus = 0 vplus = 0 vminus_n = 0 vplus_n = 0 for i = vFrom, vTo do y = a*i + b if C(i) < y and i <= vTo then if y-C(i) > vminus then vminus = y-C(i) end end if C(i) > y and i <= vTo then if C(i)-y > vplus then vplus = C(i)-y end end --[[ m = 0 if C(vTo) > C(vFrom) and y < C(vTo)+0.1*(C(vTo)-C(vFrom)) and y > C(vFrom)-0.1*(C(vTo)-C(vFrom)) then m = 1 end if C(vTo) < C(vFrom) and y < C(vFrom)+0.1*(C(vFrom)-C(vTo)) and y > C(vTo)-0.1*(C(vFrom)-C(vTo)) then m = 1 end if m == 1 then --]] -- end --[[ m = 0 if C(vTo) > C(vFrom) and y < C(vTo)+0.1*(C(vTo)-C(vFrom)) and y > C(vFrom)-0.1*(C(vTo)-C(vFrom)) then m = 1 end if C(vTo) < C(vFrom) and y < C(vFrom)+0.1*(C(vFrom)-C(vTo)) and y > C(vTo)-0.1*(C(vFrom)-C(vTo)) then m = 1 end if m == 1 then --]] -- end end --end if vTo+delt > index then delt = 0 end if minh*C(vFrom)/100 < vplus + vminus then for i = vFrom, vTo+delt do if i <= index then y = a*i + b m = 0 if C(vTo) > C(vFrom) and y+vplus < C(vTo)+2*(C(vTo)-C(vFrom)) and y+vplus > C(vFrom)-2*(C(vTo)-C(vFrom)) then m = 1 end if C(vTo) < C(vFrom) and y+vplus < C(vFrom)+2*(C(vFrom)-C(vTo)) and y+vplus > C(vTo)-2*(C(vFrom)-C(vTo)) then m = 1 end if i <= vTo then m = 1 end if m == 1 then SetValue(i, num1, y+vplus) Setval(i, num1, y+vplus) end m = 0 if C(vTo) > C(vFrom) and y-vminus < C(vTo)+2*(C(vTo)-C(vFrom)) and y-vminus > C(vFrom)-2*(C(vTo)-C(vFrom)) then m = 1 end if C(vTo) < C(vFrom) and y-vminus < C(vFrom)+2*(C(vFrom)-C(vTo)) and y-vminus > C(vTo)-2*(C(vFrom)-C(vTo)) then m = 1 end if i <= vTo then m = 1 end if m == 1 then SetValue(i, num2, y-vminus) Setval(i, num2, y-vminus) end end end end end return 0 end function channel(curto, curfrom, index, num1, num2, num3, num4, num5, num6) a1 = 0 a2 = 0 a3 = 0 a4 = 0 n = 0 a = 0 b = 0 for i = curfrom, curto do n=n+1 a1 = a1+i*C(i) a2 = a2+i a3 = a3+C(i) a4 = a4+i*i end if((n*a4 - a2*a2) ~= 0) then -- if oldindex ~= Size() then a = (n*a1 - a2*a3)/(n*a4 - a2*a2) b = (a3 - a*a2)/n vminus = 0 vplus = 0 vminus_n = 0 vplus_n = 0 for i = curfrom, curto do y = a*i + b if y>C(i) and y-C(i) > vminus then vminus = y - C(i) end if y<C(i) and C(i)-y > vplus then vplus = C(i) - y end end --[[ if vminus_n ~= 0 then vminus = 2*vminus/vminus_n end if vplus_n ~= 0 then vplus = 2*vplus/vplus_n end --]] x1 = curfrom x2 = curfrom x3 = curfrom y1 = C(x1) y2 = C(x2) y3 = C(x3) --de = 0.5*(vplus + vminus)/C(index-leng) --/(C(index-leng) - (a*(index-leng) + b - vminus)) de = proc*C(curfrom) delt = 10 if curto+delt > index then delt = 0 end if minh*C(curfrom)/100 < vplus + vminus then for i = 1, curfrom do SetValue(i, num1, nil) SetValue(i, num2, nil) SetValue(i, num3, nil) SetValue(i, num4, nil) SetValue(i, num5, nil) SetValue(i, num6, nil) end for i = curfrom, curto+delt do y = a*i + b m = 0 if C(curto) > C(curfrom) and y+vplus < C(curto)+2*(C(curto)-C(curfrom)) and y+vplus > C(curfrom)-2*(C(curto)-C(curfrom)) then m = 1 end if C(curto) < C(curfrom) and y+vplus < C(curfrom)+2*(C(curfrom)-C(curto)) and y+vplus > C(curto)-2*(C(curfrom)-C(curto)) then m = 1 end if i <= curto then m = 1 end if m == 1 then SetValue(i, num5, y + vplus) Setval(i, num5, y+ vplus) end --SetValue(i, 2, y) m = 0 if C(curto) > C(curfrom) and y- vminus < C(curto)+2*(C(curto)-C(curfrom)) and y- vminus > C(curfrom)-2*(C(curto)-C(curfrom)) then m = 1 end if C(curto) < C(curfrom) and y- vminus < C(curfrom)+2*(C(curfrom)-C(curto)) and y- vminus > C(curto)-2*(C(curfrom)-C(curto)) then m = 1 end if i <= curto then m = 1 end if m == 1 then SetValue(i, num6, y - vminus) Setval(i, num6, y-vminus) end --vl = C(i) -- (y - vminus) vl = C(i) -- (y - vminus) if i == curfrom then y1 = vl y2 = vl y3 = vl else if (vl > y1+de and y1 < y2) or (x1==curfrom and vl > y1) then x3 = x2 y3 = y2 x2 = x1 y2 = y1 x1 = i y1 = vl end if vl > y1 and vl > y2 then x1 = i y1 = vl end if (vl < y1-de and y1 > y2) or (x1==curfrom and vl < y1) then x3 = x2 y3 = y2 x2 = x1 y2 = y1 x1 = i y1 = vl end if vl < y1 and vl < y2 then x1 = i y1 = vl end end end --[[ k = (C(x1)- C(x2))/(x1- x2) for i = x2, x1 do curv = i*k + C(x1) - x1*k SetValue(i, 4, curv) end k = (C(x2)- C(x3))/(x2- x3) for i = x3, x2 do curv = i*k + C(x2) - x2*k SetValue(i, 5, curv) end --]] recalcline(num1, num2, x2, x1, index, 20) recalcline(num3, num4, x3, x2, index, 20) end end end function Setval(i, num, v) if sz == i then if num == 1 then v1 = v end if num == 2 then v2 = v end if num == 3 then v3 = v end if num == 4 then v4 = v end if num == 5 then v5 = v end if num == 6 then v6 = v end if num == 7 then v7 = v end if num == 8 then v8 = v end if num == 9 then v9 = v end if num == 10 then v10 = v end if num == 11 then v11 = v end if num == 12 then v12 = v end if num == 13 then v13 = v end if num == 14 then v14 = v end end end function OnCalculate(index) -- leng = Settings.leng minh = Settings.minh delt = Settings.delt delt2 = delt proc0 = Settings.proc0 proc0 = proc0/100 proc = Settings.proc proc = proc/100 sz = Size() vl = C(index) if index == 1 then y_1 = vl y_2 = vl else if C(index) > y_1*(1+proc0) and y_1 < y_2 then x_3 = x_2 x_2 = x_1 y_2 = y_1 x_1 = index y_1 = C(index) end if C(index) > y_1 and C(index) > y_2 then x_1 = index y_1 = C(index) end if C(index) < y_1*(1-proc0) and y_1 > y_2 then x_3 = x_2 x_2 = x_1 y_2 = y_1 x_1 = index y_1 = C(index) end if C(index) < y_1 and C(index) < y_2 then x_1 = index y_1 = C(index) end end --[[ if x_1 ~= index then curfrom = x_1 curto = index else --]] curfrom = x_2 curto = x_1 --end --[[ if curto ~= curfrom and curfrom ~= nil and curto ~= nil then if C(curto) ~= nil and C(curfrom) ~= nil then k = (C(curto)- C(curfrom))/(curto- curfrom) for i = curfrom, index do curv = i*k + C(curto) - curto*k SetValue(i, 10, curv) end end end --]] if index == sz then --[[ curto = x_1 curfrom = x_2 k = (C(curto)- C(curfrom))/(curto- curfrom) for i = curfrom, curto do curv = i*k + C(curto) - curto*k SetValue(i, 11, curv) end --]] curto = index curfrom = x_1 --[[ k = (C(curto)- C(curfrom))/(curto- curfrom) for i = curfrom, curto do curv = i*k + C(curto) - curto*k SetValue(i, 10, curv) end --]] channel(curto, curfrom, index, 6, 7, 8, 9, 1, 2) --[[ --]] curto = x_1 curfrom = x_2 channel(curto, curfrom, index, 10, 11, 12, 13, 3, 4) end return v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11 , v12, v13, v14 end
Модели метода анализа Тактика Адверза универсальны как для анализа ценового движения так и расчёта будущей волатильности. В этом топике я приведу пример на истории, поскольку данная возможность, расчёт волатильности инструмента, появилась совсем недавно в программе.
Недельная волатильность индекса РТС в пунктах (1 пункт = 0,01 значения индекса), модель расширения с дальней НР, после достижения этого уровня ожидаем рост волатильности:
Друзья, 2020-й торговый год подошел к концу и хочу напомнить вам об одном маленьком лайфхаке, о котором многие не знают или забывают!
Прибыли и убытки у разных брокеров можно сальдировать и вернуть излишне уплаченный налог у прибыльного брокера.
В двух словах как это сделать?
1) Взять справку 2 НДФЛ у прибыльного брокера, где отражена сумма прибыли и уплаченного за вас налога в 2020 году.
2) Взять справку об убытках у убыточного брокера, где отражена сумма вашего убытка за 2020 год.
3) На основании двух этих справок заполнить в личном кабинете налоговой форму 3-НДФЛ.
4) Ждать возврата излишне уплаченного налога на свой счет.
Всем добра! Не теряйте деньги!
Брокер, зарегистрированный за рубежом, не является налоговым агентом, поэтому платить налоги в РФ надо самостоятельно, в этом случае.
Извините, что не про коронавирус!
Как доплатить налоги с акций США биржи СПБ?
Это очень частый вопрос на данном сайте… к сожалении очень мало информации. По умолчанию снимают 30% в США. Если вы подписали форму W8-BEN, то снимают в США 10%, но тогда вам надо доплатить 3% в России.
Никаких экселей не надо! Ничего считать не надо!
Краткая инструкция:
1. На сайте налоговой заходим в личный кабинет налогоплательщика (если он у вас есть)
2. В личном кабинете налогоплательщика в меню «Жизненные ситуации» выбираем пункт «Налоговая декларация физических лиц»
дивидендов с акций США торгуемых на бирже СПБ?" title="Как подать налоговую декларацию онлайн для дивидендов с акций США торгуемых на бирже СПБ?" />
Нажимаем пункт «заполнить онлайн»
3. Далее заполняем титул декларации: