Математический вопрос! Мартингейл

 

l1*p1 + l2*p2 + l3*p3 = (l1+l2+l3) * p4;

p4 - достижения безубыточности

Отсюда уровень безубыточности я могу вычислить.

Теперь допустим я знаю уровень и мне надо вычислить p3 = p4 - 10*Point;

Мне надо вычислить l3.

Получаем:

(l1+l2+l3)*p4 - l3*p3 = l1*p1 + l2*p2

l3 = (l1*p1 + l2*p2 - l1*p4 - l2*p4) / (p4 - p3)

 
trump:

l1*p1 + l2*p2 + l3*p3 = (l1+l2+l3) * p4;

p4 - достижения безубыточности

Отсюда уровень безубыточности я могу вычислить.

Теперь допустим я знаю уровень и мне надо вычислить p3 = p4 - 10*Point;

Мне надо вычислить l3.

Получаем:

(l1+l2+l3)*p4 - l3*p3 = l1*p1 + l2*p2

l3 = (l1*p1 + l2*p2 - l1*p4 - l2*p4) / (p4 - p3)


Приятно пообщаться с умным человеком:)
 
 
Что-то не пошло...
 
Хотя
 
trump:

Хочу поиграть с Мартингейлом.

Как вычислить размер лота, чтобы через 10 пунктов закрыть все ордера в плюсе?

https://www.mql5.com/ru/forum/122688

 
TEXX:

Да тут как бы какой момент. У меня не одня позиция в минусе а несколько с разным лотом и ценой открытия. Так что немного не то...
 
trump:

Да тут как бы какой момент. У меня не одня позиция в минусе а несколько с разным лотом и ценой открытия. Так что немного не то...


По формулам получаются скачки в закрытии, а хочется уменьшить риски... Вот не могу понять что не так...МартинГейл

double lotBeBacks(int strateg, int typeToProfit)
{
   double BuyProfits = 0.0;
   double SellProfits = 0.0;
   
   
   for(int i = OrdersTotal(); i >= 0; i--)                                            
   {
      if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)!=true) continue;                               
      if(OrderSymbol()!=Symbol()) continue;
      if(OrderMagicNumber() != strateg) continue;

      if(OrderType()==OP_BUY)
      {
         BuyProfits += OrderProfit();
      }
      
      if (OrderType()==OP_SELL)
      {
         SellProfits += OrderProfit();
      }
   }
   
   double buyLot = 0.0;
   double sellLot =  0.0;
   
   // -------------------------------------------------- //
   if (typeToProfit == BUYPOSITION)
   {
      buyLot = MathAbs(BuyProfits) / 10 / MarketInfo(Symbol(),MODE_TICKVALUE);
      return (buyLot);
   }
   
   if (typeToProfit == SELLPOSITION)
   {
      sellLot = MathAbs(SellProfits) / 10 / MarketInfo(Symbol(),MODE_TICKVALUE);
      return (sellLot);
   }
   
   
   return (0);
}
 
trump:

Да тут как бы какой момент. У меня не одня позиция в минусе а несколько с разным лотом и ценой открытия. Так что немного не то...
//+----------------------------------------------------------------------------+
double LevelWL(string sy) {  // Рассчёт БУ для множества разнонаправленных позиций по символу
   double lbu=0, lbB=0, lbS=0, LevelWL=0, SymbolProfit=0;
   double LotB=0, LotS=0, SumLots, tv=MarketInfo(sy,MODE_TICKVALUE); 
   double pa=MarketInfo(sy,MODE_ASK), pb=MarketInfo(sy,MODE_BID);
   int i, k=OrdersTotal()-1, sp=MarketInfo(sy,MODE_SPREAD), pt=MarketInfo(sy,MODE_POINT);
   
   for(i=k; i>=0; i--) {
      if(OrderSelect(i,SELECT_BY_POS)) {
         if(OrderSymbol()!=sy)      continue;
         if(OrderType()>1)          continue;
         SymbolProfit+=(OrderProfit()+OrderCommission()+OrderSwap());
         if(OrderType()==OP_BUY)  {numB++; LotB+=OrderLots();}
         if(OrderType()==OP_SELL) {numS++; LotS+=OrderLots();}
         }
      }
   SumLots=LotB-LotS; if(SumLots==0) return(0);
   lbB=pb+(MathAbs(SymbolProfit)/(tv*MathAbs(SumLots)))*pt;
   lbS=pa-(MathAbs(SymbolProfit)/(tv*MathAbs(SumLots))-sp)*pt;
   LevelWL=lbB; if(SumLots<0) LevelWL=lbS;
   return(LevelWL);
}
//+----------------------------------------------------------------------------+
 
artmedia70:



Спасибо. Кое-что для меня урок: SymbolProfit+=(OrderProfit()+OrderCommission()+OrderSwap());

Остальное туманно. Как насчёт только баев???

Причина обращения: