Здравствуйте.
Подскажите, пожалуйста, как при расчете уровня Б.У. учитывать лот и цену закрытой позиции, так, как будто она существует как открытая позиция.
Как правильно вставить сюда
- www.mql5.com
Здравствуйте.
Подскажите, пожалуйста, как при расчете уровня Б.У. учитывать лот и цену закрытой позиции, так, как будто она существует как открытая позиция.
Как правильно вставить сюда
Вопрос туманно сформулирован.
Не видно OrderSelect, там нужно в третьем параметре указать
MODE_HISTORY - ордер выбирается среди закрытых и удаленных ордеров
Вопрос туманно сформулирован.
Не видно OrderSelect, там нужно в третьем параметре указать
MODE_HISTORY - ордер выбирается среди закрытых и удаленных ордеров
Цена открытия закрытой позиции и лот известны, я их нахожу другими функциями.
double Цена_открытия_закрытой_позиции = Pср(); double Лот_закрытой_позиции = Lotcp();
Вопрос, как их прибавить к цене и лотам открытых позиций.
Мне нужно узнать цену, на которой суммарный убыток открытых позиций будет равен прибыли последней закрытой позиции.
Подумала, если в расчет уровня Б.У. включить закрытую позицию, то узнаю цену, где открытые позиции “убьют” всю прибыль от закрытой позиции.
Вся функция вот
double zeroProfSELL(string sy="", int op=-1, int mn1=-1, int mn2=-1) { int kol=0; int kolOK=0; int i=0; double Цена_открытия_закрытой_позиции = PriceOpenLastClosePos(Symbol(),op,mn1); double Лот_закрытой_позиции = GetLotLastClosePos(Symbol(),op,mn1); double lots=0; double sum=0; double sum1=0; double zeroprice=0; for (i=0; i<OrdersTotal(); i++) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if (OrderSymbol()!=sy) continue; if (OrderMagicNumber()!=mn1&&OrderMagicNumber()!=mn2) continue; if (OrderType()==op) { lots=lots-OrderLots(); sum=sum-OrderLots()*OrderOpenPrice(); sum1=sum1+OrderProfit( )+OrderSwap( )+OrderCommission( ) ; kol=kol+1; } } if (lots!=0) zeroprice=sum/lots; zeroprice = (MathRound(zeroprice*MathPow(10,Digits)))/MathPow(10,Digits); return(zeroprice); }
Цена открытия закрытой позиции и лот известны, я их нахожу другими функциями.
Вопрос, как их прибавить к цене и лотам открытых позиций.
Мне нужно узнать цену, на которой суммарный убыток открытых позиций будет равен прибыли последней закрытой позиции.
Подумала, если в расчет уровня Б.У. включить закрытую позицию, то узнаю цену, где открытые позиции “убьют” всю прибыль от закрытой позиции.
Вся функция вот
А если последний не прибыльный, что тогда?
Ладно, рискну выложить код, если никто не выкладывает, может меня снова "опустят"
int Magic = 1; void OnTick() { // ---- по открытым double BuyPrice=0,SellPrice=0,BuyLot=0,SellLot=0; int Buy=0,Sell=0; for (int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY) { Buy++; BuyLot+=OrderLots(); BuyPrice+=OrderOpenPrice()*OrderLots(); } if(OrderType()==OP_SELL) { Sell++; SellLot+=OrderLots(); SellPrice+=OrderOpenPrice()*OrderLots(); } } } } // ---- по истории double BuyProfit=0,SellProfit=0,BuyLotProfit=0,SellLotProfit=0; int tb=0,ts=0; for(int l=OrdersHistoryTotal()-1; l>=0; l--) { if(OrderSelect(l, SELECT_BY_POS, MODE_HISTORY)) { if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY) { if(OrderCloseTime()>tb) { tb=OrderCloseTime(); BuyProfit=OrderProfit()+OrderSwap()+OrderCommission(); BuyLotProfit=OrderLots(); } } if(OrderType()==OP_SELL) { if(OrderCloseTime()>ts) { ts=OrderCloseTime(); SellProfit=OrderProfit()+OrderSwap()+OrderCommission(); SellLotProfit=OrderLots(); } } } } } // ================================= РАСЧЁТЫ ============================================= // ---- переводим прошлую прибыль в пункты double LastPrBuyPoint=0,LastPrSellPoint=0; if(BuyProfit>0) { // если прибыльный LastPrBuyPoint=NormalizeDouble(MathAbs(((BuyProfit)/(SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)*BuyLotProfit))*_Point),_Digits); } else { // если не прибыльный LastPrBuyPoint=0; } if(SellProfit>0) { // если прибыльный LastPrSellPoint=NormalizeDouble(MathAbs(((SellProfit)/(SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)*SellLotProfit))*_Point),_Digits); } else { // если не прибыльный LastPrSellPoint=0; } // ---- текущий безубыток double BuyAwerage=0,SellAwerage=0; if(Buy>1) BuyAwerage=NormalizeDouble(BuyPrice/BuyLot,_Digits); if(Sell>1) SellAwerage=NormalizeDouble(SellPrice/SellLot,_Digits); // ---- считаем точку убытка по прошлой прибыли double StopLossBuy=0,StopLossSell=0; StopLossBuy=BuyAwerage-LastPrBuyPoint; // безубыток New Buy StopLossSell=SellAwerage+LastPrSellPoint; // безубыток New Sell // ---- Comment Comment("Безубыток Buy = ",BuyAwerage, // текущий "\nБезубыток Sell = ",SellAwerage, // текущий "\nЗакрытый профит Buy = ",LastPrBuyPoint, // в пунктах ", (",BuyProfit,"$)" // в деньгах "\nЗакрытый профит Sell = ",LastPrSellPoint,// в пунктах ", (",SellProfit,"$)" // в деньгах "\nNew Стоп Buy = ",StopLossBuy, // с учётом прибыли "\nNew Стоп Sell = ",StopLossSell // с учётом прибыли ); //- end }
Ладно, рискну выложить код, если никто не выкладывает, может меня снова "опустят"
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте.
Подскажите, пожалуйста, как при расчете уровня Б.У. учитывать лот и цену закрытой позиции, так, как будто она существует как открытая позиция.
Как правильно вставить сюда