[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 334

 
void start()
  {
  double tickvalue = MarketInfo(Symbol(), MODE_TICKVALUE);
  double profitbuy, profitsell;
  
  for(int i = OrdersTotal()-1; i >= 0;i--)
    {
    if(!OrderSelect(i,SELECT_BY_POS)) continue;
    if(OrderSymbol()!=Symbol() || OrderType() >= 2) continue;
    if(OrderType() == 0)
      profitbuy +=((Bid - OrderOpenPrice())/Point*tickvalue*OrderLots())+OrderCommission()+OrderSwap();
    if(OrderType() == 1)
      profitsell+=((OrderOpenPrice() - Ask)/Point*tickvalue*OrderLots())+OrderCommission()+OrderSwap();
    }
  
  Comment(profitbuy+profitsell);
  }
В чем прикол, не могу правильно рассчитать суммарный профит для всех ордеров по одной паре, в терминале пишет одно, а у меня получается другое?

Итак, мои домыслы, своп в терминале нужно нормализовать обязательно, там точность больше двух бывает - это проверил, но как нормализовать - для каждого ордера или суммарно? Непонятно в общем...
Я уже всяко перепробовал, минимальная разница доходила до 0.02 центов, но это все равно не то, что нужно.

Вопрос, как мне мой код подогнать под работу функции - AccountProfit()?

 
 
Roger:
Тут глянь https://www.mql5.com/ru/code/10653
А понял на что Вы намекаете, я неправильно считаю? Объясню: у меня сделки открыты только по одной паре, на этой паре я запускаю данный скрипт, а он выводит результат отличающийся от результата - возвращаемого функцией аккаун-профит. Решение предложенное Вами - меня не устраивает, так как вместо аsk и bid я засуну новые данные, так понятно?
 
fore-x:
А понял на что Вы намекаете, я неправильно считаю?

Нет, я имел ввиду

Вопрос, как мне мой код подогнать под работу функции - AccountProfit()?

Там, вроде, доступно об этом расписано.

И попробуй нормализовать выражение (OrderOpenPrice() - Ask)/Point до целого

 
Roger:

Нет, я имел ввиду

Там, вроде, доступно об этом расписано.

И попробуй нормализовать выражение (OrderOpenPrice() - Ask)/Point до целого

void start()
  {
  double tickvalue = MarketInfo(Symbol(), MODE_TICKVALUE);
  double profitbuy, profitsell;
  
  for(int i = OrdersTotal()-1; i >= 0;i--)
    {
    if(!OrderSelect(i,SELECT_BY_POS)) continue;
    if(OrderSymbol()!=Symbol() || OrderType() >= 2) continue;
    if(OrderType() == 0)
      Alert(
            OrderTicket(),"   ",
            NormalizeDouble(OrderCommission()+OrderSwap(),2),"   ",
            NormalizeDouble(NormalizeDouble((Bid - OrderOpenPrice())/Point,0)*tickvalue*NormalizeDouble(OrderLots(),2),2)
           );
           
    if(OrderType() == 1)
      Alert(
            OrderTicket(),"   ",
            NormalizeDouble(OrderCommission()+OrderSwap(),2),"   ",
            NormalizeDouble(NormalizeDouble((OrderOpenPrice() - Ask)/Point,0)*tickvalue*NormalizeDouble(OrderLots(),2),2)
           );
    }
  }

Не получается, но хоть со спредом вопрос отпал!
 
А что не получается? Где расхождение?
 
Roger:
А что не получается? Где расхождение?


Или это алерт у меня завис, а у Вас, что - сошлось?
 
fore-x:


а у Вас, что - сошлось?
Намекаешь, что мне тоже надо быстренько состряпать советник и начинать проверять? Уж, уволь, я лучше виртуально.
 
Roger:
А что не получается? Где расхождение?

поменял аск и бид местами, стало так:


Так лучше :)))

 
Какая валюта?
Причина обращения: