Ошибка в мартине

 

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

datetime OrderOpnTime;
double   LotStep=MarketInfo(Symbol(), MODE_LOTSTEP);
double   MinLot=MarketInfo(Symbol(), MODE_MINLOT);
int      History=HistoryTotal(), j, k, Next;
 
for (j=0; j<History; j++) {
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) 
   {
    if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
     {
      if (OrderType()==OP_BUY || OrderType()==OP_SELL)
       {
        if (OrderOpnTime<OrderOpenTime())
         {
          OrderOpnTime=OrderOpenTime();
          Next=j;
        }
      }
    }
  }
}
if (OrderSelect(Next, SELECT_BY_POS, MODE_HISTORY))
 {
  if ( OrderProfit()<0 && OrderType() == OP_BUY  )
    {
     NextOrderLot=2*OrderLots();
     OrderTip = OP_SELL;
     Opn_B=true;
     }
    
     else 
     
        if ( OrderProfit()<0 && OrderType() == OP_SELL  )
          {
           NextOrderLot=2*OrderLots();
           OrderTip = OP_BUY;
           Opn_S=true;
           }
           
       else NextOrderLot=FixLot;

 }
Полный код советника:
Файлы:
2way.mq4  9 kb
 
PAZITIV:

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

Полный код советника:


Обратите внимание:

int      History=HistoryTotal()

наверное должно быть так:

int      History=OrdersHistoryTotal(), 
 
r772ra:


Обратите внимание:

наверное должно быть так:



спасибо, но не помогло. использую функцию Дениса Кима https://www.mql5.com/ru/forum/102225 . вроде бы всё правильно... странно...
 
PAZITIV: использую функцию Дениса Кима
Может, все-таки Давида Кима?
 
PAZITIV:


спасибо, но не помогло. использую функцию Дениса Кима https://www.mql5.com/ru/forum/102225 . вроде бы всё правильно... странно...


Почему Дениса Кима, вроде всегда Игорем был.

Еще:

NextOrderLot=2*OrderLots();
     OrderTip = OP_SELL;
     Opn_B=true;

Вы умножаете ЛОТ для SELL, а разрешаете на установку BIU.

 NextOrderLot=2*OrderLots();
           OrderTip = OP_BUY;
           Opn_S=true;
А здесь наоборот.
 
r772ra:


Почему Дениса Кима, вроде всегда Игорем был.

Еще:

Вы умножаете ЛОТ для SELL, а разрешаете на установку BIU.

А здесь наоборот.


да, Игоря. Да и я проблему не до конца обьяснил. У меня первый ордер в тестере закрывался в профит и советник дальше никаких манипуляций не делал.

сделал так

if (OrderSelect(Next, SELECT_BY_POS, MODE_HISTORY))
 {
  if ( OrderProfit()<0 && OrderType() == OP_BUY  )
    {
     NextOrderLot=2*OrderLots();
     OrderTip = OP_SELL;
     Opn_S=true;
     }
    
     else 
     
        if ( OrderProfit()<0 && OrderType() == OP_SELL  )
          {
           NextOrderLot=2*OrderLots();
           OrderTip = OP_BUY;
           Opn_B=true;
            }
 }


if (OrderSelect(Next, SELECT_BY_POS, MODE_HISTORY))
 {
  if ( OrderProfit() > 0 && OrderType() == OP_BUY  )
    {
     NextOrderLot=FixLot;
     OrderTip = OP_BUY;
     Opn_B=true;
     }
    
     else 
     
        if ( OrderProfit() > 0 && OrderType() == OP_SELL  )
          {
           NextOrderLot=FixLot;
           OrderTip = OP_SELL;
           Opn_S=true;
           }
     }

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

всем спасибо, кто откликнулся !!!!

Причина обращения: