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

Programmer un EA avec plusieurs critères

  • traderjps

    Salut,
    J'ai vu que tu as l'air de bien connaître la programmation, et je voulais savoir si tu pouvais me programmer un EA ou un Script, je ne sais pas trop.
    Je t'explique:
    Ce serais pour uniquement clôturer mes trades. Je le collerais sur le graphe et il gérerais les positions ouvertes.
    Pour un ordre d'achat, On doit attendre que le cours clôture en dessous de l'ATRStops_v1.1 pour fermer la position
    Pour un ordre de vente. On doit attendre que le cours clôture au dessus de l'ATRStops_v1.1 pour fermer la position.
    Mais puisque l'ATR n'est pas toujours placé, de suite, au bonne endroit par rapport au cours alors en attendant on placerait un stop loose pour assurer la position.
    J'aimerais lui donner également un take profit à cet EA ou script, mais qui ne serait pas obligatoire. Le take profit aurait un pourcentage.; par exemple 20% de la position en take profit et donc 80% pour une clôture avec l'ATR.
    Voilà si ça t'intéresse, je serait très heureux que tu veuilles bien m'aider et si il y a quelque chose qui n'est pas clair, dis le moi.
    En tout cas c'est pour moi la meilleur solution que j'ai pu trouver pour clôturer mes trades (à priori) en testant manuellement.
    Cordialement
    JP
  • babs

    Salut,

    Pour faire tout ceci il me faudrait tes indicateurs ainsi qu'une image illustrant tes propos stp.

    Tu peux me décrire tout ça à l'adresse suivante***
    Modifié le 2014-02-21 14:18:37 par AliX
  • traderjps

    Salut Babs, tu t'en sors avec ce que je t'ai envoyé, c'est pas trop difficile?
    JP
  • babs

    Je n'ai pas encore pu m'en occupé mais je vois à peu prés ce que tu veux faire.

    Je t'enverrai mes questions au fur et a mesure.
  • traderjps

    Je te remercie
    A+
    JP
  • traderjps

    Salut Babs
    Pas de nouvelles, bonnes nouvelles???
  • babs

    je suis un peu occupé en ce moment je compte faire un premier jet ce weekend.

    Je te tiens au courant si j'ai besoin d'infos.
  • babs

    Ça y est première version envoyée!
  • traderjps

    Oui merci, je vais tester cette version cette semaine et je te ferai les commentaires courant de la semaine.
    merci A+
  • Jovager

    Bonjour Bab$,

    Es tu toujours là ? Un coup pour oui, deux coups pour non.

    Je tombe seulement maintenant sur ton cours qui correspond à ce que je cherche.

    J'ai un EA, que je modifie avec des conditions simples.

    Mais actuellement, je voudrais utiliser l'indicateur " SHI Channel...", acheter quand les paralleles sont up et vendre quand down.

    Je dois appeler iCustom (..." SHI "......

    Mais quels sont les criteres à utiliser.

    Merci d'avance

    Jo

    Code
    #property copyright "Copyright © 2004, Shurka & Kevin" #property link "" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Red double ExtMapBuffer1[]; double TL1; //---- input parameters extern int AllBars=240; extern int BarsForFract=0; int CurrentBar=0; double Step=0; int B1=-1,B2=-1; int UpDown=0; double P1=0,P2=0,PP=0; int i=0,AB=300,BFF=0; int ishift=0; double iprice=0; datetime T1,T2; string LF = "\n"; // use this in custom or utility blocks where you need line feeds //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_ARROW); SetIndexArrow(0,164); SetIndexBuffer(0,ExtMapBuffer1); SetIndexEmptyValue(0,0.0); //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } void DelObj() { ObjectDelete("TL1"); ObjectDelete("TL2"); ObjectDelete("MIDL"); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); //---- if ((AllBars==0) || (Bars<AllBars)) AB=Bars; else AB=AllBars; //AB-êîëè÷åñòâî îáñ÷èòûâàåìûõ áàðîâ if (BarsForFract>0) BFF=BarsForFract; else { switch (Period()) { case 1: BFF=12; break; case 5: BFF=48; break; case 15: BFF=24; break; case 30: BFF=24; break; case 60: BFF=12; break; case 240: BFF=15; break; case 1440: BFF=10; break; case 10080: BFF=6; break; default: DelObj(); return(-1); break; } } CurrentBar=2; //ñ÷èòàåì ñ òðåòüåãî áàðà, ÷òîáû ôðàêòàë "çàêðåïèëñÿ B1=-1; B2=-1; UpDown=0; while(((B1==-1) || (B2==-1)) && (CurrentBar<AB)) { //UpDown=1 çíà÷èò ïåðâûé ôðàêòàë íàéäåí ñâåðõó, UpDown=-1 çíà÷èò ïåðâûé ôðàêòàë //íàéäåí ñíèçó, UpDown=0 çíà÷èò ôðàêòàë åù¸ íå íàéäåí. //Â1 è Â2 - íîìåðà áàðîâ ñ ôðàêòàëàìè, ÷åðåç íèõ ñòðîèì îïîðíóþ ëèíèþ. //Ð1 è Ð2 - ñîîòâåòñòâåííî öåíû ÷åðåç êîòîðûå áóäåì ëèíèþ ïðîâîäèòü if((UpDown<1) && (CurrentBar==Lowest(Symbol(),Period(),MODE_LOW,BFF*2+1,CurrentBar-BFF))) { if(UpDown==0) { UpDown=-1; B1=CurrentBar; P1=Low[B1]; } else { B2=CurrentBar; P2=Low[B2];} } if((UpDown>-1) && (CurrentBar==Highest(Symbol(),Period(),MODE_HIGH,BFF*2+1,CurrentBar-BFF))) { if(UpDown==0) { UpDown=1; B1=CurrentBar; P1=High[B1]; } else { B2=CurrentBar; P2=High[B2]; } } CurrentBar++; } if((B1==-1) || (B2==-1)) {DelObj(); return(-1);} // Çíà÷èò íå íàøëè ôðàêòàëîâ ñðåäè 300 áàðîâ 8-) Step=(P2-P1)/(B2-B1);//Âû÷èñëèëè øàã, åñëè îí ïîëîæèòåëüíûé, òî êàíàë íèñõîäÿùèé P1=P1-B1*Step; B1=0;//ïåðåñòàâëÿåì öåíó è ïåðâûé áàð ê íóëþ //À òåïåðü îïîðíóþ òî÷êó ïðîòèâîïîëîæíîé ëèíèè êàíàëà. ishift=0; iprice=0; if(UpDown==1) { PP=Low[2]-2*Step; for(i=3;i<=B2;i++) { if(Low[i]<PP+Step*i) { PP=Low[i]-i*Step; } } if(Low[0]<PP) {ishift=0; iprice=PP;} if(Low[1]<PP+Step) {ishift=1; iprice=PP+Step;} if(High[0]>P1) {ishift=0; iprice=P1;} if(High[1]>P1+Step) {ishift=1; iprice=P1+Step;} } else { PP=High[2]-2*Step; for(i=3;i<=B2;i++) { if(High[i]>PP+Step*i) { PP=High[i]-i*Step;} } if(Low[0]<P1) {ishift=0; iprice=P1;} if(Low[1]<P1+Step) {ishift=1; iprice=P1+Step;} if(High[0]>PP) {ishift=0; iprice=PP;} if(High[1]>PP+Step) {ishift=1; iprice=PP+Step;} } //Òåïåðü ïåðåñòàâèì êîíå÷íóþ öåíó è áàð íà ÀÂ, ÷òîáû ëèíèè êàíàëà ðèñîâàëèñü ïîäëèííåå P2=P1+AB*Step; T1=Time[B1]; T2=Time[AB]; //Åñëè íå áûëî ïåðåñå÷åíèÿ êàíàëà, òî 0, èíà÷å ñòàâèì ïñèñó. if(iprice!=0) ExtMapBuffer1[ishift]=iprice; DelObj(); ObjectCreate("TL1",OBJ_TREND,0,T2,PP+Step*AB,T1,PP); ObjectSet("TL1",OBJPROP_COLOR,Lime); ObjectSet("TL1",OBJPROP_WIDTH,2); ObjectSet("TL1",OBJPROP_STYLE,STYLE_SOLID); // if(Close[0]>=PP && Close[0]>P1 ){ Alert(Symbol()," voir Hausse",PP);} ObjectCreate("TL2",OBJ_TREND,0,T2,P2,T1,P1); ObjectSet("TL2",OBJPROP_COLOR,Lime); ObjectSet("TL2",OBJPROP_WIDTH,2); ObjectSet("TL2",OBJPROP_STYLE,STYLE_SOLID); // if (Close[0]<=P1 && Close[0]<PP){ Alert(Symbol()," voir Baisse",P1);} ObjectCreate("MIDL",OBJ_TREND,0,T2,(P2+PP+Step*AB)/2,T1,(P1+PP)/2); ObjectSet("MIDL",OBJPROP_COLOR,Lime); ObjectSet("MIDL",OBJPROP_WIDTH,1); ObjectSet("MIDL",OBJPROP_STYLE,STYLE_DOT); // if (Close[0]>=TL1) {Alert(Symbol(), " MOUVEMENT ",PP,P1);} Print (Close[0]); return(0); } //+------------------------------------------------------------------+
    Modifié le 2014-02-21 14:19:57 par AliX