Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Не нашел нужную программу? Закажи ее!
harbor
117
harbor 2016.03.02 04:47 
   
   oBuy=0; 
   oSell=0;
   sBuy=0; 
   sSell=0;  
   price=0;
   Lim=2;
 

 for(int m=OrdersTotal()-1;m>=0;m--)
   if(OrderSelect(m,SELECT_BY_POS,MODE_TRADES))
    { 
     if(Symbol()==OrderSymbol() && OrderMagicNumber()==Magic)
      {
        if(OrderType()==OP_BUY)  sBuy++; 
        if(OrderType()==OP_SELL) sSell++; 
     
         
      price = OrderOpenPrice();
    
      if(OrderType()==OP_BUYLIMIT)
      {oBuy++;
      if(sBuy==0 || sSell>0) OrderDelete(OrderTicket());}
      
      if(OrderType()==OP_SELLLIMIT) 
      {oSell++;
      if(sSell==0 || sBuy>0) OrderDelete(OrderTicket());}
     }
    }
  
...
проверяю условия на Buy и Sell и выставляю флаги B и S при сигналах
...


   if( S && oSell==0 && sSell==0 && sBuy==0 ) OrderSend(Symbol(),OP_SELL,...);
       
   if(  B && oBuy==0 && sBuy==0 && sSell==0  ) OrderSend(Symbol(),OP_BUY,...);
      
   if(  B && oBuy<Lim && sBuy>0 && sSell==0 )  OrderSend(Symbol(),OP_BUYLIMIT...);
    
   if( S && oSell<Lim && sSell>0  && sBuy==0 )  OrderSend(Symbol(),OP_SELLLIMIT...);

   if (oBuy>=Lim || oSell>=Lim) { B=false; S=False;}   

код в общем-то прост и до недавнего времени работал как надо, то есть:

При сигнале на Buy выставляется булевая переменная B , открывается ордер на покупку, и следом открываются лимитные ордера по цене ниже на определенный шаг и в количестве не более чем Lim.

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

harbor
117
harbor 2016.03.04 09:52  
короче я думаю метаквотсы чего-то напартачили в новом билде и пересчет ордеров стал косячить
o_O
Модератор
23302
o_O 2016.03.04 11:05  
harbor:
короче я думаю метаквотсы чего-то напартачили в новом билде и пересчет ордеров стал косячить
ага)))  а самому свои ошибки конечно же признать не хочется.
harbor
117
harbor 2016.03.05 12:36  
sergeev:
ага)))  а самому свои ошибки конечно же признать не хочется.

а где ошибки? у меня этот советник год работал нормально, и тут вдруг вылезло это

в коде менял по мелочи, условия для лимитников не трогал. Оно не работает! 

o_O
Модератор
23302
o_O 2016.03.05 13:28  
harbor:

а где ошибки?

в вашем коде конечно же
Mislaid
557
Mislaid 2016.03.07 18:10  
harbor:
короче я думаю метаквотсы чего-то напартачили в новом билде и пересчет ордеров стал косячить

Это вы зря. Лимитники в вашей программе ставятся позже рыночных. Ордера перебираем в обратном порядке.

Смотрим первый цикл. Возможно, сначала идут лимитники, а, рыночных еще не было. Ну, и, что должно произойти?

Как исправить?

Правильно: в первом цикле посчитать число ордеров в рынке. Во втором цикле разбираться с лимитниками. И считать их правильно. А то ваша программа возвращает их число до начала цикла. Хотя, наверно, ожидалось, сколько их останется.

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий