Rejoindre la communauté
banner_forum
Devenez membre de la plus grande
communauté francophone sur le Forex
Partagez, échangez et apprenez en gagnant des crédits sur votre compte de trading

Quel fonction MQL4 représente "MARGE LIMITE" ?!

  • arka3579

    Bonjour a tous.
    Quelle est la fonction correspondant à MARGE LIMITE.. ?
    AccountFreeMargin() ? .. Une autre ?
    Pour donner un exemple ; Je souhaite que l EXPERT EA ouvre pas de position si "MARGE LIMITE" En dessous de 250%.
    Quelqu'un saurait t'il écrire ce code ?
    Remerciements.
    -- Yohan --
    arka3579 a joint une image
    quel-fonction-mql4-represente-marge-limite-14084
  • pravanavivids

    il vaut mieux coder un EA qui n'ouvrira pas de position lorsqu'un certain % de draw down est atteint plus logique
  • arka3579 — en réponse à pravanavivids dans son message #127814

    Ok.
  • arka3579

    J'ai trouvé la formule mathématique :
    ((AccountEquity()/AccountMargin())*100)

    Par contre j'arrive pas écrire la fonction "if"
    Je récapitule ma demande :
    si j'ai 1000% de Marge Limit, je prend moins de risque lors de mon ouverture de position.
    Si j'ai 100% Le margin call est pas loin.

    comment écrire la fonction "if" si par exemple je ne veux pas que mon EA ouvre si inférieur a 250% (exemple)
    Remerciement.
  • arka3579 — en réponse à pravanavivids dans son message #127814

    Re à toi.
    J'ai des difficultés a écrire les lignes pour filtré par DrawDown.
    Peux-tu me fournir les lignes mql4 ou mettre en avant un petit robot intégrant ces lignes.
    Ici ou en Privé.

    Remerciement.
    Une Belle et Heureuse année à l'ensemble de l'équipe et utilisateurs FOREXAGONE.

    Y.H.
  • arka3579

    J'ai une question importante en lien avec mes difficultés a codé les lignes FREEMARGIN/DrawDown.
    Le BackTest MT4 prend- t-il en considération ce genre de ligne de code.

    Remerciements.

    Y.H.
  • arka3579

    Voici une idée de code avec la fonction IF.
    Si quelqu'un peut confirmé la logique, et son efficacité :

    En résumé, si ma marge disponible (FreeMargin) est supérieur a la moitié de ma Balance divisé par 2. Le Robot ouvre position.

    If (AccountFreeMargin() >= AccountBalance()/2)

    Votre avis s.v.p.
    Bonne soirée.

    Y.H.
  • arka3579

    Voici le Robot dans lequel il faudrai mettre une limite de marge.
    L'idée c'est de ne pas ouvrir de position sI 50% de la Balance est atteinte. (Un pourcentage variable serai un plus)

    Code
    //+------------------------------------------------------------------+ //| aRka3579 | //+------------------------------------------------------------------+ #property copyright "01 JANVIER 2023 aRka3579" #property version "1.00" extern string Name_EA = "My EA - Hedge System"; extern int Magic = 1; extern bool StrictEntry = true; extern bool Power_ON = true; extern double Martingale_X = 5; extern bool MICLOT_ON = false; extern double MicLot = 0.01; extern double TP_in_money = 0.25; extern int SL_ATR = 50; extern int Open_Bk = 3; extern int Max_order = 666; //Variabel Global int OrderOpRetry=5; double slb,tpb,sls,tps,pt; int ras,wt,wk,ticketb,tickets; double last_profit, last_lot, profitnow; int last_tip; double profit; bool clear; bool EAon(){ bool eaon = false; if(Power_ON) eaon = true; return(eaon);} //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- if(Digits==3 || Digits==5) pt=10*Point; else pt=Point; //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //+------------------------------------------------------------------+ // Martingale (double Martingale) //+------------------------------------------------------------------+ // Martingale %R double Lot1 = MicLot; if( OrdersTotal() == 0 && OrdersHistoryTotal() == 0) Lot1 = MicLot; else if( OrdersTotal() == 0&& OrdersHistoryTotal() > 0 ) last_history_profit(); if( last_profit < 0 ) Lot1 = Martingale_X*last_lot; if( last_profit > 0 ) Lot1 = MicLot; if(TP_in_money<=money()) closeall(); //---- double rhigh = iHigh(Symbol(),0,iHighest(Symbol(), 0, MODE_HIGH, Open_Bk,1+1)); double rlow = iLow(Symbol(),0,iLowest(Symbol(), 0, MODE_LOW, Open_Bk, 1+1)); double CLOSE = iClose(Symbol(),0, 1); double HIGH = iHigh(Symbol(),0, 1); double LOW = iLow(Symbol(),0, 1); int signal; if(((CLOSE > rhigh && 1 > 0) || (HIGH > rhigh)) && StrictEntry == true) signal=1;// open buy if(((CLOSE < rlow && 1 > 0) || (LOW < rlow)) && StrictEntry == true) signal=2;// open sell { if(SL_ATR==0)slb=0;else slb=Close[0]-iATR(NULL,PERIOD_CURRENT,14,0)*SL_ATR; if(SL_ATR==0)sls=0;else sls=Close[0]+iATR(NULL,PERIOD_CURRENT,14,0)*SL_ATR; if(totalorder(0)<Max_order && EAon() && signal==1 && wt!=Time[0]) { ticketb=OrderSend(Symbol(),OP_BUY,Lot1,Ask,3,slb,tpb,"_%Open_B_"+Magic,Magic,0,Blue); if(ticketb>0) wt=Time[0]; } if(totalorder(1)<Max_order && EAon() && signal==2 && wk!=Time[0]) { tickets=OrderSend(Symbol(),OP_SELL,Lot1,Bid,3,sls,tps,"_Open_S_"+Magic,Magic,0,Red); if(tickets>0) wk=Time[0]; ; } } //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int totalorder(int tipe) { int total=0; for(int i=0; i<OrdersTotal(); i++) { if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic || OrderType()!=tipe) continue; total++; } return(total); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void closeall() { for(int i=OrdersTotal()-1; i>=0; i--) { if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue; if(OrderType()>1) ras=OrderDelete(OrderTicket()); else { if(OrderType()==0) ras=OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); else ras=OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double money() { double dp=0; int i; for(i=0; i<OrdersTotal(); i++) { if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue; dp+=OrderProfit(); } return(dp); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ // Martingale //+------------------------------------------------------------------+ double last_history_profit() { double cpte_profit = 0; //int Magik_No = -1; if( OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY) ) { if( OrderMagicNumber() == Magic ) { last_profit = OrderProfit(); last_lot = OrderLots(); last_tip = OrderType(); } } return(0); }
  • kaliloup

    Bonjour, si j'ai bien compris...
    Code
    #property copyright "01 JANVIER 2023 aRka3579" #property version "1.00" extern string Name_EA = "My EA - Hedge System"; extern int Magic = 1; extern bool StrictEntry = true; extern bool Power_ON = true; extern double Martingale_X = 5; extern bool MICLOT_ON = false; extern double MicLot = 0.01; extern double TP_in_money = 0.25; extern int SL_ATR = 50; extern int Open_Bk = 3; extern int Max_order = 666; extern int PourcentMarge = 50; extern bool InfoCompte = true; //Variabel Global int OrderOpRetry=5; double slb,tpb,sls,tps,pt; int ras,wt,wk,ticketb,tickets; double last_profit, last_lot, profitnow; int last_tip; double profit; bool clear; bool EAon(){ bool eaon = false; if(Power_ON) eaon = true; return(eaon);} //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- if(Digits==3 || Digits==5) pt=10*Point; else pt=Point; //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { if(InfoCompte==true) { Comment( "\n\nAccount information ", "\nCompteForex: ",AccountServer(),"\n", "------------------------------------------------","\n", "Server Time: ",Hour(),":",Minute(),":",Seconds(),"\n", "Account Equity: ",AccountEquity(),"\n", "Account Balance: ", AccountBalance(),"\n", "Available Margin: ",NormalizeDouble(AccountFreeMargin(),2),"\n", "Open Positions: ",Symbol()," * ",OrdersTotal(),"\n", "------------------------------------------------","\n", "------------------------------------------------","\n" ); } //+------------------------------------------------------------------+ // Martingale (double Martingale) //+------------------------------------------------------------------+ // Martingale %R double Lot1 = MicLot; if( OrdersTotal() == 0 && OrdersHistoryTotal() == 0) Lot1 = MicLot; else if( OrdersTotal() == 0&& OrdersHistoryTotal() > 0 ) last_history_profit(); if( last_profit < 0 ) Lot1 = Martingale_X*last_lot; if( last_profit > 0 ) Lot1 = MicLot; if(TP_in_money<=money()) closeall(); //---- double rhigh = iHigh(Symbol(),0,iHighest(Symbol(), 0, MODE_HIGH, Open_Bk,1+1)); double rlow = iLow(Symbol(),0,iLowest(Symbol(), 0, MODE_LOW, Open_Bk, 1+1)); double CLOSE = iClose(Symbol(),0, 1); double HIGH = iHigh(Symbol(),0, 1); double LOW = iLow(Symbol(),0, 1); int signal; if(((CLOSE > rhigh && 1 > 0) || (HIGH > rhigh)) && StrictEntry == true &&((PourcentMarge*AccountBalance()/100)<NormalizeDouble(AccountFreeMargin(),2))) signal=1;// open buy if(((CLOSE < rlow && 1 > 0) || (LOW < rlow)) && StrictEntry == true &&((PourcentMarge*AccountBalance()/100)<NormalizeDouble(AccountFreeMargin(),2))) signal=2;// open sell { if(SL_ATR==0)slb=0;else slb=Close[0]-iATR(NULL,PERIOD_CURRENT,14,0)*SL_ATR; if(SL_ATR==0)sls=0;else sls=Close[0]+iATR(NULL,PERIOD_CURRENT,14,0)*SL_ATR; if(totalorder(0)<Max_order && EAon() && signal==1 && wt!=Time[0]) { ticketb=OrderSend(Symbol(),OP_BUY,Lot1,Ask,3,slb,tpb,"_%Open_B_"+Magic,Magic,0,Blue); if(ticketb>0) wt=Time[0]; } if(totalorder(1)<Max_order && EAon() && signal==2 && wk!=Time[0]) { tickets=OrderSend(Symbol(),OP_SELL,Lot1,Bid,3,sls,tps,"_Open_S_"+Magic,Magic,0,Red); if(tickets>0) wk=Time[0]; ; } } //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int totalorder(int tipe) { int total=0; for(int i=0; i<OrdersTotal(); i++) { if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic || OrderType()!=tipe) continue; total++; } return(total); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void closeall() { for(int i=OrdersTotal()-1; i>=0; i--) { if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue; if(OrderType()>1) ras=OrderDelete(OrderTicket()); else { if(OrderType()==0) ras=OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); else ras=OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double money() { double dp=0; int i; for(i=0; i<OrdersTotal(); i++) { if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue; dp+=OrderProfit(); } return(dp); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ // Martingale //+------------------------------------------------------------------+ double last_history_profit() { double cpte_profit = 0; //int Magik_No = -1; if( OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY) ) { if( OrderMagicNumber() == Magic ) { last_profit = OrderProfit(); last_lot = OrderLots(); last_tip = OrderType(); } } return(0); }
  • arka3579 — en réponse à kaliloup dans son message #128267

    Bonjour a toi. Tout mes vœux de bonheur pour cette nouvelle année.
    Tes lignes de codes semble correspondre a ma demande.
    Je vais vérifier cela en compte démo.

    Merci pour le temps que tu as pris pour cela.

    Yohan.
  • kaliloup

    Merci, meilleur vœux à toi aussi. Pas de souci ca n'a pris que quelques minutes.