Bonjour,
Je viens encore vous soliciter car je suis confronté à un problème que je n'arrive pas à résoudre sur ma fonction calcul de lot.
Je souhaite calculer mes tailles de lots en fonctions des paramètres suivants:
- un pourcentage de capital (Rcapital)
- Et le positionnement du SL qui est placé pour un ordre long sur le plus bas de J-1 ou J-2 (le plus bas des deux) // pour un ordre short, c'est l'inverse.
Ceci dans le but d'avoir une perte constante en cas de SL touché:
exemple: mon capital est de 5000 euro et mon risque de 1%, ma perte maxi sera de 5000*1% soit 50 euro en quand de SL touché.
A la compil pas d'erreur mais dans le testeur, cela ne va pas.
voici mon code:
La fonction de calcul du SL
void calculSLTP( double Prix, int Type, double spread)
{
double plusHaut;
double plusBas;
double MaxSL = 1 + (MarketInfo(Symbol(), MODE_STOPLEVEL))*Point/MyPoint;
//*** SL pour OP_BUY STOP Recherche du plus bas entre le jour J-1 et J-2
double BasJmoinsun = iLow(Symbol(),TF_Vague,1);
double BasJmoinsdeux = iLow(Symbol(),TF_Vague,2);
if ( BasJmoinsun < BasJmoinsdeux)
{
plusBas = BasJmoinsun;
}
else
{
plusBas = BasJmoinsdeux;
}
//*** SL pour OP_SELL STOP Recherche du plus haut entre le jour J-1 et J-2
double HautJmoinsun = iHigh(Symbol(),TF_Vague,1);
double HautJmoinsdeux = iHigh(Symbol(),TF_Vague,2);
if ( HautJmoinsun > HautJmoinsdeux)
{
plusHaut = HautJmoinsun;
}
else
{
plusHaut = HautJmoinsdeux;
}
//*** Calcul du SL et TP ***//
if (Type == OP_BUY || Type == OP_BUYSTOP)
{
// if(stoploss > 0) SL_long = NormalizeDouble(Prix-(MathMax(stoploss,MaxSL)*MyPoint),Digits);
//*** SL
SL_long = NormalizeDouble((plusBas - (Pip_SL*MyPoint)),Digits);
}
if (Type == OP_SELL || Type == OP_SELLSTOP)
{
// if(stoploss > 0) SL_short = NormalizeDouble(Prix+(MathMax(stoploss,MaxSL)*MyPo int),Digits);
//*** SL
SL_short = NormalizeDouble((plusHaut + (Pip_SL*MyPoint)),Digits);
return(0);
}
La fonction de calcul du lot:
void CalculLots()
{
double Marketinfo = MarketInfo(Symbol(), MODE_MINLOT);
if(CapitalOn)
{
if(Type == OP_BUYLIMIT || Type == OP_BUYSTOP || Type == OP_BUY)
{
Perte = MarketInfo(Symbol(),MODE_TICKVALUE)*(Ask-SL_long)/MyPoint;
}
if(Perte != 0)
PerteMax = (AccountBalance()*RCapital/100)/Perte;
Lot1 = PerteMax*(Point/MyPoint);
if(Type == OP_SELLLIMIT || Type == OP_SELLSTOP || Type == OP_SELL)
{
Perte = MarketInfo(Symbol(),MODE_TICKVALUE)*(SL_short-Bid)/MyPoint;
}
if(Perte != 0)
PerteMax = (AccountBalance()*RCapital/100)/Perte;
Lot1 = PerteMax*(Point/MyPoint);
if (Marketinfo == 0.1)
Lot1 = NormalizeDouble(Lot1,1);
if (Marketinfo == 0.01)
Lot1= NormalizeDouble(Lot1,2);
}
else Lot1 = Lot;
return(Lot1);
Merci de votre aide
![]() |
|


LinkBack URL
About LinkBacks
Répondre avec citation
