![Tuto 001 | Comment coder un robot de trading en MQL5 pour MT5 Tuto 001 | Comment coder un robot de trading en MQL5 pour MT5](https://c.mql5.com/36/69/tuto-001-comment-coder-un-robot.jpg)
- 2020.11.05
- www.youtube.com
C’est un livre assez connu, plutôt bon et complet. Toutefois, je pense qu’il n’est pas nécessaire pour bien commencer, tu trouveras facilement énormément de ressources sur le forum et dans la documentation !
Merci à toi, où je peux trouver sur le site internet officiel des exemples simple de robot de trading avec explication si possible, ça va peut être aussi m'aider ☺️
Oui, tu peux jeter un œil à la section "Articles", mais surtout la section "Codebase" (bases de code) si tu souhaites avoir des exemples.
Hello tout le monde
@ J M
J'ai retaper le code du toutou numéro deux et trois et le voici en résumé sur les commentaires, je suis pendant une erreur : "Envoi OrderSend erreur 4756", savez-vous d'où ça peut provenir ?
//+------------------------------------------------------------------+ //| Tuto02.mq5 | //| Copyright 2023, MetaQuotes Ltd. | //| https://www.Google.com | //+------------------------------------------------------------------+ #property copyright "Hello ZeroCafeine" #property link "www.Google.com" #property version "1.00" #property description "Mon 1er EA de Trading" input group "Moy.Mobiles" input int moyMobRapide = 20; input int moyMobLente = 200; input group "Stop Loss / Take Profit" input int valeurSL = 100; input int valeurTP = 200; input group "Numéro Série MGICMA" input int nombreMagique = 22052023; #define MAGICMA nombreMagique bool signalAchat = false; bool signalVente = false; double prixAsk; double prixBid; double spread; double valeurPoint; long decimales; double volumeMin; double volumeMax; double capitalDebutSession; int indicMmLente; int indicMmRapide; //+------------------------------------------------------------------+ //| OnInit() event handler | //+------------------------------------------------------------------+ int OnInit() { valeurPoint = SymbolInfoDouble (Symbol(), SYMBOL_POINT); decimales = SymbolInfoInteger(Symbol(), SYMBOL_DIGITS); volumeMin = SymbolInfoDouble (Symbol(), SYMBOL_VOLUME_MIN); volumeMax = SymbolInfoDouble (Symbol(), SYMBOL_VOLUME_MAX); capitalDebutSession = AccountInfoDouble(ACCOUNT_BALANCE); indicMmLente = iMA(_Symbol,_Period, moyMobLente, 1, MODE_SMA, PRICE_CLOSE); indicMmRapide = iMA(_Symbol,_Period, moyMobRapide, 1, MODE_SMA, PRICE_CLOSE); if(indicMmLente == INVALID_HANDLE || indicMmRapide == INVALID_HANDLE) { printf("Erreur de création des buffers des Moyennes Mobiles"); return(INIT_FAILED); } printf("Initialisation du robot effectuée avec succés"); Print("indicMmRapide : ", indicMmRapide, " / indicMmLente : ", indicMmLente); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| OnTick() event handler | //+------------------------------------------------------------------+ void OnTick() { prixAsk = SymbolInfoDouble(Symbol(), SYMBOL_ASK); prixBid = SymbolInfoDouble(Symbol(), SYMBOL_BID); spread = prixAsk - prixBid; for(int a=0; a < PositionsTotal(); a++) { ulong ordre = PositionGetTicket(a); if(PositionGetInteger(POSITION_MAGIC) == MAGICMA) { if(testerSignalCloture() == true) cloturer(ordre); } } if(testerPremierTick() == false) return; if(testerSignalAchat() == true && PositionsTotal() < 1) acheter(); else { if(testerSignalVente() == true && PositionsTotal() < 1 ) vendre(); } double profit = AccountInfoDouble(ACCOUNT_BALANCE) - capitalDebutSession; string ligne1 = "Spread = " + DoubleToString(spread,decimales); string ligne2 = "Point = " + DoubleToString(valeurPoint,decimales); string ligne3 = "Profit = " + DoubleToString(profit,2) + "€"; Comment(ligne1 + "\n" + ligne2 + "\n" + ligne3); } //+------------------------------------------------------------------+ //| My Fonctions | //+------------------------------------------------------------------+ bool testerSignalCloture() { return false; } void cloturer(long ticket) { } bool testerPremierTick() { MqlRates bufferPrix[2]; int nbreBougies = CopyRates(_Symbol, _Period, 0, 2, bufferPrix); if(nbreBougies == 2 && bufferPrix[1].tick_volume == 1) {return true; } return false; } bool testerSignalAchat() { MqlRates prix[5]; int nbreBougies = CopyRates(_Symbol, _Period, 0, 5, prix); if(nbreBougies != 5) { Print("Erreur : sur la Récupération Tableau de bougie"); return false; } double tableauMmRapide[5]; if(CopyBuffer(indicMmRapide, 0, 0, 5, tableauMmRapide) != 5) { Print("Erreur : Pas de donnée de Moyenne Mobile Rapide"); return false; } double tableauMmLente[5]; if(CopyBuffer(indicMmLente, 0, 0, 5, tableauMmLente) != 5) { Print("Erreur : Pas de donnée de Moyenne Mobile Lente"); return false; } if( tableauMmLente[3] > tableauMmLente[0] && tableauMmRapide[3] > tableauMmRapide[0] && prix[3].close > tableauMmRapide[3] && prix[3].open > tableauMmRapide[3]) { return true; } return false; } void acheter() { double prixSL = calculerSLAchat(); double prixTP = calculerTPAchat(); MqlTradeRequest parametresOrdre={}; MqlTradeResult resultat={0}; parametresOrdre.action = TRADE_ACTION_DEAL; parametresOrdre.symbol = Symbol(); parametresOrdre.volume = 0.1; parametresOrdre.type = ORDER_TYPE_BUY; parametresOrdre.price = prixAsk; parametresOrdre.deviation = 5; parametresOrdre.magic = MAGICMA; parametresOrdre.sl = prixSL; parametresOrdre.tp = prixTP; bool envoi = false; int essais = 0; while(envoi == false && essais <= 3) { envoi = OrderSend(parametresOrdre,resultat); if(envoi == false) { PrintFormat("Envoi OrderSend erreur %d", GetLastError()); essais++; } } } bool testerSignalVente() { MqlRates prix[5]; int nbreBougies = CopyRates(_Symbol, _Period, 0, 5, prix); if(nbreBougies != 5) { Print("Erreur : sur la Récupération Tableau de bougie"); return false; } double tableauMmRapide[5]; if(CopyBuffer(indicMmRapide, 0, 0, 5, tableauMmRapide) != 5) { Print("Erreur : Pas de donnée de Moyenne Mobile Rapide"); return false; } double tableauMmLente[5]; if(CopyBuffer(indicMmLente, 0, 0, 5, tableauMmLente) != 5) { Print("Erreur : Pas de donnée de Moyenne Mobile Lente"); return false; } if( tableauMmLente[3] < tableauMmLente[0] && tableauMmRapide[3] < tableauMmRapide[0] && prix[3].open > tableauMmRapide[3] && prix[3].close < tableauMmRapide[3]) { return true; } return false; } void vendre() { double prixSL = calculerSLVente(); double prixTP = calculerTPVente(); MqlTradeRequest parametresOrdre={}; MqlTradeResult resultat{0}; parametresOrdre.action = TRADE_ACTION_DEAL; parametresOrdre.symbol = Symbol(); parametresOrdre.volume = 0.1; parametresOrdre.type = ORDER_TYPE_SELL; parametresOrdre.price = prixAsk; parametresOrdre.deviation = 5; parametresOrdre.magic = MAGICMA; parametresOrdre.sl = prixSL; parametresOrdre.tp = prixTP; bool envoi = false; int essais = 0; while(envoi == false && essais <= 3) { envoi = OrderSend(parametresOrdre, resultat); if(envoi == false) { PrintFormat("Envoi OrderSend erreur %d", GetLastError()); } } } double calculerSLAchat() { return prixAsk - (valeurSL * valeurPoint); } double calculerSLVente() { return prixBid + (valeurSL * valeurPoint); } double calculerTPAchat() { return prixAsk + (valeurSL * valeurPoint); } double calculerTPVente() { return prixBid - (valeurSL * valeurPoint); }
Bien à vous,
ZeroCafeine
![J M J M](https://c.mql5.com/36/69/j-m__1.png)
Hello tout le monde
@ J M
J'ai retaper le code du toutou numéro deux et trois et le voici en résumé sur les commentaires, je suis pendant une erreur : "Envoi OrderSend erreur 4756", savez-vous d'où ça peut provenir ?
Bien à vous,
ZeroCafeine
Je te remercie infiniment, je sais qu'il faut passer par la création d'un objet avec la classe CTrade,
Mais dans un souci d'amélioration et de savoir ce que je suis en train de faire avec mon argent et surtout d'essayer de gagner ma vie avec ça alors je vais pas me contenter juste de l'utiliser mais de bien voir ce qu'il y a à l'intérieur et ça me permettra aussi de me remettre en programmation avec ce fabuleux langage MQL5,
Si tu penses qu'il n'est pas trop compliqué de corriger l'erreur de la roquette alors ça serait sympa sinon ne t'embête pas j'y reviendrai quand j'aurai testé et trouver ce qu'il ne va pas 😊
encore merci à toi @ Zaky Hamdoun
![Zaky Hamdoun Zaky Hamdoun](https://c.mql5.com/36/69/zaky-hamdoun__1.jpg)
Je te remercie infiniment, je sais qu'il faut passer par la création d'un objet avec la classe CTrade,
Mais dans un souci d'amélioration et de savoir ce que je suis en train de faire avec mon argent et surtout d'essayer de gagner ma vie avec ça alors je vais pas me contenter juste de l'utiliser mais de bien voir ce qu'il y a à l'intérieur et ça me permettra aussi de me remettre en programmation avec ce fabuleux langage MQL5,
Si tu penses qu'il n'est pas trop compliqué de corriger l'erreur de la roquette alors ça serait sympa sinon ne t'embête pas j'y reviendrai quand j'aurai testé et trouver ce qu'il ne va pas 😊
encore merci à toi @ Zaky Hamdoun
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- 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
Bonjour tout le monde, j'espère que vous allez bien 😊
Auriez-vous de bons liens tutoriel vidéo ou site web(pas la doc officiel), idéalement en français sinon anglais en deuxième choix,
J'ai trouvé cette chaîne YouTube française pour débutants qui a l'air sympa et j'ai l'impression qu'il n'y a plus de mises à jour mais c'est déjà très bien pour moi :
Il y a quelques années j'ai déjà programmé (appris par moi-même) les languages : HTML, PHP, CSS, SQL, AJAX, j'ai tout abandonné depuis longtemps car je n'avais plus l'utilité,
Aujourd'hui je souhaite programmer sure le language MQL5
Il avance pour toutes vos lumières 😊