Идея создания этого торгового робота пришла в тот момент, когда я рассматривал график цены EUR/USD, на котором происходили довольно сильные движения цены. Причем никаких видимых предпосылок (на основании технического анализа) к этому движению не было. Неплохую прибыль мог бы извлечь торговый робот, движущийся за ценой – подумал тогда я. Именно движущийся за ценой, просто вслед за ценой, без какого либо предварительного анализа и оценки вероятностей. Такой робот мог бы извлекать прибыль из любого ценового движения даже не подчиняющегося никаким законам и логике. Что греха таить, мысль о том, что движения рынка по своей природе абсолютно хаотичны, иногда приходит в голову. Особенно когда на основе тщательно проведенного технического анализа, дождавшись всех необходимых сигналов индикаторов, открываешь позиции, которые в итоге приносят убыток.
Цена никогда не стоит на месте, с большей или меньшей интенсивностью, но она всегда движется. Возьмите дневную свечу, на которой есть минимум и максимум цены за день, и, как правило, разница между этими двумя значениями довольно велика. А что если открывать позиции вслед за ценой. Например, цена проходит десять пунктов вверх, и мы открываем позицию вверх (с установленными ордерами стоп-лосс и тейк-профит по 10 пунктов). Далее если цена продолжает свое движение, то наша позиция закрывается с профитом в 10 пунктов, и мы открываем следующую длинную позицию. В итоге пока цена идет вверх она сопровождается длинными позициями, закрывающимися в профите. Когда же цена развернется вниз, то очередная наша длинная позиция закроется по стоп-лосс с небольшим убытком. И т.к. цена пошла вниз, мы вслед за ней таким же образом начинаем открывать короткие позиции, получая теперь профит с них.
И все было бы хорошо, если бы не волатильность цен. Постоянные «ложные» колебания цены могут по многу раз инициировать открытие позиций и закрывать их с убытком прежде чем цена продолжит свое движение в определенном направлении. В этом случае суммарный убыток существенно перекрывает всю потенциальную прибыль, и игра попросту не стоит свеч.
Для того, чтобы попытаться нивелировать воздействие этих «ложных» колебаний я применил простой фильтр. Этот фильтр отслеживает последнюю цену покупки и последнюю цену продажи. Суть этого фильтра сводится к тому, чтобы не давать позиции открыться по цене ниже предыдущей для покупки и по цене выше предыдущей для продажи. Из-за этого фильтра короткие позиции открываются все ниже и ниже, а длинные – все выше и выше от начальной точки. А все колебания между ценой открытия последней длинной и последней короткой позиции попросту не учитываются (см. рис.1).
Рисунок 1 |
Текст программы торгового робота (с комментариями) на языке MQL4 выглядит следующим образом:
#property copyright "Blokhin Oleg" #property link "azbukatreydera.ru" int b,s,w,sl=100,tp=100;// sl и tp значения ордеров стоп-лосс и тейк-профит в пунктах double pos=1,v,n;// pos размер позиции int start() { // Задание цен на начальной точке (точке начала торговли) //------------- if(w==0) { v=Bid; n=Bid; w=1;// благодаря тому, что значение w поменялось на 1 этот блок //срабатывает только один раз при запуске торгового робота } //------------- if(OrdersTotal()==0)// если открытых ордеров нет { if(Bid<=v)// Если цена ниже предыдущей //открытие короткой позиции //---------- {s=OrderSend(Symbol(),OP_SELL,pos,Bid,3,Bid+sl*Point,Bid-tp*Point,0); v=Bid; } //---------- if(Bid>=n)// Если цена выше предыдущей //открытие длинной позиции //---------- {b=OrderSend(Symbol(),OP_BUY,pos,Ask,3,Ask-sl*Point,Ask+tp*Point,0); n=Bid; } //---------- } return; }
Копируйте, пользуйтесь. Но не забывайте, что я делюсь в большей степени идеей, и эту программу перед применением рекомендуется, как минимум оптимизировать, подобрав оптимальные значения переменных sl и tp (стоп-лосс и тейк-профит), а как максимум, добавить еще несколько блоков.
И еще один момент. Этого робота лучше использовать в течении ограниченного временного периода (например одного торгового дня). Каждый следующий период его необходимо перезапускать. Это следует из специфики алгоритма программы (еще раз взгляните на рис.1).
Советник не совсем корректно торгует.
В правилах указано, что позиция в одну сторону должна только расти дальше во избежание шума, а в тестере стратегий на графике как раз торгует шум. Т.е., небольшой диапазон пунктов в 30 (четырёхзнак) проторговывает от начала и до конца, хотя должен был остановиться на его границах.
Отсутствует постепенное «развёртывание», прошу подкорректировать код.
Как я уже сказал, в данном случае моей целью было лишь поделиться идеей. Для затравки я накидал представленный выше программный код советника. А что касается его доработки, то тут уж, как говорится, все карты Вам в руки.
Иван, прочитайте полкниги «С++ за 21 день» и сможете корректировать код как пожелаете нужным.