Прошу помощи у профов нужен участок кода - страница 3

 

т.е. надо убрать знак "=" ? 

А если безубыток будет равен к цене открытия? то как тут?

 
Alexander Ivanov:

т.е. надо убрать знак "=" ? 

А если безубыток будет равен к цене открытия? то как тут?


Надо просто лишнего кода не писать:

 if (OrdersTotal()>=1)

Это к чему?

 
Evgeny Belyaev:


Надо просто лишнего кода не писать:

 if (OrdersTotal()>=1)

Это к чему?


это вроде да лишнее)
 
 A=0;
 
    for (int k=0; k<OrdersTotal(); k++) {
    if (OrderSelect(k, SELECT_BY_POS, MODE_TRADES)) {
      if (  OrderSymbol()==Symbol()) {
        A=A+1;
     }
    }    
  }

 B=0;
 S=0;

  for (int i=0; i<OrdersTotal(); i++) {
   if (OrderSymbol()==Symbol()) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderType() == OP_BUY && OrderStopLoss()>=OrderOpenPrice() && OrderMagicNumber()==Magic) B=B+1 ;
      if (OrderType() == OP_SELL && OrderStopLoss()<=OrderOpenPrice() && OrderMagicNumber()==Magic) S=S+1 ;
    }    
   }
  }
  if ((S+B)==A) то разрешаем открыть сделку ;
 
Alexander Ivanov:
 A=0;
 
    for (int k=0; k<OrdersTotal(); k++) {
    if (OrderSelect(k, SELECT_BY_POS, MODE_TRADES)) {
      if (  OrderSymbol()==Symbol()) {
        A=A+1;
     }
    }    
  }

 B=0;
 S=0;

  for (int i=0; i<OrdersTotal(); i++) {
   if (OrderSymbol()==Symbol()) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderType() == OP_BUY && OrderStopLoss()>=OrderOpenPrice() && OrderMagicNumber()==Magic) B=B+1 ;
      if (OrderType() == OP_SELL && OrderStopLoss()<=OrderOpenPrice() && OrderMagicNumber()==Magic) S=S+1 ;
    }    
   }
  }
  if ((S+B)==A) то разрешаем открыть сделку ;

Первый цикл тоже не нужен. Все в одном цикле считаеться.
 
Evgeny Belyaev:

Первый цикл тоже не нужен. Все в одном цикле считаеться.


можно да. По идее. 

А можно так и оставить. Алгоритм работает. ))

 
Alexander Ivanov:


можно да. По идее. 

А можно так и оставить. Алгоритм работает. ))


40 % кода не нужное, да и проблема с стоп лоссом не решена. 

За бейсик вам 2.

 
Alexander Ivanov:


можно да. По идее. 

А можно так и оставить. Алгоритм работает. ))

Спасибо буду пробовать вписать и отладить как управлюсь отпишусь
 
Evgeny Belyaev:


40 % кода не нужное, да и проблема с стоп лоссом не решена. 

За бейсик вам 2.

)))
Будем учится. 
 
Vitaliy29:
В моём роботе при определённых условиях после открытия ордера он переводится в безубыток, нужен участок кода который будет перебирать все открытые ордера установленные этим роботом проверяя переведены ли они в безубыток и если хотябы один не переведен то запрет на открытие следующего ордера если все в безубытке то добро на открытие следующего ордера.
Вот так должно работать :)
bool IsAllLossProtected() { //Если все в безубытке, возвращаем true
    for (int i=0; i<OrdersTotal(); i++) {                   //Перебираем все открытые ордера
        if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ||  //Если ордер отсутствует (уже закрылся), то пропускаем
            OrderSymbol() != Symbol() ||                    //Если символ не наш, то пропускаем
            OrderMagicNumber() != Magic ||                  //Если мэджик не наш (Magic вынести в параметры), то пропускаем
            OrderType() > OP_SELL) continue;                //Если это отложка, то пропускаем
        double sign = (OrderType() == OP_BUY)? 1: -1;       //Устанавливаем знак операции -> +1 для покупок, -1 для продаж
        if (OrderStopLoss() == 0 ||                         //Если стоплосс не установлен, то мы не в безубытке, выходим и возвращаем false
            sign*(OrderOpenPrice() - OrderStopLoss()) > 0)  //Если стоплосс не в зоне безубытка, выходим и возвращаем false
                return false; 
    }
    return true;
}