Покажите как добавить стоплосс, тейкпрофит, и лот в этот советник? - страница 2

 

теперь разберёмся с размерами лота.

у вас есть строка

 Lots = NormalizeDouble(Lot,1);
Она просто нормализует передаваемый ей лот.

Но вы хотите, чтоб был процент от баланса.

Для этого, перед вызовом Deal() делайте так:


 double Risk=0.1; // 10% от депо
 double Vol = NormalizeDouble(AccountBalance()*Risk,1);
 Deal(..., Vol);
 
sergeev >>:

Вот. отлично!

только небольшая ошибка в стопах. Для селл надо все относительно Ask, а для Бай всё относительно Бид.

Спасибо, буду знать)

Теперь попробую разобраться с лотами.

 
sergeev >>:

теперь разберёмся с размерами лота.

у вас есть строка

Она просто нормализует передаваемый ей лот.

Но вы хотите, чтоб был процент от баланса.

Для этого, перед вызовом Deal() делайте так:




Это в старте, когда делаю вызов Deal()?

int start()
{
 int action =0;
 double Vol = NormalizeDouble(AccountBalance()*Risk,1);
 int magik = 0;     
 while(Trade)
 {
    Sleep(time_for_action*1000);      
    RefreshRates();
    /*Логика эксперта, в которой вычисляем наше действие, 
    размер позиции
    и magik для закрытия ордера
    action 1-buy, 2-sell, 3-close
    для примера возьмом эксперта на Macd*/
    GetAction(action, lot, magik);
    if(ServerWork())
      {
      if(((action == 1) || (action == 2)) && (!NoOpen))
        {                                        
        if(TradeIsBusy() < 0) 
           return(-1); 
           Deal(action, Vol);
           Sleep(TimeForSleep*1000);                                
           TradeIsNotBusy();
        }
       if(action == 3)
         {
         if(TradeIsBusy() < 0) 
            return(-1); 
            if(!CloseOrder(magik))
              {
              Print("ТРЕБУЕТСЯ РУЧНОЕ ЗАКРЫТИЕ СДЕЛКИ");
              Sleep(TimeForSleep*1000);   
              TradeIsNotBusy();
              } 
        }
      }
      else
         {
         Print("Выходные");
         if(TradeIsBusy() < 0) 
         return(-1); 
         Sleep(1000*3600*48);
         TradeIsNotBusy();
         }
  action = 0;
  Vol = 0;
  magik = 0;
  }
Print("Возникла серьезная ошибка и эксперт остановил свою работу");  
return(0);
}
 

лучше вставить расчет Vol перед самым вызовом Deal. хотя конечно смотря какие лоты (по отношению друг к другу) вам надо выставлять.


Но если так разобраться - вы выбрали не самый простой пример для освоения MQL.

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

 
sergeev >>:

лучше вставить расчет Vol перед самым вызовом Deal. хотя конечно смотря какие лоты (по отношению друг к другу) вам надо выставлять.


Но если так разобраться - вы выбрали не самый простой пример для освоения MQL.

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



Да я знаю что можно проще, спасибо вам за помощь, дальше думаю сам разобраться с лотом, думаю для меня будет это полезно понять все самому, так я быстрее научусь понимать язык.

 

Вроде все сделал ошибок при компиляции нет, сможете проверить все ли я правильно сделал с лотами?

Код слишком большой через SRC не влазиет.

Файлы:
mevkasl1.0.mq4  16 kb
Причина обращения: