Форум по трейдингу, автоматизированным торговым системам и тестированию торговых стратегий
Сергей Голубев , 2024.07.08 13:49
Как сделать поиск на форуме/CodeBase/Маркете:https://www.mql5.com/en/forum/193510
Нашел, может кому надо. Проще искать через гугл и с него уже переходить на MQL5, так как на самом MQL5 в поиске выбивает много лишнего.

- www.mql5.com
Нашел, может кому надо. Проще искать через гугл и с него уже переходить на MQL5, так как на самом MQL5 в поиске выбивает много лишнего.
не хочу вас расстраивать, но
1) это не б/у - там просто рассчёт средней позиции и не учитываются комиссия и свопы
2) настолько старое, что даже странно как вы это откопали - уверен что есть 100500 более новых

- www.mql5.com
Это же для МТ4.
Спасибо
А нет ли подобного инструмента для МТ5?
В МТ4 получение комиссии по открытой сделке является тривиальной задачей ( OrderComission() ).
Было бы интересно посмотреть, как правильно получить комиссию в МТ5.
А нет ли подобного инструмента для МТ5?
В МТ4 получение комиссии по открытой сделке является тривиальной задачей ( OrderComission() ).
Было бы интересно посмотреть, как правильно получить комиссию в МТ5.
В МТ5 нет понятия открытой сделки, сделки существуют только в истории.
В риал-тайме есть только ордера и позиции.
А нет ли подобного инструмента для МТ5?
В МТ4 получение комиссии по открытой сделке является тривиальной задачей ( OrderComission() ).
Было бы интересно посмотреть, как правильно получить комиссию в МТ5.
В МТ5 пользуюсь такой функцией, переделана с МТ4
// Функция вычисляющая уровни безубытка, на покупку, на продажу с учетом накопленных свопов. 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); }
MT4
// Функция вычисляющая уровни без убытка, на покупку, на продажу с учетом накопленных свопов. 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 TickValue=MarketInfo(symb,MODE_TICKVALUE); // double ZeroLevel=0; double BuyLots=0; double SellLots=0; double BuyProfit=0; double SellProfit=0; double SellLevel; double BuyLevel; int Total=OrdersTotal(); for(int i=Total-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()!=symb) continue; if(OrderMagicNumber() != mn) continue; if(OrderType()==OP_BUY && (op<0 || OrderType()==op)) // if(OrderType()==OP_BUY) { BuyLots=(BuyLots+OrderLots()); BuyProfit=(BuyProfit+OrderProfit()+OrderCommission()+OrderSwap()); } if(OrderType()==OP_SELL && (op<0 || OrderType()==op)) // if(OrderType()==OP_SELL) { SellLots=(SellLots+OrderLots()); SellProfit=(SellProfit+OrderProfit()+OrderCommission()+OrderSwap()); } } } // double TickValue=MarketInfo(sy,MODE_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)); return(Price); } //--- End ---

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования