Встроенная торговая функция double OrderProfitPoint( )

 
Уважаемые разработчики !

Убедительно прошу Вас разработать встроенную торговую функцию double OrderProfitPoint( ).

Терминал показывает прибыль ордера в пунктах, а в MQL4 необходимо производить расчеты.

Очень часто эта функция используется, каждый программист пишет ее самостоятельно.

У Вас получится лучше, и выполняться она будет быстрее.

Спасибо.
 
int OrderProfitPoint()
{
int res=0;
res=(OrderClosePrice()-OrderOpenPrice())/Point*MathAbs(OrderProfit())/OrderProfit();
return(res);
}
 
Большое Вам спасибо.

Не знала, что OrderClosePrice() корректно работает для открытых ордеров.

У меня есть нечто подобное с использованием OrderType( ), OrderOpenPrice( ), Ask, Bid.

Прибыль в пунктах может отличаться от целого из-за своп-пунктов.
 
Свопы отдельно -OrderSwap() - проверьте "MQL4: OrderSwap"
 
У меня брокер в 0.00 переоткрывает позиции, поэтому OrderOpenPrice( ) USDCHF 1.234697, OrderOpenPrice( ) EURUSD 1.313757.

int OrderProfitPoint()
{
int res=0;
res=(OrderClosePrice()-OrderOpenPrice())/Point*MathAbs(OrderProfit())/OrderProfit();
return(res);
}

res=(OrderClosePrice()-OrderOpenPrice())/Point*MathAbs(OrderProfit())/OrderProfit();


Этот оператор имеет проблемы со знаками + и - прибыли. Дважды вычисляется OrderProfit() - снижение быстродействия.

Но самая страшная ошибка - перед делением на OrderProfit() нет проверки на 0 ( ноль ). OrderProfit() = 0 это реально и часто встречается. Крэш неизбежен.

Мой вариант:

double OrderProfitPoint()
{
double res=0;

int ord_type = OrderType();

if ( ord_type == OP_BUY ) res = ( OrderClosePrice() - OrderOpenPrice() ) / Point;

else if ( ord_type == OP_SELL ) res = ( OrderOpenPrice() - OrderClosePrice() ) / Point;

res = NormalizeDouble( res, 2 );

return(res);
}
 
А ещё желательно делить не на Point, а на MarketInfo( OrderSymbol(), MODE_POINT ).
Потому что если случайно запустить мультивалютного советника на USDJPY, профит позиций по остальным инструментам будет округляться до 100 пунктов ;)
 

Но самая страшная ошибка - перед делением на OrderProfit() нет проверки на 0 ( ноль ). OrderProfit() = 0 это реально и часто встречается. Крэш неизбежен.

Мой вариант:
...


Согласен, только сегодня получил деление на ноль в индикаторе (но не креш). Обработку этой ситуации каждый делает сам в момент осознания ее необходимости :)
 
To komposter

Согласна. Помню Ваш совет, нормализую ВСЕ торговые параметры, проблем не имею.

Цветные Comment а ля komposter ( OBJ_LABEL ) неизменно украшают мой экран.

Спасибо большое !
 
Уважаемые разработчики !

Общими усилиями примерный код OrderProfitPoint() мы набросали.

Будет ли встроенная функция ?
 
Встроенной функции не будет. Вы же можете сделать это 3-мя строками mql-кода
 
Эти три строки кода повторяются у меня практически в каждом программном модуле.

Заметив это, я и высказала свое пожелание.
Причина обращения: