Нужно чуть подправить код. Используется неявное предположение, что все ордера открыты по одной валютной паре. Можно заменить на отбор ордеров по символу, на котором висит советник.
Потом, расчет стоимости применим только к парам с USD в знаменателе.
Не учтен спред. Это можно исправить, считая результат от текущей цены.
В первом приближении, код мог бы выглядеть так:
double getLots(double newSL) { double TickValue, delta; double lotSum; string SymbolName; SymbolName = Symbol(); TickValue = MarketInfo( SymbolName, MODE_TICKVALUE) / Point; delta = ( newSL - Bid ) * TickValue; lotSum = 0.0; for (int i = 0; i <= OrdersTotal()-1; i++) { OrderSelect(i, SELECT_BY_POS); if ( OrderSymbol() == SymbolName ) { if (OrderType() == OP_BUY) { lotSum += OrderProfit() + OrderLots() * delta; } if (OrderType() == OP_SELL) { lotSum += OrderProfit() - OrderLots() * delta; } } } return(lotSum); }
Mislaid:
Учесть спред и не получится, если он динамический. Когда появилась надобность в подобной функции я не ставил себе цели точно узнать какова будет прибыль в валюте депозита. Может быть это и будет критично, если в стратегии используется скальпинг. Цель была иная - стоп лосс в безубытке, но позже оказалось что можно пойти и дальше - считать не только будет ли безубыток по этому уровню SL, но и прибыль, поэтому расчет исключительно для примера, иначе зачем мне было так подробно его расписывать. Вы правы, об этом стоило упомянуть по тексту, но я надеялся на то, что у читателей хватит внимания это заметить и адаптировать код под свой инструмент.
Потом, расчет стоимости применим только к парам с USD в знаменателе.
Не учтен спред. Это можно исправить, считая результат от текущей цены.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Код вычисления прибыли в предполагаемом уровне цены:
Author: Mepkypuu