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

Robot de trading

  • Furax

    Code
    //+------------------------------------------------------------------+ //| EOT v1.01| //| Settings by Furax | //| Copyright © 2010, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2010, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" // ---- extern bool autoTrading = true; // ---- bool CommentDaten = true; // ***************************************************** // manuelle Entries int OrderTyp = 0; // extern // 0=Long&Short, 1=Long, 2=Short; // Entries double shortEntry, longEntry, TakeProfit, StopLoss; extern int Risk = 1; // Entry-Range +/-50 Pips // was 1 //---- extern double Lots = 1; // was 0.1 // TakeProfit extern double OrderTP = 12; // 100 Pips extern double OrderSL = 200; //1000 double TP, SL; // Trading-Zeiten extern int Start_Std = 1; // 6 Uhr TradeBeginn dtsch. Zeit extern int Schluss = 22; // 11, 21, 22 oder / bis extern int Closing = 23; // 22:00 Uhr int ZD; // 1=WZ, 2=SZ Zeit-Differenz int inTime; // Tradingzeit extern int HoldingHours = 0; // Zeit-Differennz-Korrektur int Sommerzeit = 87; // DayOfYear Beginn Sommerzeit int Winterzeit = 297; // DayOfYear Beginn Winterzeit // ---- extern bool Rectangle = true; double dailyOpen, dailyHigh, dailyLow; // ---- extern string TRADING°TESTER ="=== oneTrade ==="; // ---- double clsBuyOrder, clsSellOrder; double opLongPos, opShortPos, shortTP, longTP; string OrderTxt, TxtTime, TxtEntry; color col1=Gray, col1a=Gray, col2=Gray, col2a=Gray, col3=Silver; int cnt, cntHistBuy, cntHistSell, cntOpPos, cntOpLong, cntOpShort; int i, Dig; // ---------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------- int init() { } //---------- int deinit() { Comment(""); ObjectDelete("bar0"); ObjectDelete("bar0_Label"); ObjectDelete("opShort"); ObjectDelete("opShort_Label"); ObjectDelete("opLong"); ObjectDelete("opLong_Label"); ObjectDelete("aktuell"); ObjectDelete("aktuell_Label"); ObjectDelete("longTP"); ObjectDelete("longTP_Label"); ObjectDelete("shortTP"); ObjectDelete("shortTP_Label"); ObjectDelete("RangeL"); ObjectDelete("RangeL_Label"); ObjectDelete("RangeS"); ObjectDelete("RangeS_Label"); ObjectDelete("Trend"); ObjectDelete("Trend_Label"); } //--------- int start() { //ZD=0; if(DayOfYear()>=Sommerzeit && DayOfYear()<=Winterzeit) ZD=2; else ZD=1; if(TimeHour(Time[0])<=5) { clsBuyOrder=0; clsSellOrder=0; } // ---- Tradingzeit 1=ja, 0=nein if(DayOfWeek()>0 && DayOfWeek()<=5 && TimeHour(Time[0])>=Start_Std-ZD && TimeHour(Time[0])< Schluss-ZD) inTime=1; else inTime=0; // ---- if(Close[0]>10) { Dig=2; } else if(Close[0]<10) { Dig=4; } // --- if(OrderTP!=0) TP=OrderTP*10; else TP=0; if(OrderSL!=0) SL=OrderSL*10; else SL=0; // ************************************************************************ // ********** Selektion ********** (Anfang) ********** Selektion ********** dailyHigh = iHigh(NULL,1618,0); // was 1440 dailyLow = iLow (NULL,1618,0); // was 1440 dailyOpen = iOpen(NULL,1618,0); // was 1440 // ********** Selektion ********** (Ende) ********** Selektion ********** // ************************************************************************ // -------------------------------------------------------------- // -------- bilanzierte u. offene Positionen ermitteln ---------- // -------------------------------------------------------------- int cnt = OrdersHistoryTotal(); // ---- History cntHistBuy=0; cntHistSell=0; for (i=0; i < cnt; i++) { if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue; if (TimeDayOfYear(OrderCloseTime()) == DayOfYear()) { if (OrderSymbol()==Symbol()) { if (OrderType()==OP_BUY) { clsBuyOrder = OrderOpenPrice(); cntHistBuy =cntHistBuy +1; } if (OrderType()==OP_SELL) { clsSellOrder = OrderOpenPrice(); cntHistSell=cntHistSell+1; } } } // TimeDayOfYear } // for(int // ---- Anzahl offene Positionen/Symbol cntOpPos=0; if(OrdersTotal()!=0) { for(cnt=0; cnt<OrdersTotal(); cnt++) { OrderSelect(cnt,SELECT_BY_POS); if((OrderType()==OP_SELL || OrderType()==OP_BUY) && OrderSymbol()==Symbol()) { cntOpPos=cntOpPos+1; } } // for(cnt } // if(OrdersTotal // ---- Anzahl offene Positionen/Typ cntOpLong=0; cntOpShort=0; for(cnt=0; cnt<OrdersTotal(); cnt++) { OrderSelect(cnt,SELECT_BY_POS); if(OrderType()==OP_BUY && OrderSymbol()==Symbol()) { cntOpLong=cntOpLong+1; } if(OrderType()==OP_SELL && OrderSymbol()==Symbol()) { cntOpShort=cntOpShort+1;} } // ---- Werte offener Positionen / shortEntry shortEntry=0; opShortPos=0; shortTP=0; opLongPos=0; longTP=0; // -- if(OrdersTotal()!=0) { for(cnt=0; cnt<OrdersTotal(); cnt++) { OrderSelect(cnt,SELECT_BY_POS); if(OrderType()==OP_SELL && OrderSymbol()==Symbol()) { opShortPos=OrderOpenPrice(); shortTP=(opShortPos-Ask)/Point; col1=Red; shortEntry=0; } if(OrderType()==OP_BUY && OrderSymbol()==Symbol()) { opLongPos=OrderOpenPrice(); longTP= (Bid-opLongPos)/Point; col2=SpringGreen; shortEntry=OrderOpenPrice(); } } // for(cnt } // if(OrdersTotal // ---- string BidTxt=DoubleToStr(Bid,Digits); string AskTxt=DoubleToStr(Ask,Digits); // ---- ObjectDelete("longTP"); ObjectDelete("longTP_Label"); ObjectDelete("shortTP"); ObjectDelete("shortTP_Label"); ObjectDelete("opLong"); ObjectDelete("opLong_Label"); ObjectDelete("opShort"); ObjectDelete("opShort_Label"); // -------------------------------------------- // ----------------- Objekte ------------------ // -------------------------------------------- if(opShortPos==0) {shortTP=0; col1=Gray; col1a=Gray;} else col1a=Silver; if(opLongPos==0) {longTP=0; col2=Gray; col2a=Gray;} else col2a=Silver; // ---- if(CommentDaten==true) { if(opShortPos!=0) { ObjectCreate("opShort", OBJ_LABEL, 0, 0, 0); ObjectSetText("opShort",DoubleToStr(opShortPos,Dig),9,"Tahoma", col1); ObjectSet("opShort", OBJPROP_CORNER, 0); ObjectSet("opShort", OBJPROP_XDISTANCE, 3); ObjectSet("opShort", OBJPROP_YDISTANCE, 11); ObjectCreate("shortTP", OBJ_LABEL, 0, 0, 0); ObjectSetText("shortTP","("+DoubleToStr(shortTP/10,0)+")",9,"Tahoma", col1a); ObjectSet("shortTP", OBJPROP_CORNER, 0); ObjectSet("shortTP", OBJPROP_XDISTANCE, 44); ObjectSet("shortTP", OBJPROP_YDISTANCE, 11); } if(opLongPos!=0) { ObjectCreate("opLong", OBJ_LABEL, 0, 0, 0); ObjectSetText("opLong",DoubleToStr(opLongPos,Dig),9,"Tahoma", col2); ObjectSet("opLong", OBJPROP_CORNER, 0); ObjectSet("opLong", OBJPROP_XDISTANCE, 85); ObjectSet("opLong", OBJPROP_YDISTANCE, 11); ObjectCreate("longTP", OBJ_LABEL, 0, 0, 0); ObjectSetText("longTP","("+DoubleToStr(longTP/10,0)+")",9,"Tahoma", col2a); ObjectSet("longTP", OBJPROP_CORNER, 0); ObjectSet("longTP", OBJPROP_XDISTANCE, 126); ObjectSet("longTP", OBJPROP_YDISTANCE, 11); } } // if(CommentDaten // ----------------------------------------------------- // ----------------- Text für Comment ------------------ // ----------------------------------------------------- // ---- Spread double spread=MarketInfo(Symbol(),MODE_SPREAD)/10; // ---- TxtTime if(autoTrading==false) TxtTime="Trading deaktiviert! ("+HoldingHours+" Std.)"; else if(TimeHour(Time[0])<=MathMax(Schluss,Closing)-ZD) { TxtTime=Start_Std+":00"+" bis "+Schluss+":00 / "+Closing+" Uhr ("+HoldingHours+" Std.)"; } else if(TimeHour(Time[0]) >MathMax(Schluss,Closing)-ZD) { TxtTime="DayTrading geschlossen bis "+Start_Std+":00 ("+HoldingHours+" Std.)"; } // ---- OrderTxt if(OrderTyp==1) OrderTxt=">>>>> Long <<<<< "; else if(OrderTyp==2) OrderTxt=">>>>> Short <<<<< "; else OrderTxt=""; // ---------------------------------------------- // ----------------- Comment -------------------- // ---------------------------------------------- if(CommentDaten==true) // "DayOfYear: "+DayOfYear()+"\n" + Comment( // Standard "\n"+"\n"+ // Extra s.Selektion **************************** //"O "+DoubleToStr(dailyOpen,Digits-1)+ //" H "+DoubleToStr(dailyHigh,Digits)+" L "+DoubleToStr(dailyLow,Digits)+ "\n"+ //"\n"+ // ********************************************** // Standard "Lots: "+DoubleToStr(Lots,1)+" "+ "Spread: "+DoubleToStr(spread,1)+" "+ "L/S: "+(cntHistBuy+cntOpLong)+"´"+(cntHistSell+cntOpShort)+"\n"+ "TP/SL: "+DoubleToStr(TP/10,0)+" / -"+DoubleToStr(SL/10,0)+ " op "+DoubleToStr(dailyOpen,Digits-1)+"\n"+ TxtTime+"\n"+ OrderTxt+"\n"+ "\n" ); // ---------------------------------------------- // --------------- Rectangle (Range) ------------ // ---------------------------------------------- double EntryL, topL, bottomL, EntryS, topS, bottomS; datetime EntryTimeL,EntryTimeS; color colRangeL=C'0,0,100', colRangeS=C'100,0,0'; // -- int cntRect; if(OrdersTotal()!=0) { for(cntRect=0; cntRect<OrdersTotal(); cntRect++) { OrderSelect(cntRect,SELECT_BY_POS); if( OrderType()==OP_SELL && OrderSymbol()==Symbol() ) { opShortPos=OrderOpenPrice(); shortTP=(opShortPos-Ask)/Point; } if( OrderType()==OP_BUY && OrderSymbol()==Symbol() ) { opLongPos=OrderOpenPrice(); longTP= (Bid-opLongPos)/Point; } } // for(cntRect=0; } // if(OrdersTotal()!=0) // -- ObjectDelete("RangeL"); ObjectDelete("RangeL_Label"); ObjectDelete("RangeS"); ObjectDelete("RangeS_Label"); // offene Orders prüfen ... int cnt0buy=0, cnt0sell=0 ; for (i=0; i<OrdersTotal(); i++) { if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { EntryL = OrderOpenPrice(); EntryTimeL = OrderOpenTime(); if(Rectangle==false) { // OrderTakeProfit()==0 topL = OrderOpenPrice(); bottomL = OrderOpenPrice()+30*Point; } else { topL = OrderTakeProfit(); bottomL = OrderOpenPrice(); } // ---- datetime leftL =EntryTimeL; datetime rightL =TimeCurrent(); // ---- ObjectCreate("RangeL",OBJ_RECTANGLE,0,leftL,topL,rightL,bottomL); ObjectSet("RangeL",OBJPROP_BACK,true); if(OrderTakeProfit()==0) ObjectSet("RangeL",OBJPROP_COLOR,Green); else ObjectSet("RangeL",OBJPROP_COLOR,colRangeL); } // if(OrderType // ---- if(OrderType()==OP_SELL && opShortPos!=0) { EntryS = OrderOpenPrice(); EntryTimeS = OrderOpenTime(); if(Rectangle==false) { // OrderTakeProfit()==0 topS = OrderOpenPrice(); bottomS = OrderOpenPrice()-30*Point; } else { topS = OrderOpenPrice(); bottomS = OrderTakeProfit(); } // ---- datetime leftS =EntryTimeS; datetime rightS =TimeCurrent(); // ---- ObjectCreate("RangeS",OBJ_RECTANGLE,0,leftS,topS,rightS,bottomS); ObjectSet("RangeS",OBJPROP_BACK,true); if(OrderTakeProfit()==0) ObjectSet("RangeS",OBJPROP_COLOR,Red); else ObjectSet("RangeS",OBJPROP_COLOR,colRangeS); } // if(OrderType } // if(OrderSymbol()==Symbol()) } // for(int // -------------------------------------------- // ---------------- OrderSend ----------------- // -------------------------------------------- dailyHigh = iHigh(NULL,1440,0); // was 1440 dailyLow = iLow(NULL,1440,0); // was 1440 dailyOpen = iOpen(NULL,1440,0); // was 1440 // ---- if ((Bid>dailyOpen && (dailyOpen-dailyLow)>Risk*10*Point) && cntOpPos<1 && cntHistBuy<1 && inTime==1) OrderSend(Symbol(),OP_BUY,Lots,Ask,0,0,0,"oneTrade Long",0,0); if ((Ask<dailyOpen && (dailyHigh-dailyOpen)>Risk*10*Point) && cntOpPos<1 && cntHistSell<1 && inTime==1) OrderSend(Symbol(),OP_SELL,Lots,Bid,0,0,0,"oneTrade Short",0,0); // ---- OrderClose for (cnt=0; cnt<OrdersTotal(); cnt++) { OrderSelect(cnt,SELECT_BY_POS); if (OrderType()==OP_BUY && Hour()>=Closing-ZD) OrderClose(OrderTicket(),OrderLots(),Bid,0); if (OrderType()==OP_SELL && Hour()>=Closing-ZD) OrderClose(OrderTicket(),OrderLots(),Ask,0); } // ---------------------------------------------- // ------------- OrderModify TP u. SL ----------- // ---------------------------------------------- if( cntOpPos!=0 && TP!=0 && SL!=0 && autoTrading==true) { TakeProfit=TP*Point; StopLoss=SL*Point; for(cnt=0; cnt<OrdersTotal(); cnt++) { OrderSelect(cnt,SELECT_BY_POS); if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderTakeProfit()==0 && OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss,OrderOpenPrice()+TakeProfit,0); } // ---- if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderTakeProfit()==0 && OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss,OrderOpenPrice()-TakeProfit,0); } } // for(cnt=0 } // if(TP // ---------------------------------------------- // --------- DayTrade-Closing ------------------- // ---------------------------------------------- if( cntOpPos!=0) { for(cnt=0; cnt<OrdersTotal(); cnt++) { OrderSelect(cnt,SELECT_BY_POS); if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && (Closing!=0 && TimeHour(Time[0])>=Closing-ZD) || (HoldingHours!=0 && TimeCurrent()-OrderOpenTime()>=HoldingHours*3600) ) { if(Bid<OrderOpenPrice()) OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice(),0); if(Bid>OrderOpenPrice()) OrderClose(OrderTicket(),Lots,Bid,0); } // ---- if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && (Closing!=0 && TimeHour(Time[0])>=Closing-ZD) || (HoldingHours!=0 && TimeCurrent()-OrderOpenTime()>=HoldingHours*3600) ) { if(Ask>OrderOpenPrice()) OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice(),0); if(Ask<OrderOpenPrice()) OrderClose(OrderTicket(),Lots,Ask,0); } } // for(cnt=0; } // if(Closing!=0 // ---- } // start return(0); //+------------------------------------------------------------------+
  • furynick

    Sank you mister Furax, je teste ça dès que ma VM est prête.
  • falcon1733

    merci je lance le test
  • draven

    Hello à tous,
    Voici ma nouvelle version :

    http://www.mediafire.com/?x0wle3zmraxmghp

    [Paramètres]
    MPType (Manager de Position):
    //Prise de positions risqués
    //1 = Minimum
    //2 = Moyen
    //3 = Max

    MAType (Manager D'Argent)
    //1=Mode Risque Faible
    //2=Mode Risque Moyenne
    //3=Mode Risque Exponentiel
    [-----------]

    Veuillez laisser le graphique sur la plateforme MT4 en "H1"(Meilleur calcul des lignes fibo)

    Je tiens à vous rappeler, les robots ne sont pas une science exact, ils n'intègrent pas les décisions évènementiel ayant un impact sur la bourse.

    Bon test à vous tous !
  • furynick

    Le 1er trade est en cours.

    Est-ce que le robot fonctionne sur toutes les paires, seulement certaines ou juste une en particulier ?
  • draven

    Le robot fonctionne sur toutes les paires.
  • falcon1733

    merci draven j'ai une question a te poser j'rai un bon robot et une idee d'optimisation maleureusement je suis un codeur debutant et je manque de savoir faire serait tu ok pour m'aider sachant que le bot et vraieme,nt pas mal il lui manque juste une condition suplementaire pour la prise de decision et comme tu as l'air de toucher ta bille en prog
  • draven

    @falcon1733

    Explique moi ca par mail :
    [email protected]
  • falcon1733

    ok
  • furynick

    @Furax : Toutes les positions ouvertes (8) étaient perdantes, toutes clôturées manuellement après 30mn, perte 680€/3000.

    Depuis, plus aucun trade ne se lance, même après redémarrage de MT4. Le robot de Draven ne fonctionne pas non plus (aucune ouverture).

    J'ai raté quelque chose ?
  • Solenn

    Bonjour,

    Merci Furax pour ton post, et tes mises à jour.

    J'utilise le robot en mode semi automatique, et après fermeture de certains trades gagnants, il ne réouvre aucune position, même après redémarrage de MT4... Je ne sais pas si c'est ma config ou un "bug"
  • jvalau

    Lorsque certains membres veulent se communiquer leurs adresses mail, passez par les modos, nous vous communiquerons vos adresses respectives.

    Cela evite de laisser des adresses mail sur le forum qui, pour rappel, est publique.

    Ou faites comme draven et utilisez une boite mail
    temporaire et anonyme.
  • John-Arnold

    Bonjour,
    Merci à Furax et à Draven pour toutes leurs contributions sur Forexagone.
    J'ai testé le nouveau code de Furax sur la paire EUR/USD depuis ce matin, aucun trade.
    Testé aussi sur USD/JPY, un trade d'effectué, fermé manuellement, depuis plus rien......
  • Furax

    Il n'a jamais été dit qu'il fallait obligatoirement que le robot ouvre une ou plusieurs positions... Parfois il a besoin de respirer...:)

    Griller 8 positions en 30 minutes... je ne comprends pas...

    Modifiez le T/P de 12 à 15, c'est préférable.
    J'ai mis le T/P à 12 au dernier moment et je n'aurais pas du...
    Voyez le résultat sur photo...
    Furax a joint une image
    G1027HE
  • Furax

    Faite bien la modif, je viens même de griller un compte démo ...
  • furynick

    J'ai relancé avec Alpari (j'étais chez FxPro) et 2 positions gagnantes plus une en cours.

    Voilà l'historique :
    furynick a joint une image
    G1028BB
  • John-Arnold

    Modif effectuée, Alea jacta est !!! Pour l'instant aucun trade d'ouvert.
  • falcon1733

    merci furax

    Draven je viens de t'envoyer le mail
  • Furax

    Je ne suis peut-être pas très bien réveillé mais on fait quoi avec le téléchargement de Draven vu que j'ai l'exécutable mais le mql4... ?
  • furynick

    Ca me rassure, j'ai failli poser la question ... il faut l'ouvrir dans MetaEditor et cliquer sur le bouton "Compiler" (ou F5) ;)