Merci de poster en français sur ce forum.
Ce code n'est pas du mql5 mais du mql4. Il faut utiliser la section MT4/mql4 du forum si vous voulez des réponses.
Vous dites ne pas trouver les erreurs, mais quel est le problème avec ce code ? Quelles erreurs ?
Merci de poster en français sur ce forum.
Ce code n'est pas du mql5 mais du mql4. Il faut utiliser la section MT4/mql4 du forum si vous voulez des réponses.
Vous dites ne pas trouver les erreurs, mais quel est le problème avec ce code ? Quelles erreurs ?
Merci de votre reponse.
Je suis sur sur MT5 j'ai essayé de coder en MQL5 malheuresement je suis très loin d'être un expert en code, est ce que vous savez comment je pourrais convertir ce code en mql5 ?
Bonjour, vous avez mélangé du mql4 et mql5 dans votre code j'ai l'impression.
Vous vous êtes compliqué la tâche selon moi! Il faudrait limite tout reprendre. Avant tout générez un Expert simple sans rien.
//+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+
Ensuite commencez dans l'ordre avec ce dont vous avez besoin.
Par Exemple pour vos Jours, mois, minutes...
input bool Tradelundi=true; input bool TradeMardi=true; input bool TradeMercredi=true; input bool TradeJeudi=true; input bool TradeVendredi=true; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- //par exemple pour vos horaire de commerce MqlDateTime dtpresent; TimeToStruct(iTime(_Symbol,_Period,0),dtpresent); if(dtpresent.hour>=15 && dtpresent.hour<22) { Print("ok nous sommes dans les bonnes heures de trade"); } //Verification si on doit trader aujourd'hui bool JourOk=false; if(dtpresent.day_of_week==1&&Tradelundi==true){JourOk=true;} if(dtpresent.day_of_week==2&&TradeMardi==true){JourOk=true;} if(dtpresent.day_of_week==3&&TradeMercredi==true){JourOk=true;} if(dtpresent.day_of_week==4&&TradeJeudi==true){JourOk=true;} if(dtpresent.day_of_week==5&&TradeVendredi==true){JourOk=true;} if(JourOk==true&&dtpresent.hour>=15 && dtpresent.hour<22) { Print("ok nous sommes dans les bonnes heures et une bonne journée pour le trade"); } } //+------------------------------------------------------------------+
Ensuite il vous faudra forcément l'indicateur de support et résistance et pourquoi pas celui des points pivots.
Quand vous les aurez trouvés, je vous montrerais comment vous pourrez les utiliser pour enfin ouvrir des positions.
Je viens de remarquer les calculs pour les points pivots.
h4PivotPoint = (High(0, PERIOD_H4) + Low(0, PERIOD_H4) + Close(0, PERIOD_H4)) / 3;
Donc vous calculez vos point pivots sur quelle bougie ? La précédente ? (plus haut+Plusbas+close) tout ceci divisé par 3 .
Il faudra donc faire:
input bool Tradelundi=true; input bool TradeMardi=true; input bool TradeMercredi=true; input bool TradeJeudi=true; input bool TradeVendredi=true; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- double PlusBasH4=iLow(_Symbol,PERIOD_H4,1); double PlusHautH4=iHigh(_Symbol,PERIOD_H4,1); double ClotureH4=iClose(_Symbol,PERIOD_H4,1); double PlusBasD1=iLow(_Symbol,PERIOD_D1,1); double PlusHautD1=iHigh(_Symbol,PERIOD_D1,1); double ClotureD1=iClose(_Symbol,PERIOD_D1,1); double PlusBasW1=iLow(_Symbol,PERIOD_W1,1); double PlusHautW1=iHigh(_Symbol,PERIOD_W1,1); double ClotureW1=iClose(_Symbol,PERIOD_W1,1); double PivotH4=(PlusBasH4+PlusBasH4+ClotureH4)/3; double PivotD1=(PlusBasD1+PlusBasD1+ClotureD1)/3; double PivotW1=(PlusBasW1+PlusBasW1+ClotureW1)/3; //par exemple pour vos horaire de commerce MqlDateTime dtpresent; TimeToStruct(iTime(_Symbol,_Period,0),dtpresent); if(dtpresent.hour>=15 && dtpresent.hour<22) { Print("ok nous sommes dans les bonnes heures de trade"); } //Verification si on doit trader aujourd'hui bool JourOk=false; if(dtpresent.day_of_week==1&&Tradelundi==true){JourOk=true;} if(dtpresent.day_of_week==2&&TradeMardi==true){JourOk=true;} if(dtpresent.day_of_week==3&&TradeMercredi==true){JourOk=true;} if(dtpresent.day_of_week==4&&TradeJeudi==true){JourOk=true;} if(dtpresent.day_of_week==5&&TradeVendredi==true){JourOk=true;} if(JourOk==true&&dtpresent.hour>=15 && dtpresent.hour<22) { Print("ok nous sommes dans les bonnes heures et une bonne journée pour le trade"); } } //+------------------------------------------------------------------+
Je n'ai pas testé mais cela ressemblerait à ceci.
Ensuite il vous faudra forcément l'indicateur de support et résistance et pourquoi pas celui des points pivots.
Quand vous les aurez trouvés, je vous montrerais comment vous pourrez les utiliser pour enfin ouvrir des positions.
Je viens de remarquer les calculs pour les points pivots.
Donc vous calculez vos point pivots sur quelle bougie ? La précédente ? (plus haut+Plusbas+close) tout ceci divisé par 3 .
Il faudra donc faire:
Je n'ai pas testé mais cela ressemblerait à ceci.
Merci beaucoup Alain Michel ! j'ai passé plusieurs mois à faire des nuits blanches à essayer d'apprendre le MQL5 et de creer cet algorythme, ça me fais plaisir de voir que des gens qui partagent la même passion que moi sont prêt à concacrer du temp pour aider.
Votre code marche parfaitement bien ! Comment pourrais-je, chaque fois qu’un de ces niveaux est atteint ouvrir une position dans la direction opposée des point pivot ou support resistance, avec un TP 2 points et un SL de 10 points.
Par exemple si le cours touche un s1H4 à la hausse, l'algorythme ouvre une position vendeuse.
Je pause beaucoup de question car je vois que vous avez fais en quelque minutes ce que j'ai mis plusieurs mois à faire...
De rien, j'ai un peu de temps en ce moment et comme vous l'avez si bien dit, c'est une passion. J'ai quelques questions en plus. Nous allons commencer par prendre un achat ou une vente avec seulement les point pivots calculés.
Tenez moi informé de la façon dont vous voudriez calculer vos support ou résistances (avec indicateur(façon simple) ou en le codant vous même (plus dur mais entièrement personnalisable et gratifiant).
Vous avez écrit "avec un TP 2 points et un SL de 10 points". Un take profit à 2 pips ? Un stop à 10? Il faut savoir que les brokers on souvent des minimum concernant les stop et take (corrigez moi si je me trompe mais j'ai souvent vu un minimum de 20 pips).
Malgré cela, c'est tout à fait possible de fermer une position à partir de n'importe quelle perte ou gain( c'est une autre technique qui demande par contre que votre expert reste connecté pour fermer, si il y a coupure il ne fermera pas).
Ensuite vous écrivez " Par exemple si le cours touche un s1H4 à la hausse, l'algorythme ouvre une position vendeuse. " s1H4 ? Le support 1 du H4 ? Si c'est le cas, un support est censé rebondir à la hausse et une résistance c'est l'inverse. ou je comprend mal ou vous allez contre tendance!
Ensuite nous pouvons demander à l'expert d'analyser les choses uniquement à l'ouverture d'une bougie ou à chaque tick. Dans votre cas (puisque vous pouvez utiliser votre expert en n'importe quel TimeFrime, vu que les calculs se feront quand même) je pense qu'il serait judicieux de le faire
à chaque ouverture (ce qui nous ferais calculer comme ceci = Si ouverture au dessus ou en dessous de (pointPivotH4 ou pointpivotD1 ou pointPivotW1)) alors ouverture d'achat/vente).
Vous gagnerais en vitesse lors des tests, sinon les calcul seront : Si prix dernier tick inferieur/superieur à (pointPivotH4 ou pointpivotD1 ou pointPivotW1) et prix tick actuel inferieur/superieur à (pointPivotH4 ou pointpivotD1 ou pointPivotW1) alors achat/vente.
Pour finir, nous allons voir pas mal de chose, alors il faudra être attentif et sérieux si possible.
Commencez à analyser ce code, si vous bossez un samedi soir. Il devrait faire les calculs à chaque tick, si le cour passe une de vos barrières (PivotH4, D1 ou W1), il devrait prendre une position inverse (si j'ai bien compris).
//Avant toute chose on ajoute les includes qui vont servirent #include <Trade\OrderInfo.mqh> #include <Trade\PositionInfo.mqh> #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh> #include <Trade\AccountInfo.mqh> COrderInfo m_orderinfo; CPositionInfo m_position; CTrade m_trade; CSymbolInfo m_symbol; CAccountInfo m_account; //On defini un Magic Number #define _Magic 11032023 //On ajoute le lot, le stop, le take profit et autres.... input double _Lots=0.01;//Taille lot input int _StopLoss=20;//Stop loss en pips, si 0 est désactivé input int _TakeProfit=20;//Take profit, si 0 est désactivé input int MaxOrder=1;//Maximum d'ordre en même temps input bool Tradelundi=true; input bool TradeMardi=true; input bool TradeMercredi=true; input bool TradeJeudi=true; input bool TradeVendredi=true; int digits_adjust=1;//Pour ajuster après la virgule. int StopLoss, TakeProfit, Magic; double PrixSauv;//Sauvegarde du prix //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- if(Digits()==3 || Digits()==5){digits_adjust=10;}//Si 3 ou 5 chiffres après la virgule Magic=_Magic; m_trade.SetExpertMagicNumber(Magic); StopLoss=_StopLoss*digits_adjust; TakeProfit=_TakeProfit*digits_adjust; PrixSauv=SymbolInfoDouble(_Symbol, SYMBOL_BID); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- double PlusBasH4=iLow(_Symbol,PERIOD_H4,1); double PlusHautH4=iHigh(_Symbol,PERIOD_H4,1); double ClotureH4=iClose(_Symbol,PERIOD_H4,1); double PlusBasD1=iLow(_Symbol,PERIOD_D1,1); double PlusHautD1=iHigh(_Symbol,PERIOD_D1,1); double ClotureD1=iClose(_Symbol,PERIOD_D1,1); double PlusBasW1=iLow(_Symbol,PERIOD_W1,1); double PlusHautW1=iHigh(_Symbol,PERIOD_W1,1); double ClotureW1=iClose(_Symbol,PERIOD_W1,1); double PivotH4=(PlusBasH4+PlusBasH4+ClotureH4)/3; double PivotD1=(PlusBasD1+PlusBasD1+ClotureD1)/3; double PivotW1=(PlusBasW1+PlusBasW1+ClotureW1)/3; bool TradeBuy=false, TradeSell=false; double PrixActuel=SymbolInfoDouble(_Symbol, SYMBOL_BID); if(PrixSauv!=PrixActuel) { if((PrixSauv<PivotH4 && PrixActuel>=PivotH4)||(PrixSauv<PivotD1 && PrixActuel>=PivotD1)||(PrixSauv<PivotW1 && PrixActuel>=PivotW1)) {TradeSell=true;} if((PrixSauv>PivotH4 && PrixActuel<=PivotH4)||(PrixSauv>PivotD1 && PrixActuel<=PivotD1)||(PrixSauv>PivotW1 && PrixActuel<=PivotW1)) {TradeBuy=true;} } //par exemple pour vos horaire de commerce MqlDateTime dtpresent; TimeToStruct(iTime(_Symbol,_Period,0),dtpresent); if(dtpresent.hour>=15 && dtpresent.hour<22&&PositionsTotal()<MaxOrder) { Print("ok nous sommes dans les bonnes heures de trade"); if(TradeBuy==true) { double SL,TP; int Ticket; double ask=SymbolInfoDouble(_Symbol, SYMBOL_ASK); if(StopLoss>0){SL=ask-StopLoss*Point();}else {SL=0;} if(TakeProfit>0){TP=ask+TakeProfit*Point();}else {TP=0;} Ticket=m_trade.Buy(_Lots,NULL,ask,SL,TP,_Magic); } if(TradeSell==true) { double SL,TP; int Ticket; double bid=SymbolInfoDouble(_Symbol, SYMBOL_BID); if(StopLoss>0){SL=bid+StopLoss*Point();}else {SL=0;} if(TakeProfit>0){TP=bid-TakeProfit*Point();}else {TP=0;} Ticket=m_trade.Sell(_Lots,NULL,bid,SL,TP,_Magic); } } //Verification si on doit trader aujourd'hui bool JourOk=false; if(dtpresent.day_of_week==1&&Tradelundi==true){JourOk=true;} if(dtpresent.day_of_week==2&&TradeMardi==true){JourOk=true;} if(dtpresent.day_of_week==3&&TradeMercredi==true){JourOk=true;} if(dtpresent.day_of_week==4&&TradeJeudi==true){JourOk=true;} if(dtpresent.day_of_week==5&&TradeVendredi==true){JourOk=true;} if(JourOk==true&&dtpresent.hour>=15 && dtpresent.hour<22) { Print("ok nous sommes dans les bonnes heures et une bonne journée pour le trade"); } } //+------------------------------------------------------------------+
Commencez à analyser ce code, si vous bossez un samedi soir. Il devrait faire les calculs à chaque tick, si le cour passe une de vos barrières (PivotH4, D1 ou W1), il devrait prendre une position inverse (si j'ai bien compris).
ALAIN MICHEL je vous ai envoyé un message en pv.
Oui l'expert traderait à contre tendance et sur les indices, j'aimerai que l'expert analyse les choses à chaque tick : si prix dernier tick inferieur/superieur à (pointPivotH4 ou pointpivotD1 ou pointPivotW1) et prix tick actuel inferieur/superieur à (pointPivotH4 ou pointpivotD1 ou pointPivotW1) alors achat/vente.
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
I know that among you there are people who have a lot of mastery of the mql5.
Thank you for your help.