J'ai fini.
Il y a une variable externe MM qui doit être entre 0 et 100 (par exemple 2 signifie que pour chaque position tu risques 2% du capital)
La ligne est, par défaut placée à 20 pips au-dessus du prix. après tu peux la sélectionner pour la placer où tu veux.
L'EA ne supprime pas la ligne même après la fermeture et l'ouverture de MT4 donc si tu ne vois plus la ligne (elle est loin en haut ou en bas), tu peux la supprimer avec: clic-droit-->Lister les Objets puis supprimer la 'ligne11", comme ça l'EA va la redessiner dans son emplacement par défaut.
J'ai développé ce petit EA aujourd'hui(dimanche), je n'ai pas pu le tester vraiment (juste un test avec la fonction OnInit) il ne devrait y avoir aucun problème mais si tu auras une remarque demain lorsque tu le testes, dis-le moi.
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
extern string info = "Le MM doit être compris entre 0 et 100%";
extern double MM = 2;
double prix_sl, volume,perte_pips,A_perdre;
string typ_pos, pref;
//-----------------------------------------compatibité 2 & 4 digits---------------------------------------
double dig(string paire){
if( (MarketInfo(paire,MODE_DIGITS)==4) || (MarketInfo(paire,MODE_DIGITS)==2) ) return(0.1);
if( (MarketInfo(paire,MODE_DIGITS)==3) || (MarketInfo(paire,MODE_DIGITS)==5) ) return(1.0);return(1.0);}
//---------------------------------------------Diff en pips entre deux niveau de prix-----------------------------//
double diff_pips(string paire, double p1, double p2){
double res;
res=MathAbs(p1-p2)/(MarketInfo(paire,MODE_POINT)*10*dig(paire));
return(res);}
//---------------------------------------------------------------------------------------------------------------
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
//ObjectDelete("ligne11"
;);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
if(ObjectFind("ligne11"
;)<0){
ObjectDelete("ligne11"
;);ObjectCreate("ligne11", OBJ_HLINE, 0, iTime(Symbol(),Period(),40), Bid+200*(Point*dig(Symbol())) );ObjectSet("ligne11", OBJPROP_COLOR,BlanchedAlmond);ObjectSet("ligne11", OBJPROP_STYLE,STYLE_DOT);}
prix_sl = ObjectGet("ligne11", OBJPROP_PRICE1);
if(prix_sl<Bid) {typ_pos = "achat"; pref = "d'";} if(prix_sl>Ask) {typ_pos = "vente"; pref="de ";}
perte_pips = MathMin( diff_pips(Symbol(),prix_sl,Bid),diff_pips(Symbol(),prix_sl,Ask) ) + MarketInfo(Symbol(),MODE_SPREAD)/(dig(Symbol())*10) ;
A_perdre = MM * 0.01 * AccountFreeMargin() ;
volume = A_perdre / ( perte_pips * (MarketInfo(Symbol(),MODE_TICKVALUE)*(dig(Symbol())*10)) ) ;
//Comment("Tick value in the deposit currency= "+MarketInfo(Symbol(),MODE_TICKVALUE)+"\n"+DoubleToString(Point,5)+"\n"+MarketInfo(Symbol(),MODE_SPREAD));
Comment(
"\nEquité: "+AccountEquity()+" Marge disponible: "+AccountFreeMargin()+" "+AccountCurrency()+
"\nMM: "+MM+"% // je suis prêt à perdre: "+A_perdre+" "+AccountCurrency()+
"\n\nEventuelle perte en pips (y compris
spread "+MarketInfo(Symbol(),MODE_SPREAD)/(dig(Symbol())*10)+"
;): "+DoubleToString(perte_pips,2)+" pips\n"+
"volume pour cette position "+pref+typ_pos+": "+DoubleToString(volume,2));
//
}
//+------------------------------------------------------------------+