Как учесть закрытую позицию

 

Здравствуйте.

Подскажите, пожалуйста, как при расчете уровня Б.У. учитывать лот и цену закрытой позиции, так, как будто она существует как открытая позиция.

 Как правильно вставить сюда

 

//mq4
............
double Цена_открытия_закрытой_позиции = Pср();
double Лот_закрытой_позиции = Lotcp();


      if (OrderType()==OP_SELL)
      {
       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);
   }
 
mila.com:

Здравствуйте.

Подскажите, пожалуйста, как при расчете уровня Б.У. учитывать лот и цену закрытой позиции, так, как будто она существует как открытая позиция.

 Как правильно вставить сюда

 

Вам проще использовать функции Кима, там есть почти всё, чего нет - можно найти на просторах. В вашем случае нужно пройти по истории закрытых позиций, и найти последнюю.
Только "Полезные функции от KimIV". (Yuriy Tokman) - MQL4 форум
Только "Полезные функции от KimIV". (Yuriy Tokman) - MQL4 форум
  • www.mql5.com
Только "Полезные функции от KimIV". (Yuriy Tokman) - MQL4 форум
 
mila.com:

Здравствуйте.

Подскажите, пожалуйста, как при расчете уровня Б.У. учитывать лот и цену закрытой позиции, так, как будто она существует как открытая позиция.

 Как правильно вставить сюда

Вопрос туманно сформулирован. 

Не видно OrderSelect, там нужно в третьем параметре указать

MODE_HISTORY - ордер выбирается среди закрытых и удаленных ордеров

 

Vitaly Muzichenko:
Вам проще использовать функции Кима, там есть почти всё, чего нет - можно найти на просторах. В вашем случае нужно пройти по истории закрытых позиций, и найти последнюю.

Спасибо, Виталий.

 
Alexey Volchanskiy:

Вопрос туманно сформулирован. 

Не видно 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);
   }

 
mila.com:

Цена открытия закрытой позиции и лот известны, я их нахожу другими функциями.

Вопрос, как их прибавить к цене и лотам открытых позиций.

Мне нужно узнать цену, на которой суммарный убыток открытых позиций будет равен прибыли последней закрытой позиции.

Подумала, если в расчет уровня Б.У.  включить закрытую позицию, то узнаю цену, где открытые позиции “убьют” всю прибыль от закрытой позиции.

Вся функция вот

А если последний не прибыльный, что тогда?
 
Vitaly Muzichenko:
А если последний не прибыльный, что тогда?
Тогда у числа знак изменится.
 
От закрытого лучше брать прибыль в деньгах, делить ее на лот открытого ордера и на стоимость пункта, получится количество пунктов, которые надо прибавить к уровню безубытка открытого ордера. 
 

Ладно, рискну выложить код, если никто не выкладывает, может меня снова "опустят"

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
 }
 
"опускаю", код слишком большой
 
Vitaly Muzichenko:

Ладно, рискну выложить код, если никто не выкладывает, может меня снова "опустят"

Вопрос субъективности подхода, результат зависит от категорий пребывания по жизни. Кто-то пребывает в категориях конструктивного взаимодействия, конструктивной направляющей критики и т.п.