10 марта, 2011Обновлено 14 марта, 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

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

Все статьи

Разбор торговой стратегии «Орел и решка» — исходный код MQL5

Стратегия торговли «Орел и Решка» является одной из популярных торговых методик среди трейдеров российского рынка. Название отражает суть подхода: выбор направления сделки осуществляется случайным образом, аналогично подбрасыванию монеты («орел» или «решка»). Несмотря на простоту концепции, стратегия привлекает внимание начинающих трейдеров своей доступностью и интуитивностью. Содержание Суть торговой стратегии Преимущества и недостатки стратегии Программный код советника […]

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

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

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

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

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

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

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

Все статьи

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

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