Serve una formula di moneymanagement LOT size basata su SL e rischio del conto!

 

Salve, ho bisogno di un codice/una formula che ridimensioni la dimensione del lotto in base alla percentuale di rischio del conto calcolata includendo lo STOPLOSS, e tenendo in considerazione che il mio conto è in EUR.

Quello che ho è questo:

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

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

Ma questo non considera lo stoploss

Così ho trovato questo su google search

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

E questo

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

Ma nessuno di questi funziona, per favore aiutatemi a sistemarli, o datemene uno migliore, grazie!

 
  1. Saldo del conto * percentuale = RISK = (OrderOpenPrice - OrderStopLoss)*DIR * OrderLots * DeltaPerlot (Nota OOP-OSL include lo SPREAD)
  2. NON usare TickValue da solo - DeltaPerlot
  3. Devi anche controllare FreeMargin per evitare lo stop out
 
   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:, leggi il commento nel mio DeltaPerlot. NON usare il valore di tick da solo.
 
yousefh:

Mi dispiace che non sia buono

WHRoeder:
  1. Saldo del conto * percentuale = RISK = (OrderOpenPrice - OrderStopLoss)*DIR * OrderLots * DeltaPerlot (Nota OOP-OSL include lo SPREAD)
  2. NON usare TickValue da solo - DeltaPerlot
  3. Devi anche controllare FreeMargin per evitare lo stop out

Ok, capisco il tuo punto di vista, quindi ecco la mia logica e il mio calcolo per calcolare il RISCHIO


Che nel codice MQL4 assomiglia a questo:

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 );


Un semplice 1 liner, niente di complicato, ora per favore aiutami ad inserire quella roba DELTA di cui hai parlato, so che la formula non è completa quindi per favore aiutami.

 
Aiutatemi, per favore, in fretta, vorrei finire questo progetto prima di Natale :)
 
Proximus: Aiutami per favore veloce, vorrei finire questo progetto prima di X-mas :)
  1. Mancanza di pianificazione
  2. ora per favore aiutatemi a inserire quella roba DELTA
    Ti sei preso la briga di cliccare sui link forniti?
 
WHRoeder:

  1. ora per favore aiutatemi a inserire quella roba DELTA
    Ti sei preso la briga di cliccare sui link forniti?

Sì, l'ho fatto, ma non capisco come lo inserisci nella mia equazione, hai detto che hai bisogno di questo:

  MarketInfo(pair, MODE_TICKVALUE)
           / MarketInfo(pair, MODE_TICKSIZE) 
Ma non capisco come questo aiuti la mia equazione, perché dividendo questi due numeri si ottiene un numero grande al posto del ticksize...
 
Proximus:

Sì, l'ho fatto, ma non capisco come lo inserisci nella mia equazione, hai detto che hai bisogno di questo:

Ma non capisco come questo aiuti la mia equazione, perché dividendo questi due numeri si ottiene un numero grande al posto del ticksize...

Prova questo link: https://www.mql5.com/en/forum/148224.

Forse guardarlo da un'altra angolazione potrebbe aiutare.

 
ubzen:

Prova questo link: https://www.mql5.com/en/forum/148224.

Forse guardarlo da un'angolazione diversa potrebbe aiutare.


WTF ragazzi, non dovrebbe essere TICKVALUE * TICKSIZE invece di TICKVALUE /TICKSIZE? Penso che ci sia un grosso errore lì





Ho appena fatto un indicatore veloce che mostra valori separati, credo che il TICKVALUE * TICKSIZE sia quello appropriato...


E si noti che il conto demo è in EUR, quindi questa è la valuta di base, mentre ho fatto lo stesso test con un conto USD e lì il PUNTO era equivalente a TICKVALUE * TICKSIZE perché misura il valore della valuta di quotazione.

 

Se ho capito bene la domanda, questo farà il lavoro per voi.

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 ; }