Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Вся активность участников MQL5.community на одной странице!
Pavel Kuznetsov
292
Pavel Kuznetsov 2015.06.15 07:17 

Хочу у Вас спросить совета.

Я не могу понять. Раньше все мои коды работали нормально, на любом инструменте. Я не прописывал в коде что бы советник работал только по EURUSD, а он в свою очередь не торгует на других инструментах. У меня в коде ни где, не фигурирует обозначение Simbol()="EURUSD". Почему он мне пишет следующее:

2015.06.15 10:00:04.948 2015.01.02 09:00  Tic lite GBPUSD,M1: OrderSend error 4106   (ERR_NO_MEMORY_FOR_PARAMETER_STRING 4106)

2015.06.15 09:44:02.370 2015.01.02 09:00  Tic lite GBPUSD,M1: unknown symbol name EURUSD for OrderSend function/

Что то изменилось после последних обновлений?

Вот код:

 if(buystoporder==0){


      if(buystoporder==0 && buyorder==0 && (BuyOpenOrders2==true)){

      double buyOpenPrise = NormalizeDouble((Ask+(10*Point)),4);

     if(OrderLimit==true || BuyLimit==true){ 

      double blot;

     if(sellorder==0){blot =  dLots;}   

     if(selllots == dLots){blot =  dLots;}   

     if(sellorder==1 && selllots>dLots){blot = selllots;}   

     if(sellorder>1 && selllots > dLots){

       for( i9=OrdersTotal()-1;i9>=0;i9--)

           {

      if (OrderSelect( i9, SELECT_BY_POS,MODE_TRADES)){ 

      if (OrderSymbol() == Symbol() && OrderType()==OP_SELL && OrderTicket()==sellticet && OrderMagicNumber()==MAGIC)

         {blot=OrderLots();}}}}   

   

      buyticket  = OrderSend(OrderSymbol(), OP_BUYSTOP, blot, buyOpenPrise,3,0,0,NULL,MAGIC,0,Blue); 

         }

        

     if(OrderLimit==false && BuyLimit==false && buystoporder==0 && buyorder==0 && sellorder==0){ 

      OrderSend(OrderSymbol(), OP_BUY, dLots, Ask,3,0,0,NULL,MAGIC,0,Blue); 

         }

        

     if(OrderLimit==false && SellLimit==false && buyorder==0 && buystoporder==0 && sellorder>0){ double blot;

     if(selllots == dLots){blot =  dLots;}   

     if(sellorder==1 && selllots>dLots){blot = selllots;}   

     if(sellorder>1 && selllots > dLots){

         for( i9=OrdersTotal()-1;i9>=0;i9--)

      {

      if (OrderSelect( i9, SELECT_BY_POS,MODE_TRADES)){ 

      if (OrderSymbol() == Symbol() && OrderType()==OP_SELL && OrderTicket()==sellticet && OrderMagicNumber()==MAGIC)

         {blot=OrderLots();}}}}   

       buyticket  = OrderSend(OrderSymbol(), OP_BUYSTOP, blot, buyOpenPrise,3,0,0,NULL,MAGIC,0,Blue); 

         }

        }

       }  

Это часть кода на открытие сделок .

 

 

А это часть кода для определения некоторых параметров, средняя стоимость открытых позиций, определение общего количества лотов для конкретного направления и т.д.:

 

    double  buylots,buyprofit,buyPrice,SrednyaCenaBuy;

   pos=OrdersTotal();int buyorder;

    for( i=pos-1;i>=0;i--)

      {

      if (OrderSelect( i, SELECT_BY_POS,MODE_TRADES)){ 

      if (OrderSymbol() == Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==MAGIC)

      {buyorder ++;

      buylots = buylots+OrderLots();

      buyprofit = buyprofit+ OrderProfit();

      buyPrice = buyPrice+(OrderOpenPrice()*(OrderLots()/dLots)); 

if(Symbol()!="EURJPY" || Symbol()!="USDJPY" || Symbol()!="GBPJPY"){

     if(Katirovka<=4){ SrednyaCenaBuy = NormalizeDouble(buyPrice /(buylots/dLots),4);} // определение средней цены для всех ордеров на buy

     if(Katirovka>=5){ SrednyaCenaBuy = NormalizeDouble(buyPrice /(buylots/dLots),5);} // определение средней цены для всех ордеров на buy

                                                                  }

if(Symbol()=="EURJPY" || Symbol()=="USDJPY" || Symbol()=="GBPJPY"){

     if(Katirovka<=4){ SrednyaCenaBuy = NormalizeDouble(buyPrice /(buylots/dLots),2);} // определение средней цены для всех ордеров на buy

     if(Katirovka>=5){ SrednyaCenaBuy = NormalizeDouble(buyPrice /(buylots/dLots),3);} // определение средней цены для всех ордеров на buy

                                                                  }

        }

       } 

      }

       

  double selllots, sellprofit,sellPrice,SrednyaCenaSell;     

  pos=OrdersTotal();int sellorder;

    for( i=pos-1;i>=0;i--)

      {

      if (OrderSelect( i, SELECT_BY_POS,MODE_TRADES)){ 

      if (OrderSymbol() == Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==MAGIC)

       {sellorder ++;

       selllots = selllots+OrderLots();

       sellprofit = sellprofit+OrderProfit();

      sellPrice = sellPrice+(OrderOpenPrice()*(OrderLots()/dLots)); 

if(Symbol()!="EURJPY" || Symbol()!="USDJPY" || Symbol()!="GBPJPY"){

      if(Katirovka<=4){SrednyaCenaSell = NormalizeDouble(sellPrice /(selllots/dLots),4);} // определение средней цены для всех ордеров на sell

      if(Katirovka>=5){SrednyaCenaSell = NormalizeDouble(sellPrice /(selllots/dLots),5);} // определение средней цены для всех ордеров на sell

                                                                  }

if(Symbol()=="EURJPY" || Symbol()=="USDJPY" || Symbol()=="GBPJPY"){

      if(Katirovka<=4){SrednyaCenaSell = NormalizeDouble(sellPrice /(selllots/dLots),2);} // определение средней цены для всех ордеров на sell

      if(Katirovka>=5){SrednyaCenaSell = NormalizeDouble(sellPrice /(selllots/dLots),3);} // определение средней цены для всех ордеров на sell

                                                                  }

         }

        } 

       }

Наверно я что то упускаю, я чуть больше года не занимался программированием, вот решил продолжить и столкнулся с такой вещью. Подскажите пожалуйста, с чем это связанно?
Ihor Herasko
8897
Ihor Herasko 2015.06.15 09:14  
Pavel Kuznetsov:

Подскажите пожалуйста, с чем это связанно?

Связано с неправильной расстановкой скобок "{" и "}".

Если воспользоваться стилизатором, то хорошо видно, что в части кода:

   for(i9=OrdersTotal()-1;i9>=0;i9--)
     {

      if(OrderSelect(i9,SELECT_BY_POS,MODE_TRADES))
        {

         if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderTicket()==sellticet && OrderMagicNumber()==MAGIC)
            blot=OrderLots();
        }
     }
}


buyticket=OrderSend(OrderSymbol(),OP_BUYSTOP,blot,buyOpenPrise,3,0,0,NULL,MAGIC,0,Blue);

}


     if(OrderLimit==false && BuyLimit==false && buystoporder==0 && buyorder==0 && sellorder==0)
{

      OrderSend(OrderSymbol(),OP_BUY,dLots,Ask,3,0,0,NULL,MAGIC,0,Blue);

         }
}

 вызов функции OrderSymbol() находится за телом цикла. Таким образом, выбранным оказывается ордер, расположенный в начале списка рабочих ордеров. Это может быть какой угодно ордер, в том числе и по EURUSD.

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