Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Занеси ветку в избранное. Отслеживай изменения еще быстрее!
Europa
984
Europa 2011.03.18 16:01 
Собственно вопрос... каковы могут быть причины. Почему один и тот же алгоритм работает по разному. Журнал смотрел, там тишина... даже ни каких попыток модификации ордера.
Europa
984
Europa 2011.03.18 16:05  

Вот из тестера, произошла частичная фиксация прибыли с переносом стопа в безубыток (как собственно и было задумано)

 

В то время как на реале эксперт все еще держит позицию, при этом условие фиксации есть и сейчас (давно уже есть)

 

Europa
984
Europa 2011.03.18 16:28  

Вот условие фиксации 2/3 позиции

 if (OrderType()==OP_BUY && Orders_Total==1 &&
             (BID-OpenPrice)>(OpenPrice-StopLoss) && OrderLot==Lot*3)
            {
             res = OrderClose (Ticket, OrderLot*2/3, BID, 20, 0);
             if (res)
               {
                Alert ("Фиксация прибыли по ",Symb);
                Modify_0 = true;
               }         
            }

 Почему этот алгоритм работает в тестере (1 скрин) и не работает в реале (2 скрин)?

PapaYozh
3768
PapaYozh 2011.03.18 16:56  
Europa:

Вот условие фиксации 2/3 позиции

Почему этот алгоритм работает в тестере (1 скрин) и не работает в реале (2 скрин)?


Избегайте использования сравнения на равенство для переменных с типом double.
Виталий
340
Виталий 2011.03.18 17:00  
Где вы задаёте Orders_Total? Когда вы задаёте BID? Почему не округляете OrderLot*2/3? Почему вы не посмотрите лог?
Europa
984
Europa 2011.03.18 17:18  
vitali_yv:
Где вы задаёте Orders_Total? Когда вы задаёте BID? Почему не округляете OrderLot*2/3? Почему вы не посмотрите лог?


Считаю только ордера "своего" символа

 for(i=OrdersTotal();i>=0;i--)   
      {  
       if (OrderSelect(i,SELECT_BY_POS)==true)  
         { 
          if (OrderSymbol() != Symbol()) continue;                                       
          else Orders_Total = Orders_Total+1;
         } 
      }            

 

double BID = MarketInfo(Symbol(),MODE_BID);

Про ордер лот знаю что лот 0,3 отсюда 0,3*2/3 = 0,2

в логах ничего 

Да и еще уж чтоб вопросов не было

OpenPrice = OrderOpenPrice();
          Ticket = OrderTicket();
          OrderLot = OrderLots();
          StopLoss = OrderStopLoss();
          TakeProfit = OrderTakeProfit();
          Symb = OrderSymbol();
Europa
984
Europa 2011.03.18 17:19  
PapaYozh:

Избегайте использования сравнения на равенство для переменных с типом double.


А как быть? Например?
Viktor Vasilyuk
499
Viktor Vasilyuk 2011.03.18 17:58  

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

Например этот нормализует и приведет в порядок цену для четырехзнака и пятизнака:

NormalizeDouble(Bid, Digits);
Роман
7939
Роман 2011.03.18 18:00  
Europa:


А как быть? Например?

делать их разность и сравнивать с нулем, т.е. если, например, разность значений двух переменных больше нуля, то, соответственно, значение первой переменной больше второй .
Виталий
340
Виталий 2011.03.18 18:09  
Europa:


в логах ничего

Значит сделайте, чтоб было.
Bicus
2395
Bicus 2011.03.18 21:07  
Europa:

Вот условие фиксации 2/3 позиции

res = OrderClose (Ticket, OrderLot*2/3, BID, 20, 0);              

В этой строке мне не нравится "OrderLot*2/3". Перепишите её хотя бы как "NormalizeDouble (OrderLot*2/3, 2)".

А чтобы понять, заходит советник в условие или нет, можно воткнуть контрольный Print или Alert. 

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