Необходим простой код для советника (модифицировать два открытых ордера) - страница 4

 

Это из моего ответа пару постов назад... это самый простой способ...

"Я устанавливаю два отложенных ордера на определенное время, а именно 23:00 GMT+2, я думаю. Один из отложенных ордеров является стопом на продажу, а другой стопом на покупку, оба ордера находятся на одинаковом расстоянии от открытия свечи 23:00, в данном случае 14 пунктов.Оба имеют TakeProfit в 28 пунктов (в данном случае) и StopLoss в 55 пунктов."

Вы можете вычислить, где был первоначальный TP, сославшись на свечу 23:00, проверьте ордер и посмотрите, установлен ли он все еще на первоначальный TP, если да, то его можно модифицировать... если нет, то он уже был модифицирован, поэтому не модифицируйте его снова.

 

Попробуйте это... ... он компилируется, но я еще не пробовал его в тестере стратегий... ...

Файлы:
madmax.mq4  10 kb
 
RaptorUK:

Попробуйте это... ...он компилируется, но я еще не пробовал его в тестере стратегий... ...

По какой-то причине я получаю 'OrderSend error 130', хотя SL и TP кажутся правильными, а 'OrderSend'ы расположены так же, как и в предыдущем коде. Почему это происходит?

Я взял эту часть кода

   int CountOpenOrders = 0;
   double Candle23Open; 
   int Spread = MarketInfo(Symbol(), MODE_SPREAD);
   
   Candle23Open = Open[ iBarShift(NULL, 0, StrToTime("23:00") ) ]; // price value of the Open of the 23:00 hour candle
   
   for(int iPos = OrdersTotal()-1; iPos >= 0 ; iPos--)
      {
      if(OrderSelect(iPos,SELECT_BY_POS) && 
         OrderMagicNumber() == MagicNumber &&
         OrderSymbol() == Symbol() &&
         OrderType() < 2               //  less than 2 is either OP_BUY (0) or OP_SELL (1) 
         )
      CountOpenOrders++;
      } // end of for(int iPos  

   if(CountOpenOrders == 2)  //  we have 2 open orders,  should we modify or have the already been modified ?
      {
      for(iPos = OrdersTotal()-1; iPos >= 0 ; iPos--)
         {
         if(OrderSelect(iPos,SELECT_BY_POS) && 
            OrderMagicNumber() == MagicNumber &&
            OrderSymbol() == Symbol() 
            )
            {
            if(OrderType() == 1)               //  OP_SELL (1)  
               {
               if(OrderTakeProfit() > Candle23Open - ((TakeProfitModified - 1) * Point) + Spread )      //  check if TakeProfit has already been modified
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Candle23Open - (TakeProfitModified * Point) + Spread, 0, Blue))
                     {
                     Print("Error modifying order : ",GetLastError());
                     return(0);
                     }
               }
            
            if(OrderType() == 0)               //  OP_BUY (0)
               {
               if(OrderTakeProfit() < Candle23Open + ((TakeProfitModified - 1) * Point) )      //  check if TakeProfit has already been modified
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Candle23Open + (TakeProfitModified * Point), 0, Blue))
                     {
                     Print("Error modifying order : ",GetLastError());
                     return(0);
                     }
                  
               }
                  
            }         
         }
      }
   
        
   } 

и поместил его в предыдущий советник (оригинальный), и он открывает ордера, но не изменяет их. Хотя я думаю, что если ошибка OrderSend будет исправлена в советнике, который вы предоставили, то это может сработать.

О, и в этой части,

if(!OrderModify

Для чего это нужно?

Спасибо большое,

madmax3

 
madmax3:


И в этой части,

Для чего это нужно?

Спасибо большое,

madmax3

Вы проверили документацию для OrderModify()? Что она возвращает?
 
madmax3:

По какой-то причине я получаю 'OrderSend error 130', хотя SL и TP кажутся правильными, а 'OrderSend'ы расположены так же, как и предыдущий код. Почему это происходит?

Настроили ли вы TP и SL для учета 5-значного брокера? Является ли ваш брокер 5-значным брокером?
 

Я заставил его работать, просто пропустил заполнение переменной (расстояние от ask и bid). В документации по OrderModify не объясняется, что это такое! Я полагаю.
Код, похоже, работает хорошо, одна проблема заключается в том, что он изменяет только сделки на покупку, когда две сделки открыты, а не обе сделки на покупку и продажу, я не уверен, почему он это делает. Есть идеи, почему?

Спасибо,

madmax3

 
madmax3:

Я заставил его работать, просто пропустил заполнение переменной (расстояние от ask и bid). В документации по OrderModify не объясняется ! Я верю.
Код, похоже, работает хорошо, но одна проблема заключается в том, что он изменяет только сделки на покупку, когда открыты две сделки, а не обе сделки на покупку и продажу, я не уверен, почему он так делает.

Спасибо,

madmax3

OrderModify возвращает bool ... поэтому ! по отношению к bool это НЕ ... поэтому !OrderModify() означает . . если OrderModify возвращает false, т.е. не работает.

Я еще раз посмотрю на ваш код. ... или мой мод к нему.

 
madmax3:

Я заставил его работать, просто пропустил заполнение переменной (расстояние от ask и bid). В документации OrderModify не объясняется, что такое ! Я верю.
Код, похоже, работает хорошо, но есть одна проблема - он модифицирует только сделки на покупку, когда открыты две сделки, а не обе сделки на покупку и продажу, я не уверен, почему он так делает. Есть идеи, почему?

Спасибо,

madmax3


Вы хотите, чтобы он изменял StopLoss для сделок на покупку и продажу с одним и тем же пунктом?

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

Также не модифицируйте сделки с каждой новой точкой в правильном направлении, выберите трейлингстеп, чтобы позволить модификацию (xx Points можно выбрать 10 или больше, чтобы избежать большого количества ошибок tradecontext too busy).

"!" - это что-то вроде "нет" в кодировке.

 
madmax3:

Код, похоже, работает хорошо, но одна проблема заключается в том, что он изменяет только сделки на покупку, когда открыты две сделки, а не обе сделки на покупку и продажу, я не уверен, почему он так делает. Есть идеи, почему?

Проверьте журналы на наличие ошибок ... если вы работаете в тестере стратегий, проверьте вкладку журнала, если в реальном или демонстрационном режиме, проверьте вкладку экспертов. Дайте мне знать, что вы найдете...
 
RaptorUK:
Проверьте журналы на наличие ошибок ... если вы работаете в тестере стратегий, проверьте вкладку журнала, если в Live или Demo, проверьте вкладку экспертов. Дайте мне знать, что вы нашли...
2012.04.09 21:21:27 2012.01.17 00:59 Тестер: ордер #1, sell 0.01 EURUSD открыт на 1.26498
2012.04.09 21:21:27 2012.01.17 02:21 Тестер: ордер #2, buy 0.01 EURUSD открыт по 1.26795

2012.04.09 21:21:27 2012.01.17 02:21 MadMax EURUSD,H1: modify #2 buy 0.01 EURUSD at 1.26795 sl: 1.26218 tp: 1.27352 ok
2012.04.09 21:21:27 2012.01.17 03:00 MadMax EURUSD,H1: modify #2 buy 0.01 EURUSD at 1.26795 sl: 1.26218 tp: 1.27480 ok

По какой-то причине он модифицирует сделку на покупку дважды (вторая модификация идет к требуемому TP, однако на некоторых сделках он, кажется, продолжает модифицировать в определенные целые времена, такие как 9:00 или 10:00), нет никаких фактических ошибок как таковых.


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