так попробуйте
if (OrderType()==OP_BUY) prB+=(OrderStopLoss()-OrderOpenPrice())/pip;
if (OrderType()==OP_SELL) prS+=(OrderOpenPrice()-OrderStopLoss())/pip;
так попробуйте
if (OrderType()==OP_BUY) prB+=(OrderStopLoss()-OrderOpenPrice())/pip;
if (OrderType()==OP_SELL) prS+=(OrderOpenPrice()-OrderStopLoss())/pip;
такая конструкция не проходит......
Я сделал по -другому, но работает только для бай ордеров, для селл не получается, ниже код:
ищу причину.....
//+----------------------------------------------------------------------------+ //| Версия : 01.08.2023 | //| Описание : Возвращает фиксированный профит открытых позиций в пунктах | //| после переноса стоп-лосса по тралу | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int GetFixProfitInPips(string sy="", int op=-1, int mn=-1) { double pip; int i, k=OrdersTotal(); san=0; double prB=0; double prS=0; if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) { if (mn<0 || OrderMagicNumber()==mn) { pip=MarketInfo(OrderSymbol(), MODE_POINT); // if (StringFind(OrderSymbol(), "JPY")<0) pip=0.00001; else pip=0.001; if (OrderType()==OP_BUY) { RefreshRates(); if ((OrderProfit()>0) && (OrderStopLoss()>OrderOpenPrice())) prB+=((MarketInfo(OrderSymbol(), MODE_BID)-OrderOpenPrice())-(MarketInfo(OrderSymbol(), MODE_BID)-OrderStopLoss()))/pip; } if (OrderType()==OP_SELL) { RefreshRates(); // if ((OrderProfit()>0) && (OrderStopLoss()<OrderOpenPrice())) prS+=((MathAbs(MarketInfo(OrderSymbol(), MODE_ASK)-OrderOpenPrice())/pip)-(MathAbs(MarketInfo(OrderSymbol(), MODE_ASK)-OrderStopLoss())/pip)); } san=prB+prS; } } } } return(san); } //+----------------------------------------------------------------------------+
такая конструкция не проходит......
Я сделал по -другому, но работает только для бай ордеров, для селл не получается, ниже код:
ищу причину.....
ну раз для баек работает, то для селлок это нужно перевернуть, у Вас закомментировано плюсом
prB+=((MarketInfo(OrderSymbol(), MODE_BID)-OrderOpenPrice())-(MarketInfo(OrderSymbol(), MODE_BID)-OrderStopLoss()))/pip;
и почему считаете байки по Аску а не по Биду?
Чтобы прикинуть профит, нужно считать по цене закрытия.
И к тому же, при наличии стопов, нужно брать не Аск и Бид, а цену открытия ордера и стопы
И тут из бида вычли тот же бид, зачем?
(MarketInfo(OrderSymbol(), MODE_BID)-OrderOpenPrice())-(MarketInfo(OrderSymbol(), MODE_BID)
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго дня!
Как определить зафиксированную прибыль в пунктах после переноса стоп-лосса для нескольких ордеров? Выводит неверные значения.
Вот фрагмент кода: