А стандартная функция гугль - чем не подходит?
double Profit = OrderLots() * MathAbs((OrderOpenPrice() - Bid)/Point);
switch(OrderType()) // По типу ордера { case 0 : // Ордер Buy double prof = OrderLots() * ((NormalizeDouble(ObjectGet("VirtualStopLoss",OBJPROP_PRICE1),Digits) - OrderOpenPrice())/Point) * MarketInfo(Symbol(),MODE_TICKVALUE)*(MarketInfo(Symbol(),MODE_POINT)/MarketInfo(Symbol(),MODE_TICKSIZE)); break; // Выход из switch case 1 : // Ордер Sell prof = OrderLots() * ((NormalizeDouble(OrderOpenPrice() - ObjectGet("VirtualStopLoss",OBJPROP_PRICE1),Digits))/Point) * MarketInfo(Symbol(),MODE_TICKVALUE)*(MarketInfo(Symbol(),MODE_POINT)/MarketInfo(Symbol(),MODE_TICKSIZE)); break; // Выход из switch }Как заставить этот код учитывать спред?
Integer >>:
Еще на стоимость пункта надо умножать - double PointValue=MarketInfo(Symbol(),MODE_TICKVALUE)*(MarketInfo(Symbol(),MODE_POINT)/MarketInfo(Symbol(),MODE_TICKSIZE));
а эта стоимость пункта по этой формуле рассчитается для 1 лота ?
как посчитать стоимость пункта для произвольного размера лота?
Проблема возникает когда тип ордера покупка и ObjectGet("VirtualStopLoss",OBJPROP_PRICE1) меньше цены открытия ордера(не учитывается спред.), когда ObjectGet("VirtualStopLoss",OBJPROP_PRICE1) больше цены открытия ордера - все нормально. Та же проблема с ордером на продажу
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Требуется вычислить математически профит ордера при заданых условиях:
знаем цену открытия ордера, лот ордера, знаем текущую цену - нужно вычислить на основе этих данных профит или убыток у заданого ордера.
(стандартную функцию вычисления профита OrderProfit() в мт не предлагать)