Скачать MetaTrader 5

скрипт закрытие по символу... помогите исправить

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Продавай время процессора и заработай!
Михаил
1025
Михаил 2011.01.04 23:01 
   //=================================================================
   // подсчитываем прибыль по символу 
   double total_profit=0;
   double paper_money_symbol=0; 
   double profit;  
   for (i=1; i<=OrdersTotal(); i++)                    //Цикл по всем ордерам,..     
      {                                                  //отражённым в терминале      
      if(OrderSelect(i-1,SELECT_BY_POS)==true)           //Если есть следующий        
         {                                               // Здесь должен выполняться анализ характеристик ордеров   
         //--------------------
         if(OrderSymbol()==Symbol())
            {
            profit=OrderProfit()+OrderCommission()+OrderSwap();
            total_profit=profit+total_profit;
            }
         //--------------------
         }     
      }
   paper_money_symbol=NormalizeDouble(total_profit,2);
   Comment("paper_money_symbol = "+DoubleToStr(paper_money_symbol,2));
   //----
   //закрываем позиции по символу
   if(Expected_Profit<paper_money_symbol)
      {
      for (i=1; i<=OrdersTotal(); i++)                    //Цикл по всем ордерам,..     
         {                                                  //отражённым в терминале      
         if(OrderSelect(i-1,SELECT_BY_POS)==true)           //Если есть следующий        
            {                                               // Здесь должен выполняться анализ характеристик ордеров   
            //--------------------
            order_type=OrderType();
            order_magic=OrderMagicNumber();
            order_symbol = OrderSymbol();
            if(order_type==OP_BUYSTOP && order_magic==magic && order_symbol==Symbol())             // выбран ордер buy stop
               {
               OrderDelete(OrderTicket());
               }
            if(order_type==OP_SELLSTOP && order_magic==magic && order_symbol==Symbol())             // выбран ордер sell stop
               {
               OrderDelete(OrderTicket());
               }
            if(order_type==OP_BUYLIMIT && order_magic==magic && order_symbol==Symbol())             // выбран ордер buy stop
               {
               OrderDelete(OrderTicket());
               }
            if(order_type==OP_SELLLIMIT && order_magic==magic && order_symbol==Symbol())             // выбран ордер sell stop
               {
               OrderDelete(OrderTicket());
               }
            if(order_type==OP_BUY && order_magic==magic && order_symbol==Symbol())             // выбран ордер buy 
               {
               OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
               }
            if(order_type==OP_SELL && order_magic==magic && order_symbol==Symbol())             // выбран ордер sell 
               {
               OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,CLR_NONE);
               }
            //--------------------
            }     
         }
      }
   
   //=================================================================
остаются не закрытыми отложенные ордера иногда. что в коде не правильно? подскажите пожалуйста...
PapaYozh
3768
PapaYozh 2011.01.04 23:24  
dmmikl86:
остаются не закрытыми отложенные ордера иногда. что в коде не правильно? подскажите пожалуйста...
      for (i=OrdersTotal()-1; i>=0; i--)                    //Цикл по всем ордерам,..     
Михаил
1025
Михаил 2011.01.04 23:35  
PapaYozh:


изменил как вы предложили. прогнал в тестере, один отложеник остался...

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

Andrey F. Zelinsky
31388
Andrey F. Zelinsky 2011.01.04 23:38  
dmmikl86:


изменил как вы предложили. прогнал в тестере, один отложеник остался...

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


причина здесь

if(OrderSelect(i-1,SELECT_BY_POS)==true)
вы выбираете всегда следующий (странная логика)
Михаил
1025
Михаил 2011.01.04 23:42  
abolk:


причина здесь

вы выбираете всегда следующий (странная логика)


логика взята https://book.mql4.com/ru/trading/orderclose

з.ы. исправил.... и все работает.. спасибо.... а я половину дня колупался не мог найти...

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