Авторизация  
zaharik

Манименеджмент в торговом роботе

Рекомендуемые сообщения

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

 

double OpenLot=0;
double Free =AccountFreeMargin();
double LotVal =MarketInfo(Symbol(),MODE_TICKVALUE);//стоимость 1 пункта для 1 лота
double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Lot =MathFloor((Free*MaxRisk/100)/(StopLoss*LotVal)/Step)*Step;

if (Lot<Min_Lot)
{
OpenLot=Min_Lot;
}

else
{
OpenLot=Lot;
}

if (Lot>Max_Lot )
{
OpenLot=Max_Lot ;
}

else
{
OpenLot=Lot;
}

 

Давайте разберем код по строчкам. Первая строка double Free =AccountFreeMargin();, задаем переменную Free и присваиваем ей значение свободной маржи. То есть деньги, которые у трейдера на депозите и не задействованы в сделках. Следующая строка double LotVal =MarketInfo(Symbol(),MODE_TICKVALUE);/, задаем переменную LotVal и присваиваем ей значение стоимости одного пункта, на данной паре, на которой будет открыт ваш торговый робот.

 

double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT); Определяем минимальный лот, который можно открыть на данной парне и задаем его переменной.

 

double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT); Тоже самое, только максимальный лот.

 

double Step =MarketInfo(Symbol(),MODE_LOTSTEP); Задаем переменную Step и задаем ей значение шаг, с которым терминал позволяет изменять торговый лот.

 

double Lot =MathFloor((Free*MaxRisk/100)/(StopLoss*LotVal)/Step)*Step; Задаем переменную Lot и присваиваем ей значение размера лота, которым и будет открываться сделка. Переменная MaxRisk хранит значение риска на одну сделку, в процентах, и должна быть задана в программе заранее. Обычно, задается в настройках советника.

 

if (Lot<Min_Lot)
{
OpenLot=Min_Lot;
}

else
{
OpenLot=Lot;
}

                             Если полученное значение меньше чем минимально допустимый лот, в терминале, то функция вернет минимальный лот, если нет, то полученное значение.

 

if (Lot>Max_Lot )
{
OpenLot=Max_Lot ;
}

else
{
OpenLot=Lot;
}

Если полученное значение больше, чем максимально допустимый лот, то функция вернет максимальный лот.

 

Вот и все. такая простенькая функция, которую можно использовать в любом советнике или скрипте. Всем удачи.

 

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост требует одобрения модератора, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Авторизация