10 марта, 2011

Робот спал, а мы работали

Сергей Ерёмин
RU

Как выяснилось, робот весь месяц не мог совершать торговые операции. Это случилось в результате достаточно банальной ошибки: в настройках терминала было запрещено совершать торговые операции эксперту. А я для чистоты эксперимента даже не заглядывал на сервер и не смотрел, что там происходит. И это сыграло злую шутку.

Однако это не мешает внести некоторые дополнения в код эксперта. На этот раз обратим внимание на риски.

Дополнение №1

Я являюсь сторонником весьма консервативных торговых систем, когда сделки держатся открытыми долгие месяцы, а риски по ним строго контролируются. В случае же с данным роботом, мы имеем совершенно иную картину. Торговый эксперт совершает сделки, которые достаточно быстро закрываются. Риски практически никак не контролируются. Важным и полезным дополнением станет ограничение на суммарный риск, который робот может понести в течение одного месяца.

Иными словами, мы скажем роботу: «Если ты потеряешь в этом месяце X процентов от депозита, то ты плохой мальчик, и мы ставим тебя в угол. До следующего месяца». А со следующего месяца все начнем заново: депозит на начало месяца возьмем за 100% и опять будем следить, чтобы робот не потерял слишком много.

Конечный модуль (функция) имеет следующий код:

//+——————————————————————————————————-+
//|                  Определение факта, что робот достиг уровня допустимой просадки
|
bool is_mn_max_los(double percent_of_max_los) {

double start_depo_mn=0.0, tmp_value=0.0;

int i = 0; //
счётчик для цикла
for (i=OrdersHistoryTotal()-1; i>=0; i—) {

if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;

//если ордер не выбран — переходим к следующему шагу цикла

if(OrderCloseTime()>iTime(NULL,PERIOD_MN1,0))

tmp_value+=OrderProfit()+OrderCommission()+OrderSwap();

}

for (i=OrdersTotal()-1; i>=0; i—) {

if (!OrderSelect(i,SELECT_BY_POS,MODE_OPEN)) continue;

//если ордер не выбран — переходим к следующему шагу цикла

tmp_value+=OrderProfit()+OrderCommission()+OrderSwap();

}

start_depo_mn=AccountEquity()-tmp_value;

GlobalVariableSet(«ForTrader_5min»,iTime(NULL,PERIOD_M5,0));

if((-1)*tmp_value>(start_depo_mn/100)*percent_of_max_los)

return(true); //если мы потеряли больше, чем позволено, — возвращаем true

return(false);

}

//|                  Определение факта, что робот достиг уровня допустимой просадки |

//+——————————————————————————————————-+

Дополнение №2

Поскольку при достижении допустимого уровня просадки решено закрывать все открытые роботом сделки, то потребуется функция, которая это обеспечит. Я возьму готовую функцию из своего набора, которая позволяет закрывать все ордера данного типа с данным магическим номером:

//+——————————————————————————————————-+
//|                                         Операция закрытия сделок
|
bool cbm(int magic, int slipage, int type) {

/*

close by magic (закрытие всех ордеров данного типа с данным MagicNumber)

Учитывается максимально допустимое проскальзывание (slipage)

Используется
функция close_by_ticket.
*/

int n = 0;

for (int i2=OrdersTotal()-1; i2>=0; i2—) {

if (!OrderSelect(i2,SELECT_BY_POS,MODE_TRADES)) break;

if
((OrderType()==type) && (OrderMagicNumber()==magic)) { //если сделка данного типа и ее магический номер подходит
close_by_ticket(OrderTicket(), slipage); //
закрываем сделку
n++; //наращиваем счетчик закрытых сделок (на самом деле — попыток закрытия)

} //end if (((OrderType()==OP_BUY) || (OrderType()==OP_SELL)) && (OrderMagicNumber()==magic))

} //end for (int i2=OrdersTotal()-1; i2>=0; i2—)

if(n>0) //если попыток закрытия было больше 0, то функция возвращает true

return(true);

return(false);

} //end bool cbm(int magic, int slipage, int type)

//|                                         Операция закрытия сделок
|
//+——————————————————————————————————-+

Таким образом, взаимодействие этих функций в роботе будет выглядеть так:

if(is_mn_max_los(Percent_Of_Max_Los)) {
cbm(Magic_Number, Slipage, OP_BUY);

cbm(Magic_Number, Slipage, OP_SELL);

Comment(«Внутри текущего месяца достигнут лимит потерь в «,Percent_Of_Max_Los,»% от депозита на начало месяца!»);

return(0);

}

Код всего торгового робота принял следующий вид: Скачать эксперта

Заключение

К сожалению, статья оказалась меньше, чем я планировал. Виной тому моя ошибка при запуске робота в прошлый раз. Но теперь, когда эксперт, наконец, работает, будет достаточно материала для оценки его эффективности, анализа ошибок (в случае их появления) и модернизации сердца торгового эксперта – алгоритма поиска сигналов. Кроме того, планируется привнести некоторые дополнения в расчет рабочих лотов и слежение за рисками (помимо предпринятых дополнений).

Подпишитесь на нас в VK

Fortrader contentUrl Suite 11, Second Floor, Sound & Vision House, Francis Rachel Str. Victoria Victoria, Mahe, Seychelles +7 10 248 2640568

Ещё из этой категории

Все статьи

Простая разработка скрипта Stop Trade для MetaTrader 4 на языке Mql4

Торговля на финансовых рынках становится всё более популярной, и Алготрейдинг играет в этом процессе значительную роль. В этой статье мы рассмотрим простую разработку скрипта для MetaTrader 4, который закроет все открытые позиции и удалит все отложенные ордера. Скрипт будет написан на популярном языке программирования MQL4, который зарекомендовал себя как простой и надёжный инструмент для разработки […]

4 нюанса тестирования советников в терминале MetaTrader 4, о которых знают не все трейдеры

В условиях современного трейдинга использование в торговле форекс советников уже давно не выглядит какой-то экзотикой. Практически каждый день появляются новые платные и бесплатные торговые роботы, которые впечатляют доходностью и вызывают желание быстренько заработать. Однако ставить эксперта на торговый счет без проверки – сомнительная затея, ведущая к «неожиданным» потерям в потенциале. Поэтому рекомендуем начать работу с […]

Скрипты на Форекс: что это и как установить в MT4

«Переболев» бесплатными форекс-советниками и техническими индикаторами, обещающими прибыль в сотни и тысячи долларов до следующего понедельника, начинающий трейдер обычно возвращается на грешную землю и понимает, что технические инструменты – это всего лишь помощники, делающие торговлю на валютном рынке проще и комфортнее. Мы уже много говорили о них, не затронув только Форекс скрипты, широко используемые трейдерами […]

Классификация Форекс советников

Форекс Советник (робот, EA) – это обыкновенный алгоритм, запрограммированный на основе той торговой системы, которой вы планируете использовать, чтобы совершать сделки на валютном рынке. Можно сказать, что для того, чтобы использовать советник, необходимо знать торговую систему, ставшую для него основой, чтобы знать, на каком рынке его можно применять, когда это делать по времени и за […]

Недавние обучающие статьи

Все статьи

Редакция рекомендует

Все статьи
Loading...