Полную функцию дать не могу, только несколько основных строк
В цикле суммируем
summPrice += PositionGetDouble(POSITION_PRICE_OPEN)*PositionGetDouble(POSITION_VOLUME); summVolume += PositionGetDouble(POSITION_VOLUME);
Выйдя из цикла
averagePrice = NormalizeDouble(summPrice/summVolume, _Digits);
получили среднюю цену.
//+------------------------------------------------------------------+ //| Zero_Level.mq5 | //| Copyright © 2007, Xupypr | //+------------------------------------------------------------------+ // Функция вычисляющая уровни безубытка, на покупку, на продажу с учетом накопленных свопов. double Zero_Level(string symb="", int op=-1, int mn=-1) { if(symb=="0") symb=_Symbol; double TickValue=SymbolInfoDouble(symb,SYMBOL_TRADE_TICK_VALUE); double BuyLots=0; double SellLots=0; double BuyProfit=0; double SellProfit=0; double BuyLevel=0; double SellLevel=0; int Total=PositionsTotal(); for(int i=Total-1; i>=0; i--) { if(po.SelectByIndex(i)) { if(po.Symbol()!=symb) continue; if(po.Magic()!=mn) continue; if(po.PositionType()==OP_BUY && (op<0 || po.PositionType()==op)) { BuyLots+=NormalizeDouble((po.Volume()),2); BuyProfit+=NormalizeDouble((po.Profit()+(po.Commission()*2)+po.Swap()),2); } if(po.PositionType()==OP_SELL && (op<0 || po.PositionType()==op)) { SellLots+=NormalizeDouble((po.Volume()),2); SellProfit+=NormalizeDouble((po.Profit()+(po.Commission()*2)+po.Swap()),2); // Print(SellLots); // Print(SellProfit); // Print(TickValue); } } } double Price=0; if(BuyLots>0) BuyLevel=NormalizeDouble(SymbolInfoDouble(symb,SYMBOL_BID)-(BuyProfit/(TickValue*BuyLots)*SymbolInfoDouble(symb,SYMBOL_POINT)),(int)SymbolInfoInteger(symb,SYMBOL_DIGITS)); else BuyLevel=0; if(SellLots>0) SellLevel=NormalizeDouble(SymbolInfoDouble(symb,SYMBOL_ASK)+(SellProfit/(TickValue*SellLots)*SymbolInfoDouble(symb,SYMBOL_POINT)),(int)SymbolInfoInteger(symb,SYMBOL_DIGITS)); else SellLevel=0; if((BuyLots-SellLots)>0) Price=NormalizeDouble(SymbolInfoDouble(symb,SYMBOL_BID)-((BuyProfit+SellProfit)/(TickValue*(BuyLots-SellLots))*SymbolInfoDouble(symb,SYMBOL_POINT)),(int)SymbolInfoInteger(symb,SYMBOL_DIGITS)); if((SellLots-BuyLots)>0) Price=NormalizeDouble(SymbolInfoDouble(symb,SYMBOL_ASK)+((BuyProfit+SellProfit)/(TickValue*(SellLots-BuyLots))*SymbolInfoDouble(symb,SYMBOL_POINT)),(int)SymbolInfoInteger(symb,SYMBOL_DIGITS)); // Print(SellLevel); return(Price); } //+----------------------------------------------------------------------------+ //| Описание : Установка объекта OBJ_HLINE горизонтальная линия | //+----------------------------------------------------------------------------+ //| Параметры: | //| cl - цвет линии | //| nm - наименование ("" - время открытия текущего бара) | //| p1 - ценовой уровень (0 - sy.Bid()) | //| st - стиль линии (0 - простая линия) | //| wd - ширина линии (0 - по умолчанию) | //+----------------------------------------------------------------------------+ void SetHLine(color cl, string nm="", double p1=0, int st=0, int wd=1) { if(nm=="") nm=DoubleToString(iTime(sy.Name(),PERIOD_CURRENT,0), 0); if(p1<=0) p1=sy.Bid(); if(ObjectFind(0,nm)<0) ObjectCreate(0,nm, OBJ_HLINE, 0, 0,0); ObjectSetDouble(0,nm, OBJPROP_PRICE,0, p1); ObjectSetInteger(0,nm, OBJPROP_COLOR, cl); ObjectSetInteger(0,nm, OBJPROP_STYLE, st); ObjectSetInteger(0,nm, OBJPROP_WIDTH, wd); } //END //+------------------------------------------------------------------+
функции для MT5. Дальше встраивайте их в советник, скрипт или индикатор.
Volodymyr Zubov #:
Может и лишнее, давно переделывал с MQ4. На кроссах цену стабильно не показывет, гуляет немного цена, незнал как её стабилизировать. Нормализацию в этих местах можно и не делать.
она и должна слегка гулять - цена тика меняется
и ещё полезно убрать привязку с Bid/Ask, (БУ = средняя цена - сколько пунктов сожрали своп и комиссия)
для комиссии умножение на два должно быть опционально. Некоторые берут сразу всё на открытии
спасибо всем!
странно, что за много лет никто не написал такой индикатор.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь

ищу несколько часов - никак не могу найти.
нужна обычная линия по средней цене открытых позиций (с учётом кол-ва лотов).
нашёл для мт4. нужно для мт5.
если поможет - вот код для мт4.