Три года назад пришла идея реализовать один торговый алгоритм. Привлекали диагональные уровни поддержки/сопротивления, которые явно визуально видны, но не было графического индикатора для многих терминалов, чтобы автоматизировать процесс.
Была найдена информация на эту тему, созданы методы расчета, тестеры программы симуляционной торговли, и полностью автономный робот на базе терминала Квик.
Что выяснилось? Эти системы работают в реале и существует множество способов «обыгрывания» диагональных уровней. Для их торговли применял фильтры ложного-неложного пробоя по Л. Рашке; метод Сперандро (там уровни чуть по другому рассчитываются) и т.д… Здесь иногда появлялись посты на эту тему, торгуют их. Например misa с его простой и гениальной системой.
Метод постепенно эволюционировал, оброс диверсификацией, мани-менеджментом и т.п.
Все это я реально использовал в своих торговых алгоритмах, которые зарабатывали продолжительное время. Затем доходность упала (весна 2016, снижение волатильности в Си, которая была ведущим инструментом в портфеле) мани-менеджмент «порезал» плечи, робот «мумифицировался» и был отключен. Я перешел на другие методы торговли, а недавно протестировал некоторые незаслуженно заброшенные системы диагональных уровней – работают.
Добавляю новую полезность для терминала QUIK.
По заказам доводилось делать много торговых систем, торгующих по горизонтальным уровням. Каждый заказчик строил свою систему, все они были успешно реализованы.
А как же диагональные уровни? Их возможно построить вручную, сколько людей, столько мнений…
Сегодняшний индикатор показывает косые уровни, их можно интерпретировать как диагональные уровни поддержки-сопротиления, линии каналов и т.п.
Добавляю код сделанного мной индикатора Parabolik в котором параметр ускорение зависит от волатильности. Чем больше волатильность, тем больше увеличивается ускорение и индикатор быстрее «догоняет» цену. Подобные есть на просторах интернета для метатрейдера (и не бесплатно), для квика не встречал.
Видно, что он дает меньше перескоков (красный), чем обычный Parabolik (черный). Хорошо себя зарекомендовал для выходов из позиций, открытых по тренду. На вход в боковике конечно будет давать ложные сигналы, как и обычный Parabolik (но меньше!), создатель которого не рекомендовал только его использовать для открытия позиций.
Код индикатора:
Settings = { Name = "Parabolic ATR", Period_ATR=14, line = {{ Name = "Parabolic ATR", Type = TYPE_POINT, Color = RGB(255,0,0), Width = 2 } } } old_idx=0 long=false short=false revers=false function Init() return 1 end function OnCalculate(idx) if idx<Settings.Period_ATR then return nil else if idx==Settings.Period_ATR then psar={} psar[idx]=L(idx) long=true hmax=H(idx) per_ATR=Settings.Period_ATR local TR=0 for js=(idx-per_ATR),idx-1 do TR=(TR+H(js)-L(js)) end Old_ATR=TR/per_ATR revers=true else if idx~=old_idx then local TR=0 for js=(idx-per_ATR),idx-1 do TR=(TR+H(js)-L(js)) end local ATR=TR/per_ATR af=ATR/(Old_ATR+ATR) af=af/10 Old_ATR=ATR if long then if hmax<H(idx-1) then hmax=H(idx-1) end psar[idx]=psar[idx-1]+af*(hmax-psar[idx-1]) end if short then if lmin>L(idx-1) then lmin=L(idx-1) end psar[idx]=psar[idx-1]+af*(lmin-psar[idx-1]) end revers=true end if long and L(idx)<psar[idx] and revers then psar[idx]=hmax short=true long=false lmin=L(idx) af=Step revers=false end if short and H(idx)>psar[idx] and revers then psar[idx]=lmin long=true short=false hmax=H(idx) af=Step revers=false end end old_idx=idx return psar[idx] end end
Продолжение, начало здесь http://smart-lab.ru/blog/329688.php
Границу Грузии и Турции переезжали в Ахалцихе, там менее многолюдно, чем в Батуми. В Турции на авто необходима страховка (в Грузии вроде хотят с этого года тоже ввести), «сигорта» по-турецки. Можно сделать грин-кард дома, но это намного дороже, чем оформить сигорту на турецкой границе. После границы идет живописная горная дорога, покрытие много лучше, чем в Грузии.
Автомобильная культура в Турции на высоте, сказывается отсутствие железных дорог. Почти на любой заправке отельчик, мойка кафешка. Народ ездит очень грамотно, расчетливо, дороги хорошего качества. Правда дико дорогой бензин. Ввоз машины для иностранца — три месяца. Для пенсионеров-иностранцев, кто имеет недвижимость в Турции, эти сроки намного больше, можно купить авто без растаможки. Первым местом посещения была Каппадокия. Ехал от границы чрез Карс-Эрзурум-Кайсери в Гореме.
Ровно год исполняется с момента как мы начали это путешествие, сев в автомобиль и взяв курс на юг.Этому предшествовала подготовка: машина, не новая «Субару», с особым пристрастием осмотрена на сервисе, заменено кой-чего; составлен подробный маршрут с запасными вариантами; навигация с платными картами «Навител» — Россия, Грузия, Турция; карты «Виза» и «Мастер» разных банков. В самой южной точке маршрута, турецком прибрежном городке Авсалар забронирована квартира в кондо на два месяца.
Ну и конечно о нелегком (но местами приятном) бизнесе нашем… Я оставил работать своего нового робота (тут ничего не рекламирую), который за три месяца работы-отладки показал неплохие результаты. Без реинвестирования, чтобы не рушил мозг на отдыхе возможными просадками. Дал ему денег на ГО 25 Си, чтоб оправдать сервак, где он «вкалывает», ну и заработать/потерять без эмоций. Статистику покажу понедельно, в пунктах на контракт, как и вел.
Поехали втроем: я, жена, сын десяти лет. Первый город остановки и ночевки – Волгоград, выбрали этот маршрут в честь юбилея Победы, чтобы посетить Мамаев курган. По дороге один раз пытались развести гаишники, мол обгон через сплошную, у нас есть запись, сотрем за три тыщи.
Терминал позволяет разрабатывать самодельные индикаторы, работающие в отдельном потоке. Но индикаторам можно давать и дополнительную нагрузку, реализовывать даже легких роботов-индикаторов, торгующих автономно. Из плюсов – получаем штатное диалоговое окно средствами Квика, что-то рисуем не отходя от кассы… Не требуется подключения внешних библиотек для работы и отображения диалоговых окон, что повышает надежность и простоту установки.
Для примера сделал вполне рабочую программку авто стоп-тейк. Торговлю для примера на скользящих делать не стал, никому не нужна, а автостоп пригодится. Проверял на собственном реальном счете – работает. Пользуйтесь на здоровье!
Есть один недостаток: по одному графику инструмента (бумаги) не может работать индикатор, получающий данные извне этого графика (как этот) и луа скрипт с main. Происходит конфликт и Квик подвисает. Поэтому сейчас становится сложно надежно графически отобразить арбитражный спред например и его торговать. Но эту проблемку разработчики терминала обещают устранить в свежей версии.
Settings={ Name = "Fractal_Chennal", period=5, line={ { Name = "Level_High", Type =TYPE_LINE,-- = LINE --линии = DASH -- тире = POINT -- точки Width = 1, Color = RGB(0,255, 0)--green }, { Name = "Level_Low", Type =TYPE_LINE, Width = 1, Color = RGB(255,0,0)--root }}} idx_prosl=0 function Init() return 2 end function OnCalculate(idx) if idx==1 then P = math.floor(Settings.period/2)*2+1 message("Код бумаги: "..getDataSourceInfo().sec_code.." ; период индикатора: "..P,1) t_H,t_L={},{} end if idx~=nil and idx>P then if idx_prosl~=idx then local l=idx-P for l=l,idx-1 do t_H[l]=H(l) t_L[l]=L(l) end if t_H[#t_H-(P-1)/2]==math.max(unpack(t_H,#t_H-P+1,#t_H)) then H_ind_value=t_H[#t_H-(P-1)/2] end if t_L[#t_L-(P-1)/2]==math.min(unpack(t_L,#t_L-P+1,#t_L)) then L_ind_value=t_L[#t_L-(P-1)/2] end end else H_ind_value=nil L_ind_value=nil end idx_prosl=idx return H_ind_value, L_ind_value endКак пользоваться: