Избранное трейдера klimvv
--[[ индикатор: канал на последнем зигзаге индикатор строит канал по зигзагу, показывает слом тренда при выходе цены за границы канала параметры: Procent - величина зигзага в % k - коэффизиент ширины канала Ext - =0-канал стоится по средним =1-канал стоится по экстремуму --]] Settings= { Name = "Zigzag_channel_fast", -- название индикатора Procent=5, -- величина зигзага в % k=2, -- коэффизиент ширины канала Ext=1, -- =0-канал стоится по средним =1-канал стоится по экстремуму shif=0, line= { { Name = "zigzagline", Type =TYPE_LINE, Width = 1, Color = RGB(120,90, 140) }, { Name = "cur1", Type =TYPE_LINE, Width = 1, Color = RGB(0,0, 0) }, { Name = "cur2", Type =TYPE_LINE, Width = 2, Color = RGB(0,200, 200) }, { Name = "cur3", Type =TYPE_LINE, Width = 2, Color = RGB(200,200, 0) }, { Name = "cur4", Type =TYPE_LINE, Width = 1, Color = RGB(0,0, 0) }, { Name = "cur5", Type =TYPE_LINE, Width = 2, Color = RGB(0,0, 255) }, { Name = "cur6", Type =TYPE_LINE, Width = 2, Color = RGB(255,0, 0) }, { Name = "cur7", Type =TYPE_LINE, Width = 2, Color = RGB(255,0, 0) }, { Name = "cur8", Type =TYPE_LINE, Width = 2, Color = RGB(255,0, 0) }, { Name = "cur9", Type =TYPE_LINE, Width = 2, Color = RGB(255,0, 0) }, { Name = "cur10", Type =TYPE_LINE, Width = 2, Color = RGB(255,0, 0) }, { Name = "cur11", Type =TYPE_LINE, Width = 2, Color = RGB(255,0, 0) } } } function Init() y1 = nil y2 = nil y3 = nil x1 = 1 x2 = 1 x3 = 1 oldindex = 1 a_01 = 0 b_01 = 0 a_02 = 0 b_02 = 0 vminus_01 = 0 vplus_01 = 0 vminus_02 = 0 vplus_02 = 0 vFrom_01 = 1 vTo_01 = 1 vFrom_02 = 1 vTo_02 = 1 vminus = 0 vplus = 0 vminus_n = 0 vplus_n = 0 ret = 0 last_ind = 1 v1=nil v2=nil v3=nil v4=nil v5=nil v6=nil v7=nil v8=nil v9=nil v10=nil return 10 end function recalcline(num, index, rec) 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 if index == Size()-sh or rec == 1 then if num == 1 then vFrom = 0 --[[ --]] vTo = 0 if x3 < x2 then vFrom = x3 vTo = x2 else vFrom = x2 vTo = x3 end end if num == 2 then vFrom = 0 vTo = 0 if x1 < x2 then vFrom = x1 vTo = x2 else vFrom = x2 vTo = x1 end end if vFrom < 1 then vFrom = 1 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, index do y = a*i + b if i>0 then if C(i) < y and i <= vTo then if ex == 0 then vminus = vminus + y - C(i) vminus_n = vminus_n + 1 else if i == vFrom then vminus = 0 end if y-C(i) > vminus then vminus = y-C(i) end end end end if i>0 then if C(i) > y and i <= vTo then if ex == 0 then vplus = vplus + C(i) - y vplus_n = vplus_n + 1 else if i == vFrom then vplus = 0 end if C(i)-y > vplus then vplus = C(i)-y end end 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 --SetValue(i, 2, y) end end --end if ex == 0 then if vminus_n ~= 0 then vminus = kk*vminus/vminus_n end if vplus_n ~= 0 then vplus = kk*vplus/vplus_n end end end if num == 1 then a_01 = a b_01 = b vminus_01 = vminus vplus_01 = vplus vFrom_01 = vFrom vTo_01 = vTo end if num == 2 then a_02 = a b_02 = b vminus_02 = vminus vplus_02 = vplus vFrom_02 = vFrom vTo_02 = vTo end return 1 end return 0 end function levels(x, y, num, index) if y ~= nil and x ~= 1 then for i = 1, index do if i > x then SetValue(i, num, y) else SetValue(i, num, nil) end end end end function OnCalculate(index) de = Settings.Procent kk = Settings.k ex = Settings.Ext sh = Settings.shif v1=nil v2=nil v3=nil v4=nil v5=nil v6=nil v7=nil v8=nil v9=nil v10=nil if index > Size()-sh then --return nil, nil, nil, nil, nil, nil, nil return v1, v2, v3, v4, v5, v6, v7, v8, v9, v10 end vl = C(index) if vl~=nil then if index == 1 then y1 = vl y2 = vl else if C(index) > y1*(1+de/100) and y1 < y2 then x3 = x2 x2 = x1 y3 = y2 y2 = y1 x1 = index y1 = C(index) ret = recalcline(1, index, 0) ret = recalcline(2, index, 0) levels(x1, y1, 8, index) levels(x2, y2, 9, index) levels(x3, y3, 10, index) end if C(index) > y1 and C(index) > y2 then x1 = index y1 = C(index) end if C(index) < y1*(1-de/100) and y1 > y2 then x3 = x2 x2 = x1 y3 = y2 y2 = y1 x1 = index y1 = C(index) ret = recalcline(1, index, 0) ret = recalcline(2, index, 0) levels(x1, y1, 8, index) levels(x2, y2, 9, index) levels(x3, y3, 10, index) end if C(index) < y1 and C(index) < y2 then x1 = index y1 = C(index) end end end --[[ if x1 ~= index then curfrom = x1 curto = index else curfrom = x2 curto = x1 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, 1, curv) end end end --]] if index == Size()-sh and ret == 0 then ret = recalcline(1, index, 1) ret = recalcline(2, index, 1) levels(x1, y1, 8, index) levels(x2, y2, 9, index) levels(x3, y3, 10, index) end if index == Size()-sh then --- and index ~= last_ind if vTo_01 - vFrom_01 > 500 then vFrom_01 = vTo_01-500 end for i = 1, index do SetValue(i, 3, nil) SetValue(i, 4, nil) SetValue(i, 6, nil) SetValue(i, 7, nil) end for i = vFrom_01, index do y = a_01*i + b_01 + vplus_01 m = 0 if C(vTo_01) > C(vFrom_01) and y < C(vTo_01)+0.3*(C(vTo_01)-C(vFrom_01)) and y > C(vFrom_01)-0.3*(C(vTo_01)-C(vFrom_01)) then m = 1 end if C(vTo_01) < C(vFrom_01) and y < C(vFrom_01)+0.3*(C(vFrom_01)-C(vTo_01)) and y > C(vTo_01)-0.3*(C(vFrom_01)-C(vTo_01)) then m = 1 end if m == 1 then SetValue(i, 3, y) if i == index then v3 = y end end y = a_01*i + b_01 - vminus_01 m = 0 if C(vTo_01) > C(vFrom_01) and y < C(vTo_01)+0.3*(C(vTo_01)-C(vFrom_01)) and y > C(vFrom_01)-0.3*(C(vTo_01)-C(vFrom_01)) then m = 1 end if C(vTo_01) < C(vFrom_01) and y < C(vFrom_01)+0.3*(C(vFrom_01)-C(vTo_01)) and y > C(vTo_01)-0.3*(C(vFrom_01)-C(vTo_01)) then m = 1 end if m == 1 then SetValue(i, 4, y) if i == index then v4 = y end end end if vTo_02 - vFrom_02 > 500 then vFrom_02 = vTo_02-500 end for i = vFrom_02, index do y = a_02*i + b_02 + vplus_02 m = 0 if C(vTo_02) > C(vFrom_02) and y < C(vTo_02)+0.1*(C(vTo_02)-C(vFrom_02)) and y > C(vFrom_02)-0.1*(C(vTo_02)-C(vFrom_02)) then m = 1 end if C(vTo_02) < C(vFrom_02) and y < C(vFrom_02)+0.1*(C(vFrom_02)-C(vTo_02)) and y > C(vTo_02)-0.1*(C(vFrom_02)-C(vTo_02)) then m = 1 end if m == 1 then SetValue(i, 6, y) if i == index then v6 = y end end y = a_02*i + b_02 - vminus_02 m = 0 if C(vTo_02) > C(vFrom_02) and y < C(vTo_02)+0.1*(C(vTo_02)-C(vFrom_02)) and y > C(vFrom_02)-0.1*(C(vTo_02)-C(vFrom_02)) then m = 1 end if C(vTo_02) < C(vFrom_02) and y < C(vFrom_02)+0.1*(C(vFrom_02)-C(vTo_02)) and y > C(vTo_02)-0.1*(C(vFrom_02)-C(vTo_02)) then m = 1 end if m == 1 then SetValue(i, 7, y) if i == index then v7 = y end end end last_ind = index end return v1, v2, v3, v4, v5, v6, v7, v8, v9, v10 end
Ещё с самого начала, в первой части, писал, что проект является экспериментальным, что из него получится я не знаю.Получится — хорошо, не получится — останутся наработки, которые могут пригодиться в дальнейшем.Тем не менее, обещал освещать ход проекта.
На сегодняшний день удалось получить на тестах некоторую незначительную и неустойчивую прибыль. Эти копейки не произведут впечатления на читателя — такое вы и сами получали неоднократно. Даж позориться не хочется.)
Но, что это дало? Это позволило алгоритмически более-менее разграничить области возможных лонгов и шортов.
Дальше есть следующие возможности:
а. Накручивать на ТС различные индикаторы и долго и нудно подбирать их параметры и условия входа в сделку и соответствующую логику.
в. Попробовать использовать для построения ТС методы машинного обучения (МО. Тем более, какие-то наработки в этой области у меня уже есть.
«И так как с детства его влекло к технике, то он всею душою отдался пункту «в» (тайное похищение чужого имущества, совершенное с применением технических средств или неоднократно».© Пункт «в» мне тоже более интересен, однако я совсем не исключаю и параллельного применения элементов из пункта «а».
Для тех, кто не в теме, немного подробней.
Если мы возьмём рыночные данные, каким-то образом их идеально подготовим, попробуем обучить какое нибудь МО (нейросеть (НС), скажем), то мы, скорее всего, сразу получим великолепные результаты. Единственным недостатком этих результатов будет то, что прибыль мы сможем получить только на той истории, на которой мы обучали МО. На реале и даже на другом отрезке истории такая ТС работать скорее всего не будет.
Рыночные зависимости очень неявные, встречаются в ценовом ряду нечасто и выделить их на общем фоне удачных и неудачных сделок не представляется возможным. В результате МО при обучении находит некоторые зависимости или псевдозависимости имеющиеся только в обучающей последовательности, нигде более не встречающиеся и обучается им. Т.е., псевдозависимости оказываются более явными, чем то что мы пытаемся найти.
Как с этим планируется бороться, это, возможно, обсудим уже в следующий раз.
Так вот 20 век с его 5% сверх инфляции для ассет алокейшен и фондовых индексов — это как 2020 год для спекулей. С учетом частоты сделок это как раз здоровая пропорция по тайм-фрейму, где-то на два порядка разница счастливого периода.
Это экстраполяция самого успешного капитализма в самое успешное время, 19-20 вв. Что может пойти не так, и непременно пойдет, если мы отказываемся верить в экстраполяцию 5% на бесконечность, что противоречило бы даже законам природы?
1). Демография. У нас в конце 20 века вообще-то фазовый переход, человечество, которое растет по гиперболе, и человечество на плато — это разные экономики.
2). Концепция «устойчивого развития». Ведущие капиталисты планеты, кажется, собрались бороться с капитализмом, ограничивать потребление, и это то, чего еще не было. И это снова плохие новости.
3). Налоги. Социализм снова на марше. Отсылаю к Пикетти, там прогрессивные борцы за все хорошее против всего плохого собрались вводить чуть ли не 2% годового налога на любой капитал. Иногда это секта бывает очень успешна в своих хотелках, см. историю.
4). Просто черные лебеди, которые в 19-20 вв. летали за капитал, а могут начать против.
Для меня даже не вопрос, кончится ли «период 5% реальной пассивной доходности», вопрос лишь, когда, и хватит ли на наш век. Но даже и сейчас — это не 5%. Учтите текущие налоги, в том числе — налог на дивиденды. Учтите комиссии. Учтите, что на хаях эквити в рынок заносят больше, чем на лоях, и не только потому, что жадность и страх — на хаях эквити у людей просто больше свободных денег (в 2007, чем в 2008-2009, например).
То есть апологеты пассивного инвестирования зачастую позволяет себе то, что они презирают и отлично видят у активных управляющих — курвафиттинг исторического бэк-теста, ошибку выжившего, и некорректную экстраполяцию. После чего, разоблачив жулье с их 500%, делают тот же фокус со своими скромными 5%.
Интеллектуально это схожий подход, «доказано успешной статистикой». Разница в том, что фреймы другие — на таких фреймах, как говорится, или эмир умрет, или ишак сдохнет. Т.е. шансов не опровергнуться при жизни больше, чем у трейдеров и отбирателей лучших бумаг.
Банкиры опять за старое. Вчерашнее заседание в Джексон Холле прошло без потрясений. Американский станок не намерен останавливаться в ближайшее время, хотя манипуляции со стороны должностных лиц набирали обороты всю неделю. Для нас это означает ближайший позитив на рынках. Поэтому то Индекс Мосбиржи и завершил неделю в +1,43%.
Нефть тоже набралась заряда для роста и ударной свечкой вынесла шортистов, торгуется выше $72. Еще бы понять за счет чего такой позитив на нефтяном рынке… Но я не устаю говорить, что нефть — это политический инструмент, нежели инвестиционный.
Доллару перекрыли все пути к росту. Предстоящие выборы, высокая нефть, спокойствие на геополитической арене. Дожмем ли до 72 рублей, узнаем уже в сентябре, но мышка уже наведена на кнопку — «Buy»
В красную зону на этой недели попадают разве что золотодобытчики, которых тянет вниз цена на драгметалл. Polymetal теряет 2,6% вплотную приближаясь к моим целевым уровням. Полюс скоромнее -0,4%.
Угольщики, сводимые с ума ускорением цен на сырье, завершили неделю с двузначной доходностью. Распадская +10,7%. А черный металлург Мечел +25,3% по обычке и +40,3% по префам. Причина в потенциально-высоких дивидендах. По дивидендной политике акционеры могут рассчитывать на 20% от чистой прибыли. Если мы возьмём лишь первое полугодие, там накопленных дивидендов 47 рублей получается, что по текущим дает 21% доходности.
Какие бы дивы не рекомендовало руководство, для меня инвестиционной идеи в Мечеле быть не может. Компания с отрицательным капиталом и бешеной задолженность в 300 ярдов, вместо погашения долга «дербанит» прибыль, без комментариев…
Электрогенерация тоже на коне. ИнтерРАО, которую давили весь прошлый месяц отскакивает на 8,8%. Позитивная отчетность послужила толчком. Энел тоже растет на 2,7%. Инвесторы надеются на восстановление выплат дивидендов уже по итогам 2021 года. Юнипро и Русгидро завершили неделю скромно прибавив 0,6% каждый.
Смартлаб устроил голосование, сколько среди нас квалифицированных инвесторов, и как неквалы собираются жить в ближайшем будущем:
smart-lab.ru/company/smartlabru/blog/718687.php
В комментариях к посту многие выразили довольно популярное, НО ОШИБОЧНОЕ мнение о том, что необходимые формальные требования для получения статуса можно очень быстро выполнить «оборотами» — проторговав с плечами деривативами на огромные суммы, ничем особенно не рискуя.
Использовать фьючерсы/опционы действительно можно, НО! единичные сделки на большие суммы не приведут Вас к желаемому результату и вот почему:
— Кто такой «квалифицированный инвестор» говорит нам п.4. ст. 51.2 «Закона о рынке ценных бумаг»
www.consultant.ru/document/cons_doc_LAW_10148/7ce0bd4ff6146a754480aaa7e7d4d7c74f8f21de/
— Конкретные требования прописаны в «Указаниях Банка России»
www.consultant.ru/document/cons_doc_LAW_180527/cd268b0476ee1900eab615ce5a1811ac4063f492/
— Основные «способы» быть квалом, как следует из указаний ЦБ — иметь активы на 6 млн рублей или совершить сделок на 6 млн рублей (убираем за скобки экзотические вещи — работа в профучастнике, сертификаты CFA и аттестаты аудитора, и прочее)
Печатая деньги и покупая долговые обязательства, как это делалось с 1933 года, центральные банки поддерживали цикл расширения денежной и долговой массы. Они делали это, совершая покупки, которые подталкивали цены на облигации вверх, и предоставляя продавцам этих облигаций наличные деньги, что приводило их к покупке других активов. Это подталкивало цены на эти активы вверх и, по мере того как они росли в цене, снижало будущую ожидаемую доходность. Поскольку процентные ставки были ниже ожидаемой доходности других инвестиций, а доходность облигаций и другие будущие ожидаемые доходы упали до очень низких уровней по сравнению с доходами, необходимыми инвесторам для финансирования своих различных расходных обязательств, инвесторы все чаще занимали деньги для покупки активов, доходность которых, как они ожидали, будет выше, чем стоимость займа. Другими словами, они следовали классическому процессу «пузыря», покупая финансовые активы на заемные деньги, делая ставку на то, что купленные ими активы будут иметь более высокую доходность, чем их стоимость. Покупки с использованием заемных средств подтолкнули цены на эти активы вверх, понизили их ожидаемую будущую доходность и создали новую уязвимость долгового пузыря, которая может дать о себе знать, если доходы, полученные от купленных активов, окажутся ниже стоимости заемных средств. Когда долгосрочные и краткосрочные процентные ставки были около 0%, а покупка облигаций центральными банками не так эффективно использовалась для стимулирования экономического роста и помощи тем, кто больше всего в ней нуждался, мне стало очевидно, что второй тип денежно-кредитной политики не будет работать хорошо и потребуется третий тип денежно-кредитной политики — «денежно-кредитная политика 3», или ДКП3. ДКП3 работает за счет того, что центральные правительства резервных валют увеличивают свои заимствования и направляют свои расходы и кредитование туда, куда они хотят, а центральные банки резервных валют создают деньги и кредиты и покупают долговые обязательства (и, возможно, другие активы, например, акции) для финансирования этих покупок.