Name: TradeWind Robot
Author: talkincat
==================
Итак, как устроен робот:
Для определения краткосрочного и долгосрочного тренда робот использует простейший набор индикаторов, отвечающий поставленной задаче.
Это 3 мувинга:
Короткий мувинг 4-6, служит также стопом(об этой фунции позже). Маркируется на графике буквами SMA_ТИКЕР, где ТИКЕР - тикер инструмента.
SMA - Short Moving Average.
Следующий мувинг, Long Moving Average, маркируется на графике LMA_ТИКЕР значение находится в диапазоне 20-30
Последний мувинг, High Moving Average, маркируется HMA_ТИКЕР значение в пределах 100-150
Значения мувингов разумеется можно менять, у меня нет каких-то жестких рекомендаций, я сам исходил из того, что Элдер,
отвечая на вопрос как определить старший таймфрейм по отношению к текущему, сказал умножайте на 5 - не ошибетесь.
Однако помните, что SMA должен оставться небольшим, таким чтобы его можно было использовать в качестве стопа.
Далее. Как именно робот определяет тренд по мувингам:
Робот берет данные трех последних свечей(из которых по крайней мере 2 свечи уже закрыты) для пары мувингов. Если на протяжении двух свечей
расстояние между мувингами увеличивается и короткий мувинг выше длинного, робот считает что это аптренд. Если расстояние увеличивается,
но короткий мувинг ниже - робот считает что это даунтренд. Иначе робот считает что это флэт.
Таким образом мы получаем значения краткосрочного и долгосрочного трендов по инструменту и его поводырю.
Теперь мы можем сформулировать правила формирования сигналов на открытие позиций:
BUY / SELL - Сигнал формируется если совпали краткосрочные тренды по инструменту и его поводырю.
STRONG BUY / STRONG SELL - Сигнал формируется если с сигналом BUY / SELL совпал один из долгосрочных трендов - инструмента или поводыря.
EXTRA BUY / EXTRA SELL - Совпали все тренды инструмента и поводыря, определенные роботом.
В данной версии робот будет открывать позиции при условии что обнаружен сигнал не ниже STRONG BUY / STRONG SELL
и одновременно отсутствует сигнал на закрытие соответствующей позиции.
Закрытие позиций:
Позиция закрывается одним из двух способов:
1) По стоплоссу, значение которого задается индивидуально для каждого инструмента в шагах цены.
2) При отклонении короткого мувинга SMA_ТИКЕР в сторону, обратную движению цены на некоторый коэффицент, выраженный
в шагах цены. Способ предложен Перри Кауфманом для входов в позицию, но имхо для выходов тоже годится. Коэффициент
по умолчанию равен 0.3 исключительно из тех соображений чтобы можно было визуально заметить на графике отклонение
короткого мувинга от горизонтали. С коэффициентом можно экспериментировать, он задается индивидуально для каждого инструмента и
может быть даже отрицательным, тогда речь будет идти не об экстремуме на мувинге, а просто о его предельном угле наклона.
Робот будет закрывать позицию при выполнении любого из этих условий, за исключением тех случаев когда действует сигнал на вход
в позицию.
Робот набирает нужный объем, выставляя заявки по 1 лоту. Выходит из позиции также по одному лоту.
График поводыря настраивается точно так же, как график инструмента, на нем должны присутствовать те же три мувинга. В качестве
инструментов можно использовать(по крайней мере на ММВБ) как акции, так и фьючерсы. В качестве поводырей - тоже))) То есть в
файле конфигурации например есть такие пары: акция VTBR с поводырем VBU3 и фьючерс VBU3 с поводырем RTSI. Все это может
работать одновременно в одном списке (естественно не в вечернюю сессию, когда акции не торгуются).
Робот может работать в режиме советника, в этом режиме он позиции не открывает, а только сопровождает и закрывает.
В конфиге, который выкладываю с программой все инструменты настроены для работы в режиме советника. Это сделано для того,
чтобы действия с программой были более осознанными))
Теперь о конфиге:
Формат xml конечно самый правильный для конфигов, однако править его руками очень неудобно)))
Поэтому конфиг сделан в виде исполняемого файла Lua, который достаточно прост для понимания и удобен для редактирования.
Собственно, вот он:
----- INI-FILE -----
--------------------
VBU3 = {}
VBU3.name = "VBU3"
VBU3.Vane = "RTSI"
VBU3.enabled = false
VBU3.market = false
VBU3.brake=0.3
VBU3.trade_volume=2
VBU3.stop_steps=15
VBU3.maxloss=100
--------------------
SRU3 = {}
SRU3.name = "SRU3"
SRU3.Vane = "RTSI"
SRU3.enabled = false
SRU3.market = false
SRU3.brake=0.3
SRU3.trade_volume=1
SRU3.stop_steps=16
SRU3.maxloss=100
--------------------
LKU3 = {}
LKU3.name="LKU3"
LKU3.Vane="MICEXO&G"
LKU3.enabled = false
LKU3.market = true
LKU3.brake=0.3
LKU3.trade_volume=1
LKU3.stop_steps=19
LKU3.maxloss=150
--------------------
GZU3={}
GZU3.name="GZU3"
GZU3.Vane="MICEXO&G"
GZU3.enabled = false
GZU3.market=true
GZU3.brake=0.3
GZU3.trade_volume=1
GZU3.stop_steps=19
GZU3.maxloss=150
--------------------
RNU3={}
RNU3.name="RNU3"
RNU3.Vane="MICEXO&G"
RNU3.enabled = false
RNU3.market = true
RNU3.brake=0.3
RNU3.trade_volume=1
RNU3.stop_steps=22
RNU3.maxloss=200
--------------------
RIU3={}
RIU3.name="RIU3"
RIU3.Vane="RTSI"
RIU3.enabled = false
RIU3.market = false
RIU3.brake=0.3
RIU3.trade_volume=1
RIU3.stop_steps=19
RIU3.maxloss=200
--------------------
VTBR={}
VTBR.name="VTBR"
VTBR.Vane="VBU3"
VTBR.enabled = false
VTBR.market = true
VTBR.brake=0.3
VTBR.trade_volume=1
VTBR.stop_steps=17
VTBR.maxloss =10
--------------------
--------------------
Tickers = {VBU3,SRU3,LKU3,GZU3,RNU3,RIU3,VTBR}
toLog(log,"ini read")
toLog(log, Tickers)
--------------------
---- END OF INI ----
Инструмент обязательно должен быть описан(заданы значения настроек) и включен в таблицу Tickers
Разберем значение настроек:
.name - тот самый ТИКЕР который должен присутствовать на графике инструмента.
ТИКЕР лучше брать реальный, иначе может возникнуть ошибка при определении кода класса инструмента.
.Vane - флюгер, поводырь. ТИКЕР который должен быть на графике поводыря.
.enabled - логическая переменная, принимает значения true либо false. true означает полный цикл работы по данному инструменту,
в режиме советника должно быть false
.market - тип заявки для данного инструмента, если true - рыночная, если false - лимитированная
.brake - "коэффициент торможения", для закрытия позиций. число.
.trade_volume - максимальное количество лотов данного инструмента
.stop_steps - стоплосс для данного инструмента в количестве шагов цены
.maxloss - максимальная просадка по данному инструменту. Если превышена максимальная просадка, инструмент переводится в состояние
DISABLED, то есть в режим советника до ближайшего клиринга.
Акции на вечерней сессии переводятся в режим STOPPED автоматически. В этом режиме инструмент не обрабатывается, индикация по нему не меняется.
Таймфрейм - минутки, пятиминутки. Хотя работать будет на любом и наверное на больших таймфреймах даже лучше)
В общем, никакого грааля нет, робот трендовый, поэтому на флэте неминуемо будет сливать. Но при хороших движениях будет в плюсе.
Заявки открытые не им, робот не закрывает(свои удаляет по комментарию). Поэтому библиотека ему нужна QL_beta
При завершении работы создает файл WC.txt в котором сохраняет координаты рабочего окна.
В логи пишет не все подряд, а только при наличии сигналов
Разумеется, все на свой страх и риск. Никаких гарантий
Но за хорошие идеи буду благодарен
В основном наверное все. Если что вспомню - допишу. И так много сразу)