int OrderProfitPoint()
{
int res=0;
res=(OrderClosePrice()-OrderOpenPrice())/Point*MathAbs(OrderProfit())/OrderProfit();
return(res);
}
{
int res=0;
res=(OrderClosePrice()-OrderOpenPrice())/Point*MathAbs(OrderProfit())/OrderProfit();
return(res);
}
Большое Вам спасибо.
Не знала, что OrderClosePrice() корректно работает для открытых ордеров.
У меня есть нечто подобное с использованием OrderType( ), OrderOpenPrice( ), Ask, Bid.
Прибыль в пунктах может отличаться от целого из-за своп-пунктов.
Не знала, что 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);
}
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);
}
Но самая страшная ошибка - перед делением на OrderProfit() нет проверки на 0 ( ноль ). OrderProfit() = 0 это реально и часто встречается. Крэш неизбежен.
Мой вариант:
...
Согласен, только сегодня получил деление на ноль в индикаторе (но не креш). Обработку этой ситуации каждый делает сам в момент осознания ее необходимости :)
Уважаемые разработчики !
Общими усилиями примерный код OrderProfitPoint() мы набросали.
Будет ли встроенная функция ?
Общими усилиями примерный код OrderProfitPoint() мы набросали.
Будет ли встроенная функция ?
Встроенной функции не будет. Вы же можете сделать это 3-мя строками mql-кода
Эти три строки кода повторяются у меня практически в каждом программном модуле.
Заметив это, я и высказала свое пожелание.
Заметив это, я и высказала свое пожелание.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Убедительно прошу Вас разработать встроенную торговую функцию double OrderProfitPoint( ).
Терминал показывает прибыль ордера в пунктах, а в MQL4 необходимо производить расчеты.
Очень часто эта функция используется, каждый программист пишет ее самостоятельно.
У Вас получится лучше, и выполняться она будет быстрее.
Спасибо.