Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Узнай, как вставлять видео в редакторе сообщений
Алексей
22
Алексей 2012.10.08 11:38 

Как такое может быть?

Или я где-то в логике накосячил?

Тикеты находятся в массиве, он их берет оттуда.

double profit_buy = 0;
   double profit_sell = 0;
   double lots_buy = 0;
   double lots_sell = 0;
   double equ_lots = 0;
   string comment = "Equity Order";
   int tic = 0;

   
   Print ("Считаем лоты на покупку и на продажу");
   for(int i=0; i<c; i++){                                                         
      if (my_orders_buy[i] > 0){
         if (OrderSelect(my_orders_buy[i], SELECT_BY_TICKET) == true){
            lots_buy += OrderLots();
            profit_buy += OrderProfit() + OrderCommission() + OrderSwap();   //считаем прибыль ордеров на покупку
            Print ("Профит ордеров на покупку ", profit_buy, " количество лотов ", lots_buy);
         }
      }
      if (my_orders_sell[i] > 0){   
         if (OrderSelect(my_orders_sell[i], SELECT_BY_TICKET)){              
            profit_sell += OrderProfit() + OrderCommission() + OrderSwap(); //считаем прибыль ордеров на продажу
            lots_sell += OrderLots();
            Print ("Профит ордеров на продажу ", profit_sell, " количество лотов ", lots_sell);
         }
      } 
   }
   Print ("Закончили считать");
   if (lots_buy > lots_sell){
      Print ("lots_buy > ", lots_buy, lots_sell );
      equ_lots = lots_buy - lots_sell;
      Print ("equ_lots = ", equ_lots);
   }
   if (lots_sell > lots_buy){
      Print ("Lots_sell > ", lots_sell);
      equ_lots = lots_sell - lots_buy;
      Print ("equ_lots = ", equ_lots);
   }
   if (lots_sell == lots_buy){
      Print ("lots_buy = lots_sell");
      equ_lots = 0;
      Print ("equ_lots = ", equ_lots);
   }
   
   Print ("equ_lots = ", equ_lots);
   if(equ_lots > 0){
      Print ("equ_lots > 0");
      if (lots_buy > lots_sell){
         Print ("открываем на покупку");
         tic = Open_One_Order(equ_lots, comment, 1);
      }   
      if (lots_sell > lots_buy){
         Print ("Открываем на продажу");   
         tic = Open_One_Order(equ_lots, comment, 0);
      }

}

Результат:

15:14:50 Headge_3 EURUSD,M15: Считаем лоты на покупку и на продажу

15:14:50 Headge_3 EURUSD,M15: Профит ордеров на покупку -100.56 количество лотов 0.24

15:14:50 Headge_3 EURUSD,M15: Профит ордеров на продажу -32.16 количество лотов 0.24

15:14:50 Headge_3 EURUSD,M15: Профит ордеров на покупку -184.96 количество лотов 0.44

15:14:50 Headge_3 EURUSD,M15: Профит ордеров на продажу -82.32 количество лотов 0.68

15:14:50 Headge_3 EURUSD,M15: Профит ордеров на покупку -104 количество лотов 1.32

15:14:50 Headge_3 EURUSD,M15: Профит ордеров на продажу -158.48 количество лотов 1.32

15:14:50 Headge_3 EURUSD,M15: Профит ордеров на покупку -74.72 количество лотов 1.8

15:14:50 Headge_3 EURUSD,M15: Профит ордеров на продажу -186.8 количество лотов 1.56

15:14:50 Headge_3 EURUSD,M15: Профит ордеров на продажу -206.96 количество лотов 1.8

15:14:50 Headge_3 EURUSD,M15: Закончили считать

15:14:50 Headge_3 EURUSD,M15: lots_buy > 1.8 1.8

15:14:50 Headge_3 EURUSD,M15: equ_lots = 0

15:14:50 Headge_3 EURUSD,M15: equ_lots = 0

15:14:50 Headge_3 EURUSD,M15: equ_lots > 0

15:14:50 Headge_3 EURUSD,M15: открываем на покупку

Почему у него 1.8 больше чем 1.8? Почему equ_lots = 0 и в то же время оно больше 0?

Dmitry Fedoseev
41190
Dmitry Fedoseev 2012.10.08 11:41  
Сравнивать нужно нормализованные double. NormalizeDouble().
Алексей
22
Алексей 2012.10.08 11:44  
Понял, попробую. Спасибо.
Алексей
22
Алексей 2012.10.08 11:51  
Да. заработало. Спасибо еще раз. В жизни никогда не программировал, а теперь освоить пытаюсь.
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий