Besoin d'une formule de moneymanagement LOT size basée sur le SL et le risque du compte ! - page 2

 
maleas_k:

Si j'ai bien compris la question, ceci fera l'affaire pour vous.


double free = AccountFreeMargin() ;

double potencial_loss,

double sum_potencial_loss = 0

double pips, lot_size ;

double pourcentage_depo = 5 ;

potencial_loss = (OrderLots() * (OrderOpenPrice() - OrderStopLoss()))*100000 ;
sum_potencial_loss = long_sum_potencial_loss + long_potencial_loss ;

lot_size = ((((free-long_sum_potencial_loss) * percent_depo)/100.0)/pips)/100000 ;



Merci, mais j'ai déjà la formule, j'ai juste besoin de fixer la valeur du point parce que j'ai un compte en EUR et non en USD :

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

Et j'ai besoin de remplacer le Point par TICKVALUE* TICKSIZE, donc ça ressemblerait à ça

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)* MarketInfo(Symbol(), MODE_TICKVALUE)* 
MarketInfo(Symbol(), MODE_TICKSIZE)  *100000 );

Si quelqu'un peut confirmer que cette idée est correcte, alors le problème est résolu, je suppose. Alors, s'il vous plaît, aidez-moi rapidement, et Joyeux Noël après !

 
RaptorUK:

J'ai supprimé votre code . . . .


Merci pour votre aide.
 
Proximus:

Merci mais j'ai déjà la formule, j'ai juste besoin de fixer la valeur du point parce que j'ai un compte en EUR et non en USD.le code est le suivant :

Et j'ai besoin de remplacer le Point par TICKVALUE* TICKSIZE, donc cela ressemblerait à ceci

Si quelqu'un peut confirmer que cette idée est correcte, alors le problème est résolu, je suppose. Alors, s'il vous plaît, aidez-moi rapidement, et Joyeux Noël après !

Je ne peux pas le confirmer mais je suggère de le déboguer avec la fonction Alert() ; comme ceci ?

Alert("LOT : ",LOT);

ou

Alert("AccountEquity : ",(AccountEquity()," RISK : " ,RISK," MODE_STOPLEVEL : ", MODE_STOPLEVEL," MYSTOPLOSS : ",MYSTOPLOSS," MODE_TICKVALUE : " ,MODE_TICKVALUE," MODE_TICKSIZE : ,MODE_TICKSIZE);

Et vous le confirmerez par vous-même.

 
maleas_k:

Merci pour votre aide.
Merci d'avoir fait la modification
 
maleas_k:

Je ne peux pas le confirmer mais je suggère de le déboguer avec la fonction Alert() ; comme ceci ?

ou

Et vous le confirmerez par vous-même.


Non, ce que je voulais dire, c'est qu'il est correct d'utiliser TICKVALUE* TICKSIZE ou TICKVALUE/ TICKSIZE comme WHRoeder l'a suggéré, car l'astérisque semble plus logique dans ce cas.

 

Proximus: WTF guys, shouldnt that be TICKVALUE * TICKSIZE instead of TICKVALUE /TICKSIZE ? I think there is a big mistake there

double LOT =(AccountEquity()*RISK)/(100*(MarketInfo(Symbol(),MODE_STOPLEVEL)+MYSTOPLOSS)* Point *100000 );
  1. Par exemple EURUSD avec la devise du compte USD.
    Si TickValue est de 10$ et Ticksize=0.0001. Si le marché bouge de 0.0020, la valeur est de $10/0.0001 * 0.0020=$200 / par lot. 10 $ par pip * 20 pips / par lot.
    Si TickValue est 1$ et Ticksize=0.00001. Si le marché bouge de 0,0020, la valeur est de 1 $/0,00001 * 0,0020 = 200 $ / par lot. Il n'y a pas d'erreur ici.
  2. C'est votre équation qui est fausse : 100 * stoploss, StopLevel, Point * 10000, etc. Relisez mon équation originale et résolvez-la pour la taille du lot.
 

Ok, cela devrait être les étapes pour le CALCUL DE LA TAILLE DU VOLUME(maximum) :

(merci de me corriger si je me trompe ^_^)

AccountMoneyRisk = AccountMoney * Risk%

Cotation du compte/contre-devise = Cotation(Compte-devise/contre-devise)

CounterCurrencyRisk = AccountMoneyRisk * AccountCounterQuote

PipValue = CounterCurrencyRisk / StopLoss

LotTickValue = LotSize * TickSize

Volume = PipValue * LotTickValue


Exemple :

Devise du compte : EUR
Paire de devises : GBPUSD
Devise de base : GBP
Contre-devise : USD

Argent du compte : 5000 EUR
Risque : 1 %.

StopLoss : 200 pips (contre monnaie)
LotSize : 100000 (Contre-Devise)
Taille des tics : 0. 00001

AccountMoneyRisk = AccountMoney * Risk% = 5000 EUR * 1% = 50 EUR

Cotation de la devise du compte = Cotation (devise du compte/devise de la contrepartie) = Cotation (EUR/USD) = 1,5000

CounterCurrencyRisk = AccountMoneyRisk * AccountCounterQuote = 50 EUR * 1,5000 = 75 USD

PipValue = CounterCurrencyRisk / StopLoss = 75 / 200 = 0,375

LotTickValue = LotSize * TickSize = 100000 * 0.00001 = 1 USD

Volume = PipValue * LotTickValue = 0.375 * 1 USD = 0.375



 

Cela suppose que la CounterCurrency est la même que la AccountCurrency, et n'inclut pas le spread, et suppose à tort qu'un pip == un point sur un courtier à 5 chiffres et que ticksize == point.

Pas nécessairement. Solde du compte * pourcentage = RISK = (OrderOpenPrice - OrderStopLoss)*DIR * OrderLots * DeltaPerlot (Note OOP-OSL inclut le SPREAD)

 

Ok, voici la version finale, veuillez confirmer si elle est correcte, je ne comprends pas pourquoi vous insistez sur votre truc DeltaPerlot alors qu'il ne fonctionne clairement pas dans ma situation, car j'ai un compte en EUR.

C'est ma fonction de dimensionnement de lot :

extern int STOPSLIP=20;
extern double RISK=0.5;

double LOT()
{
double clot=(AccountEquity()*RISK)/(100*(MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(),MODE_SPREAD)+STOPSLIP)* MarketInfo(Symbol(),MODE_TICKVALUE)*MarketInfo(Symbol(),MODE_TICKSIZE) *100000 );

if(clot<MarketInfo(Symbol(),MODE_MINLOT)) clot=MarketInfo(Symbol(),MODE_MINLOT);
if(clot>MarketInfo(Symbol(),MODE_MAXLOT)) clot=MarketInfo(Symbol(),MODE_MAXLOT); 
  return (clot);
} 
  • Le STOPSLIP ajoute un nombre X de pips au niveau actuel de la position+SPREAD.
  • J'utilise TICKVALUE * TICKSIZE parce que j'ai un compte en EUR et non en USD. Il est donc logique que la valeur du pip soit de 0,000007 au lieu de 0,00001 chez mon courtier à 5 chiffres, car elle est comptabilisée dans le taux de change de l'EUR.
Donc quelqu'un peut-il me confirmer si c'est correct, ou si ce n'est pas le cas alors corrigez MA formule, ne me donnez pas de liens vers d'autres posts, parce que je ne les comprends pas, corrigez juste ma fonction LOT() et je serai content, aidez-moi s'il vous plaît !
 
double clot=(AccountEquity()*RISK)/(100*(MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(),MODE_SPREAD)+STOPSLIP)
            * MarketInfo(Symbol(),MODE_TICKVALUE)*MarketInfo(Symbol(),MODE_TICKSIZE) *100000 );

J'ai mal à la tête rien qu'en essayant de comprendre les parenthèses !

Pour être honnête, je n'ai absolument aucune idée de ce que vous essayez d'obtenir ici.

Je ne vois pas en quoi MODE_STOPLEVEL ou SPREAD sont pertinents, vous devriez sûrement baser vos calculs sur la distance stop-loss du prix actuel ?

La devise du compte ne devrait pas faire de différence, le calcul devrait être le même car TICKVALUE est dans la devise du compte.

Veuillez noter qu'en mettant votre ligne de code sur 2 lignes, le message n'est pas aussi large et est plus facile à lire sans avoir à scroller de droite à gauche :)