Проблемы с проверкой открытой торговли - страница 7

 
dazamate:
Да, просто перечитал ваш комментарий еще раз, и то, что я сделал, неправильно,
не даст мне время открытия бара, нужно ли мне использовать Time[0]?


Да, или...

tradeopened = TimeHour(TimeCurrent());
 
OrderDelete(OrderTicket( ) );  

Это исправил Раптор.


---------> http://clip2net.com/s/14aYs

 
dazamate:

Это исправил Раптор.


---------> http://clip2net.com/s/14aYs

Лол, рад быть полезным. . . :-)
 

Приятель, ты мне очень помог, я наконец-то привел ea в состояние, в котором я могу начать настраивать стратегию. Большое спасибо, но я сомневаюсь, что вы слышали обо мне в последний раз, жаль говорить, хаха.


Также большое спасибо WHRoeder
 

Итак... вы думали, что все кончено lol


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


// Trailing Stop Code 

   if(Tradeopen()==true && emastoptrail==TRUE)                                  // Trades are open and Trailing stop feature is turned on
    {
      for(int tnumber2 = OrdersTotal()-1; tnumber2 >= 0 ; tnumber2--)                   //scan through open orders
       {
        if (OrderSelect(tnumber2, SELECT_BY_POS) && 
            OrderMagicNumber()==Mnumber3)                                                // The orders magic number is the same as the magic number used the profit trade
            {                                          
          
            if(OrderType()==OP_BUY && (iMA(Symbol(), 60, ematrailperiod, 0, 1, 0, 1) > OrderStopLoss() ))       // The stop loss is less than the moving average value
          
               {
                OrderModify(OrderTicket(),OrderOpenPrice(),iMA(Symbol(), 60, ematrailperiod, 0, 1, 0, 1),OrderTakeProfit(),0);  // Modify Stop to MA value
               }
            
            if(OrderType()==OP_SELL && (iMA(Symbol(), 60, ematrailperiod, 0, 1, 0, 1) < OrderStopLoss() ))       // The stop loss is more than the moving average value
          
               {
                OrderModify(OrderTicket(),OrderOpenPrice(),iMA(Symbol(), 60, ematrailperiod, 0, 1, 0, 1),OrderTakeProfit(),0);   // Modify Stop to MA value
               }
            }
       }
     }
 

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


// DELETE PENDING ORDERS THAT HAVE NOT BEEN TRIGGERED WITHIN ' int = pendinglimit'

   if((iBarShift(Symbol(),60 ,tradeopened)>pendinglimit) && Tradeopen()==true)              // Check to see if pending orders have expired
     {
        for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--)                  //scan through open orders
        {
          if (OrderSelect(tnumber, SELECT_BY_POS) &&   
             ((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) &&               // The order selected is either a pending buy on stop order or a buy on sell order
             ((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3)))       // The orders magic number is the same as the magic number used in this ea
          
               {
                OrderDelete(OrderTicket( ) );                                            // Delete it
               }
        }
       
     }

После открытия каждой сделки я также запускаю это...

tradeopened = TimeHour(TimeCurrent());

Я комментирую ...

(iBarShift(Symbol(),60 ,tradeopened)

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

tradeopened = TimeHour(TimeCurrent());


Это делает проверку на удаление отложенных ордеров всегда истинной, и если сделка не срабатывает в течение следующего бара, отложенный ордер сразу удаляется -__-.

Ааааа HELP lol

 

Я думаю, что я, возможно, исправил это ....

Я изменил его так, что еще одной проверкой для удаления сделки было смещение времени назад на максимально допустимое время открытия отложенного ордера и посмотреть, совпадает ли оно со временем открытия сделки :)

  for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--)                  //scan through open orders
        {
          if (OrderSelect(tnumber, SELECT_BY_POS) &&   
             ((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) &&               // The order selected is either a pending buy on stop order or a buy on sell order
             ((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3)) &&       // The orders magic number is the same as the magic number used in this ea
              (iTime(   Symbol(), 60, pendinglimit) == tradeopened))
               {
                OrderDelete( OrderTicket() );                                            // Delete it
               }
        }
 
dazamate:

Я думаю, что, возможно, я исправил это ....

Я изменил его так, что еще одна проверка для удаления сделки заключалась в том, чтобы сдвинуть время назад на максимально допустимое время открытия отложенного ордера и посмотреть, совпадает ли оно со временем открытия сделки :)

У вас почти получилось что-то похожее на то, что я себе представлял....

Есть проблема с использованием вашей переменной tradeopened ... если есть открытые сделки и советник выключается, вы теряете информацию в этой переменной ... почему бы не заменить ее на OrderOpenTime( ) и сделать что-то вроде этого ....

for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--)                  //scan through open orders
        {
          if (OrderSelect(tnumber, SELECT_BY_POS) &&   
             ((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) &&               // The order selected is either a pending buy on stop order or a buy on sell order
             ((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3)) &&       // The orders magic number is the same as the magic number used in this ea

              (iBarShift(OrderSymbol(),PERIOD_H1 ,OrderOpenTime()) - pendinglimit) <= 0));    //  <----------- this . . .

               {
                OrderDelete( OrderTicket() );                                            // Delete it
               }
        }
 
Единственная проблема в том, что до этого я использовал ibarshift fucntion, и по какой-то причине он выводил 1000+.
 

Также raptor мне нужно снова поковырять ваш мозг.... :)


Есть ли способ превратить значение скользящей средней в градусы? Я просто гуглю сейчас, чтобы посмотреть, смогу ли я найти какой-нибудь математический форум. Так было бы легче определять боковые рынки и четкие тренды вверх и вниз.

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