проблема с выбором позиций с приставкой /m - страница 2

 
i_logic:
Тогда посоветую перебирать позиции в цикле, начиная с PositionsTotal и до нуля. Те, которое не относятся к нужному символу, естественно отбрасывать.
пробовал - именно так изначально и работала функция, это я уже два дня сижу не могу понять почему обычные позиции все ок, а те символы которые с суфиксом -не работают никак. 
 
2014.04.09 21:37:32.634 Exp - The X (UniversalEA + Averager) (EURUSD.m,M1)      Result = 10009 symbol EURUSD.m volume 0.01 action 1 tp 0 sl 0 type 1 price 1.38496   TRADE_RETCODE_DONE Заявка выполнена
2014.04.09 21:37:32.634 Exp - The X (UniversalEA + Averager) (EURUSD.m,M1)      4753
2014.04.09 21:37:32.634 Exp - The X (UniversalEA + Averager) (EURUSD.m,M1)      PositionGetSymbol=
2014.04.09 21:37:32.634 Exp - The X (UniversalEA + Averager) (EURUSD.m,M1)      symToWork2=EURUSD.m

такой ответ получаю если пишу цикл:
for(int i=PositionsTotal();i>=0;i--)
Print("PositionGetSymbol="+PositionGetSymbol(i));
 
т.е. после открытия не обновляется список позиций получается что ли. 
 
А что за брокер, хочу у себя попробовать.
 

Roboforex Demo ECN или PRO

октрывается только к сожалению через личный кабинет

 

если на обычном счете где ент суфикса - то все ок, как и на других брокерах, а вот если с суфиксоми - то все, не выбирает позицию и все. нет ее. символ не найден 

 

PositionsTotal должно стартовать со значения на 1 меньше. 

for(int i=PositionsTotal()-1;i>=0;i--)
 
2014.04.09 21:47:34.981 Exp - The X (UniversalEA + Averager) (GBPCHF.m,M1)      Result = 10009 symbol GBPCHF.m volume 0.01 action 1 tp 0 sl 0 type 0 price 1.477   TRADE_RETCODE_DONE Заявка выполнена
2014.04.09 21:47:34.981 Exp - The X (UniversalEA + Averager) (GBPCHF.m,M1)      4753
2014.04.09 21:47:34.981 Exp - The X (UniversalEA + Averager) (GBPCHF.m,M1)      symToWork2=GBPCHF.m
2014.04.09 21:47:34.981 Exp - The X (UniversalEA + Averager) (GBPCHF.m,M1)      PositionsTotal()=0
2014.04.09 21:47:34.872 Exp - The X (UniversalEA + Averager) (GBPCHF.m,M1)      0
2014.04.09 21:47:34.872 Exp - The X (UniversalEA + Averager) (GBPCHF.m,M1)      1000000.0
все равно после открытия позиции - возвращает число позиций = 0
 

нет после, у меня функция открытия ордера одна

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

 

смотрите даже я явно присвоил значение символа переменной - и он не выбирается пишет ту же ошибку:

void Modify(string symToWork2,int sl2,int tp2)
//+------------------------------------------------------------------+
  {
symToWork2=Symbol();
ResetLastError();
Print("PositionsTotal()="+PositionsTotal());
Print("symToWork2="+symToWork2);
for(int i=PositionsTotal()-1;i>=0;i--)
Print("PositionGetSymbol="+PositionGetSymbol(i));
      if(PositionSelect(symToWork2))
        {
          Print("fffffffffffffffffffffffffffffffffd");
         if((PositionGetString(POSITION_SYMBOL)!=symToWork2)) return;

         order_open_price = PositionGetDouble(POSITION_PRICE_OPEN);
         order_type       = PositionGetInteger(POSITION_TYPE);
         request.order    = PositionGetInteger(POSITION_IDENTIFIER);

         if(order_type==POSITION_TYPE_BUY)
           {

            double sl,tp;

            if(sl2!=0 ) sl=SymbolInfoDouble(symToWork2,SYMBOL_BID)-sl2*SymbolInfoDouble(symToWork2,SYMBOL_POINT); else sl=0;
            if(tp2!=0 ) tp=SymbolInfoDouble(symToWork2,SYMBOL_BID)+tp2*SymbolInfoDouble(symToWork2,SYMBOL_POINT); else tp=0;


            request.action=TRADE_ACTION_SLTP;
            request.symbol= symToWork2;
            if( sl!=PositionGetDouble(POSITION_SL))request.sl     = sl;else request.sl=PositionGetDouble(POSITION_SL);
            if( tp!=PositionGetDouble(POSITION_TP))request.tp     = tp;else request.tp=PositionGetDouble(POSITION_TP);
            request.deviation=(ulong)((SymbolInfoDouble(symToWork2,SYMBOL_ASK)-SymbolInfoDouble(symToWork2,SYMBOL_BID))/SymbolInfoDouble(symToWork2,SYMBOL_POINT))*2; // по спреду 
            if(request.sl==PositionGetDouble(POSITION_SL) && request.tp==PositionGetDouble(POSITION_TP))return;
OrderSend(request,result);

            if(result.retcode==TRADE_RETCODE_DONE)
              {
               if(Sounds)PlaySound("ok.wav"); Print("Result = "+(string)result.retcode+
                  " symbol "+(string)request.symbol+" volume "+(string)request.volume+" action "+(string)request.action+" tp "+(string)request.tp+" sl "
                  +(string)request.sl+" type "+(string)request.type+" price "+(string)request.price+"   "+ErrorDescription(result.retcode));
              }
            else
              {
               if(Sounds)PlaySound("stops.wav");
               Print("ERROR Result = "+(string)result.retcode+
                     " symbol "+(string)request.symbol+" volume "+(string)request.volume+" action "+(string)request.action+" tp "+(string)request.tp+" sl "
                     +(string)request.sl+" type "+(string)request.type+" price "+(string)request.price+"   "+ErrorDescription(result.retcode));
              }

            return;
           }// end POSITION_TYPE_BUY    

         else if(order_type==POSITION_TYPE_SELL)
           {

            double sl,tp;

            if(sl2!=0) sl=SymbolInfoDouble(symToWork2,SYMBOL_ASK)+sl2*SymbolInfoDouble(symToWork2,SYMBOL_POINT); else sl=0;
            if(tp2!=0) tp=SymbolInfoDouble(symToWork2,SYMBOL_ASK)-tp2*SymbolInfoDouble(symToWork2,SYMBOL_POINT); else tp=0;
            request.action = TRADE_ACTION_SLTP;
            request.symbol = symToWork2;
            if(sl!=PositionGetDouble(POSITION_SL))request.sl     = sl;else request.sl=PositionGetDouble(POSITION_SL);
            if(tp!=PositionGetDouble(POSITION_TP))request.tp     = tp;else request.tp=PositionGetDouble(POSITION_TP);
            request.deviation=(ulong)((SymbolInfoDouble(symToWork2,SYMBOL_ASK)-SymbolInfoDouble(symToWork2,SYMBOL_BID))/SymbolInfoDouble(symToWork2,SYMBOL_POINT))*2; // по спреду 
            if(request.sl==PositionGetDouble(POSITION_SL) && request.tp==PositionGetDouble(POSITION_TP))return;

            OrderSend(request,result);
            if(result.retcode==TRADE_RETCODE_DONE)
              {
               if(Sounds)PlaySound("ok.wav"); Print("Result = "+(string)result.retcode+
                  " symbol "+(string)request.symbol+" volume "+(string)request.volume+" action "+(string)request.action+" tp "+(string)request.tp+" sl "
                  +(string)request.sl+" type "+(string)request.type+" price "+(string)request.price+"   "+ErrorDescription(result.retcode));
              }
            else
              {
               if(Sounds)PlaySound("stops.wav");
               Print("Result = "+(string)result.retcode+
                     " symbol "+(string)request.symbol+" volume "+(string)request.volume+" action "+(string)request.action+" tp "+(string)request.tp+" sl "
                     +(string)request.sl+" type "+(string)request.type+" price "+(string)request.price+"   "+ErrorDescription(result.retcode));
              }

           }// end POSITION_TYPE_SELL

        }// end if select                

  Print( GetLastError());
  }
 

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

 

2014.04.09 21:56:28.641 Exp - The X (UniversalEA + Averager) (EURGBP.m,M1)      Result = 10009 symbol EURGBP.m volume 0.01 action 1 tp 0 sl 0 type 1 price 0.82479   TRADE_RETCODE_DONE Заявка выполнена
2014.04.09 21:56:28.641 Exp - The X (UniversalEA + Averager) (EURGBP.m,M1)      4753
2014.04.09 21:56:28.641 Exp - The X (UniversalEA + Averager) (EURGBP.m,M1)      PositionGetSymbol=GBPCHF.m
2014.04.09 21:56:28.641 Exp - The X (UniversalEA + Averager) (EURGBP.m,M1)      symToWork2=EURGBP.m
2014.04.09 21:56:28.641 Exp - The X (UniversalEA + Averager) (EURGBP.m,M1)      PositionsTotal()=1