Как рассчитать StopLoss по мартингейлу в точке баланса?

 

Хочу установить стоплосс у всех ордеров на критическом уровне риска. Чтобы в случае скачка оставался определённый баланс на счёте. Как рассчитать цену закрытия, при которой мой баланс будет равен определённой величине. Можно формулами, код сам нарисую.

double AcCriticBalance = $500;
double priceStopLossACB = ?

Ну и может поделится кто-нить смыслом рассчёта.
Очень хочется контролировать такие вещи например:

1. Рассчёт цены закрытия в профите +10 пунктов Общий размер лота

2. Рассчёт цены закрытия в профите +10 пунктов по 0,2

3. Рассчёт стоплосса -3 пункта общий лот

4. Рассчёт стоплосса -10 пунктов по 0,01

Знаю только безубыток:

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

p4 - цена безубытка
l - размер лота открытой позиции

-----------------------------------------------------------------------

Я чё подумал-то. Допустим я знаю расстояние до безубытка, разницу между балансами (суммарный убыток) - вычисляю размер лота суммарно открытой позиции и вычисляю за какое количество пунктов он уйдёт в мою точку баланса от текущей цены. Соединяю текущую цену с количеством пунктов и получаю искомую величину... Интересно...

 

1) по валюте находим "общую позицию": "все лоты бай" -"все лоты селл" (если 0 - то само собой что расчет не ведем)

2) узнаем "сколько можно потерять": "еквити" - "сколько должно остаться на балансе"

3) узнаем "сколько пипов можно потерять": "сколько можно потерять" / "стоимость одного пипа" / "|общая позиция|"

4) узнаем "значение стоплоса":

если больше бай: бид - "сколько пипов можно потерять" * "digits"

если больше селл: аск + "сколько пипов можно потерять" * "digits"

На данный момент мне кажется что так можно найти где стоп ставить, чтобы осталось определенное количество денег на балансе.

 
ALXIMIKS:

1) по валюте находим "общую позицию": "все лоты бай" -"все лоты селл" (если 0 - то само собой что расчет не ведем)

2) узнаем "сколько можно потерять": "еквити" - "сколько должно остаться на балансе"

3) узнаем "сколько пипов можно потерять": "сколько можно потерять" / "стоимость одного пипа" / "|общая позиция|"

4) узнаем "значение стоплоса":

если больше бай: бид - "сколько пипов можно потерять" * "digits"

если больше селл: аск + "сколько пипов можно потерять" * "digits"

На данный момент мне кажется что так можно найти где стоп ставить, чтобы осталось определенное количество денег на балансе.


На калькуляторе не сходится. Открыто на данный момент 29 селлов. Общий лот 1.28 профит -$160 и 8 пунктов до плюса в 2 пункта. Если умножить 8*$12.8, то получим $76.. Куда эту цифру? Вся проблема видимо в том, что цена скачет и общая позиция изменяется динамически, что меня несколько путает и если не учитывать цену открытия каждой позиции, то понять что будет через 10 пунктов для меня пока остаётся чем-то туманным.
 
trump:

На калькуляторе не сходится. Открыто на данный момент 29 селлов. Общий лот 1.28 профит -$160 и 8 пунктов до плюса в 2 пункта. Если умножить 8*$12.8, то получим $76.. Куда эту цифру? Вся проблема видимо в том, что цена скачет и общая позиция изменяется динамически, что меня несколько путает и если не учитывать цену открытия каждой позиции, то понять что будет через 10 пунктов для меня пока остаётся чем-то туманным.


вы ручками считали?

не проще код написать по описанию выше,

открыть тестер в визуальном режиме и кинуть туда ордер один и стоп к нему по формуле - и посмотреть.

что это значит?

8 пунктов до плюса в 2 пункта

 
ALXIMIKS:


вы ручками считали?

не проще код написать по описанию выше,

открыть тестер в визуальном режиме и кинуть туда ордер один и стоп к нему по формуле - и посмотреть.

что это значит?


У меня тянется трейлинг на общую по следующим соображениям:

//+------------------------------------------------------------------+
//| Трейлинг стоп Все позиции в профит                               |
//+------------------------------------------------------------------+
int allPosInProfit(int strateg, int profitBorder, int typeToProfit)
{
   double BuyProfits = 0.0;
   double BuyLots = 0.0;
   double SellProfits = 0.0;
   double SellLots = 0.0;
   double AllProfits = 0.0;
   double AllLots = 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 += OrderLots()*OrderOpenPrice();
         BuyLots += OrderLots();
      }
      
      if (OrderType()==OP_SELL)
      {
         SellProfits += OrderLots()*OrderOpenPrice();
         SellLots += OrderLots();
      }
   }
   
   AllProfits = BuyProfits + SellProfits;
   AllLots = BuyLots + SellLots;
   
   if (profitBorder < bProfit) profitBorder = bProfit;
   
   // Рассчёт цены безубытка
   double BuyPrice   = 0.0;
   double SellPrice  = 0.0;
   double AllPrice   = 0.0;
   if (BuyLots > 0) BuyPrice   = BuyProfits / BuyLots + profitBorder * Point;
   if (SellLots > 0) SellPrice  = SellProfits / SellLots - profitBorder * Point;
   
   double profitTo = profitBorder * Point;
   if (BuyProfits < SellProfits) profitTo = 0 - profitTo;
   if (AllLots > 0) AllPrice   = AllProfits / AllLots + profitTo;
   
   for(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 && OrderTakeProfit() != BuyPrice)
      {
         modify(strateg, OrderTicket(), OrderOpenPrice(), OrderStopLoss(), BuyPrice);
      }
      
      if (OrderType()==OP_SELL && OrderTakeProfit() != SellPrice)
      {
         modify(strateg, OrderTicket(), OrderOpenPrice(), OrderStopLoss(), SellPrice);
      }
   }
   
   return (0);
}

Безубыток + 2пункта (borderProfit)

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