Нужна формула размера LOT для управления капиталом, основанная на SL и риске счета!

 

Здравствуйте, мне нужен код/формула, которая изменяет размер лота на основе % риска счета, рассчитанного с учетом STOPLOSS, и принимая во внимание, что мой счет в EUR.

То, что у меня есть, это вот это:

extern double RISK=1;  //1% RISK
double LOT;

LOT = NormalizeDouble(AccountEquity()*RISK/10000,2);

Но эта формула не учитывает стоплосс.

Поэтому я нашел этот в поиске Google

lot=NormalizeDouble(AccountBalance( )*MaximumRisk/StopLoss/(MarketInfo(Symbol(), MODE_TICKVALUE)),2);

И вот это

lot = Risk * AccountEquity() / MarketInfo(Symbol(), MODE_TICKVALUE) / Stop;

Но ничего из этого не работает, пожалуйста, помогите мне исправить это или дайте мне лучший вариант, спасибо!

 
  1. Баланс счета * процент = RISK = (OrderOpenPrice - OrderStopLoss)*DIR * OrderLots * DeltaPerlot (Примечание OOP-OSL включает SPREAD).
  2. НЕ используйте TickValue само по себе - DeltaPerlot
  3. Вы также должны проверить FreeMargin, чтобы избежать стоп-аута
 
   double Spread=MarketInfo(Symbol(),MODE_SPREAD)/Q;
   double Risk=(RiskPercent*AccountEquity())/100;//this means if your balance 1000$ & RiskPercent=10% >> you going to risk 100$
   double lot=Risk/((StopLoss+Spread)*MarketInfo(Symbol(),MODE_TICKVALUE)*Q);//Make Sure to Define Your StopLoss & Q=10 in 5 digits or Q=1 in 4 Digits 
 
yousefh:, прочитайте комментарий в моем DeltaPerlot. НЕ используйте значение тика само по себе.
 
yousefh:

Извините, это не очень хорошо

WHRoeder:
  1. Баланс счета * процент = RISK = (OrderOpenPrice - OrderStopLoss)*DIR * OrderLots * DeltaPerlot (Примечание OOP-OSL включает SPREAD).
  2. НЕ используйте TickValue само по себе - DeltaPerlot
  3. Вы также должны проверить FreeMargin, чтобы избежать стоп-аута.

Хорошо, я понял вашу мысль, поэтому вот моя логика и расчеты, как я рассчитываю RISK %


Что в коде MQL4 выглядит следующим образом:

extern double MYSTOPLOSS = 50;  // CUSTOM SL SIZE IN PIPS AFTER THE STOPLEVEL
extern double  RISK =2; // 2% ACCOUNT RISK

double LOT =(AccountEquity()*RISK)/(100*(MarketInfo(Symbol(),MODE_STOPLEVEL)+MYSTOPLOSS)* Point *100000 );


Простой 1 лайнер, ничего сложного, теперь, пожалуйста, помогите мне вставить тот DELTA материал, о котором вы говорили, я знаю, что формула не полная, поэтому, пожалуйста, помогите мне.И, пожалуйста, обратите внимание, что мой счет в евро, поэтому в большинстве случаев это основная валюта.

 
Помогите мне пожалуйста побыстрее, я хочу закончить этот проект до X-mas :)
 
Proximus: Помогите мне, пожалуйста, быстрее, я хотел бы закончить этот проект до X-mas :)
  1. Отсутствие планирования
  2. Теперь, пожалуйста, помогите мне вставить этот материал DELTA
    Вы потрудились нажать на предоставленные ссылки?
 
WHRoeder:

  1. Теперь, пожалуйста, помогите мне вставить эту DELTA
    Вы потрудились нажать на предоставленные ссылки?

Да, но я не понимаю, как вы вставляете это в мое уравнение, вы же сказали, что вам это нужно:

  MarketInfo(pair, MODE_TICKVALUE)
           / MarketInfo(pair, MODE_TICKSIZE) 
Но я не понимаю, как это поможет моему уравнению, потому что деление этих двух чисел даст большое число вместо размера тика...
 
Proximus:

Да, но я не понимаю, как вы вписали это в мое уравнение, вы же сказали, что вам нужно это:

Но я не понимаю, как это поможет моему уравнению, потому что деление этих двух чисел даст большое число вместо размера тика...

Попробуйте эту ссылку: https://www.mql5.com/en/forum/148224.

Возможно, если посмотреть на это под другим углом, это поможет.

 
ubzen:

Попробуйте воспользоваться этой ссылкой: https://www.mql5.com/en/forum/148224.

Возможно, если посмотреть на это под другим углом, это поможет.


WTF, ребята, разве это не должно быть TICKVALUE * TICKSIZE вместо TICKVALUE /TICKSIZE? Я думаю, там большая ошибка.





Только что сделал быстрый индикатор, который показывает отдельные значения, я думаю, что TICKVALUE * TICKSIZE является подходящим...


И обратите внимание, что демо-счет в EUR, так что это базовая валюта, в то время как я сделал тот же тест с USD-счетом и там POINT был эквивалентен TICKVALUE * TICKSIZE, потому что он измеряет значение валюты котировки.

Файлы:
 

Если я правильно понял вопрос, это сделает за вас всю работу.

for( i=0; i<=ot; i++ ) for( z=0; z<=10; z++ )
      {
         if( long_orders_array_ATF[i][z] > 0 )
         for (zz=0; zz<=10; zz++)
         { 
            OrderSelect(zz,SELECT_BY_POS,MODE_TRADES);
            if (OrderTicket()==long_orders_array_ATF[i][z]) zz=ot+2; 
            if (ot+2<=zz)  
            long_potencial_loss = (OrderLots() * (OrderOpenPrice() - OrderStopLoss()))*100000;
            long_sum_potencial_loss = long_sum_potencial_loss + long_potencial_loss;
         }
      }
...

lot_size = ((((free-long_sum_potencial_loss) * percent_depo)/100.0)/pips)/100000 ; }
Причина обращения: