Mon compte
Déjà membre ? S'identifier
Non inscrit ? S'inscrire
 
+ Répondre à la discussion
Page 1 sur 3 1 2 3 DernièreDernière
Affichage des résultats 1 à 10 sur 21
  1. #1
    Membre lvl 5 Nehemah est sur la route de la réputation...
    Date d'inscription
    August 2007
    Messages
    13
    Pouvoir de réputation
    7

    Créer un petit EA avec une moyenne mobile (apprentissage) Créer un petit EA avec une moyenne mobile (apprentissage)

    Bonjour,

    Je souhaiterais construire petit à petit un EA (et non pas en utiliser un tout fait) mais je ne parviens pas à créer la base. Cela fait des semaines que j'étudie des tutos, des programmes, mais rien n'y fait...

    J'aimerais programmer une chose toute simple : (pour apprendre la base)

    1° Définir une moyenne mobile à 30 périodes

    2° Acheter quand les prix la coupe à la hausse, vendre quand les prix la coupe à la baisse.

    Voilà c'est tout simple mais je n'y parviens pas.

    Est-ce qu'une âme charitable aurait la gentillesse de me fournir le code pour mon exemple afin que je puisse comprendre le mécanisme.

    Merci d'avance

  2. #2
    Membre lvl 5 Nehemah est sur la route de la réputation...
    Date d'inscription
    August 2007
    Messages
    13
    Pouvoir de réputation
    7

    C'est dommage de ne pas avoir de réponses.

    J'ai tenté quelque chose. Je n'ai pas d'erreur après compilation mais lorsque je teste le programme, il ne prend aucune position. Voici mon code :

    double moyenneMobile;

    //+------------------------------------------------------------------+
    //| expert initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    //----

    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert deinitialization function |
    //+------------------------------------------------------------------+
    int deinit()
    {
    //----

    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert start function |
    //+------------------------------------------------------------------+
    int start()
    {
    //----
    double Price = Bid ;

    moyenneMobile=iMA(Symbol(),PERIOD_M5,10,0,MODE_SMA ,PRICE_CLOSE,0);

    if (Price > moyenneMobile) {

    OrderSend(Symbol(), OP_BUY, 1, Ask, 0, 0, 0, 200, 0, Green);
    }
    //----
    return(0);
    }

  3. #3
    Membre lvl 75 lereuland est sur la route de la réputation...
    Date d'inscription
    January 2011
    Localisation
    Lille
    Messages
    89
    Pouvoir de réputation
    3

    Salut !

    Désolé mais pour ma part je n'y connais rien en programmation... J'ai cherché ca hier soir pour mes besoins également et j'ai trouvé :


    //+------------------------------------------------------------------+
    //| EMA_CROSS.mq4 |
    //| Coders Guru |
    //| Forex TSD - forex forum |
    //+------------------------------------------------------------------+
    #property copyright "Coders Guru"
    #property link "http://www.forex-tsd.com"

    //---- input parameters
    extern double TakeProfit=100;
    extern double Lots=1;
    extern double TrailingStop=35;

    extern int ShortEma = 10;
    extern int LongEma = 80;

    //+------------------------------------------------------------------+
    //| expert initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    //----

    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert deinitialization function |
    //+------------------------------------------------------------------+
    int deinit()
    {
    //----

    //----
    return(0);
    }

    int Crossed (double line1 , double line2)
    {
    static int last_direction = 0;
    static int current_direction = 0;

    if(line1>line2)current_direction = 1; //up
    if(line1<line2)current_direction = 2; //down



    if(current_direction != last_direction) //changed
    {
    last_direction = current_direction;
    return (last_direction);
    }
    else
    {
    return (0);
    }
    }

    //+------------------------------------------------------------------+
    //| expert start function |
    //+------------------------------------------------------------------+
    int start()
    {
    //----

    //LotCalc(1);
    int cnt, ticket, total;
    double SEma, LEma;


    if(Bars<100)
    {
    Print("bars less than 100");
    return(0);
    }
    if(TakeProfit<10)
    {
    Print("TakeProfit less than 10");
    return(0); // check TakeProfit
    }


    SEma = iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,0);
    LEma = iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,0);


    int isCrossed = 0;
    isCrossed = Crossed (LEma,SEma);

    total = OrdersTotal();
    if(total < 1)
    {
    if(isCrossed == 1)
    {
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+ TakeProfit*Point,"My EA",12345,0,Green);
    if(ticket>0)
    {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("BUY order opened : ",OrderOpenPrice());
    }
    else Print("Error opening BUY order : ",GetLastError());
    return(0);
    }
    if(isCrossed == 2)
    {

    ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"My EA",12345,0,Red);
    if(ticket>0)
    {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("SELL order opened : ",OrderOpenPrice());
    }
    else Print("Error opening SELL order : ",GetLastError());
    return(0);
    }
    return(0);
    }
    for(cnt=0;cnt<total;cnt++)
    {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    OrderPrint();
    if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
    {
    if(OrderType()==OP_BUY) // long position is opened
    {
    // should it be closed?
    if(isCrossed == 2)
    {
    OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ; // close position
    return(0); // exit
    }
    // check for trailing stop
    if(TrailingStop>0)
    {
    if(Bid-OrderOpenPrice()>Point*TrailingStop)
    {
    if(OrderStopLoss()<Bid-Point*TrailingStop)
    {
    OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
    return(0);
    }
    }
    }
    }
    else // go to short position
    {
    // should it be closed?
    if(isCrossed == 1)
    {
    OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ; // close position
    return(0); // exit
    }
    // check for trailing stop
    if(TrailingStop>0)
    {
    if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
    {
    if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
    {
    OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Poi nt*TrailingStop,OrderTakeProfit(),0,Red);
    return(0);
    }
    }
    }
    }
    }
    }

    return(0);
    }
    //+------------------------------------------------------------------+


    L'EA achète donc au croisement de deux moyennes mobiles exponentielles, tu spécifies le TP, TS et les longueurs des deux mm.
    Ca passe bien des ordres, mais je n'ai pas encore pu trouver comment faire un backtest qui puisse etre positif. C'est super linéaire en progression négative, mais justement c'est la le problème, c'est négatif. J'aimerai aussi savoir coder pour en faire un à ma sauce mais pas facile !

    Affaire à suivre !
    Dernière modification par lereuland ; 27/12/2011 à 12h18.

  4. #4
    Membre lvl 5 Nehemah est sur la route de la réputation...
    Date d'inscription
    August 2007
    Messages
    13
    Pouvoir de réputation
    7

    Salut leureuland !

    Merci pour ta réponse et pour le code !

    Il y a une chose que je ne comprends pas dedans ! Tu as :

    SEma = iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,0);
    LEma = iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,0);

    C'est quoi ce ShortEma et LongEma ?

    Car ici normalement, on doit mettre les valeurs du nombre de périodes de la moyenne mobile. Par exemple 20 pour la 1ère et 50 pour la 2ème.

  5. #5
    Membre Star pipsforever is just really nice pipsforever is just really nice pipsforever is just really nice pipsforever is just really nice Avatar de pipsforever
    Date d'inscription
    November 2008
    Localisation
    Londres
    Messages
    1 340
    Pouvoir de réputation
    42

    Bonjour Nemha;

    POur le short et long ma c'est des variables externes, afin que l'utilisateur puisse choisir lui même les périodes utilisées dans la fenêtre d'options.

    Lors de des tests, s'il s'agit bien de backtests dont tu parle, il va falloir enlever PERIOD_M5 dans le code de ta moyenne et mettre 0 à la place, car les backtests ne fonctionnent pas avec ce genre de paramètres.

    Bonne chance
    Chaque trade doit avoir seul et unique but ...... faire un nouveau plus haut sur votre équity!!!
    Chez moi, la prog c'est une affaire de famille!
    Même notre chien s'y met

  6. #6
    Membre lvl 75 lereuland est sur la route de la réputation...
    Date d'inscription
    January 2011
    Localisation
    Lille
    Messages
    89
    Pouvoir de réputation
    3

    Salut pips ! Oui il s'agit bien de backtests que j'ai fait ce matin, en changeant les périodes des MM, les TP ou TS, les TF, rien n'y fait, toujours en perte, et toujours linéaire. Plein d'ordres passés sur une période de 3 mois on arrive à 200 ordres facilement si pas 300. J'essaie donc d enlever ce paramètre ce soir pour réessayer à nouveau

    Merci

  7. #7
    Membre Star pipsforever is just really nice pipsforever is just really nice pipsforever is just really nice pipsforever is just really nice Avatar de pipsforever
    Date d'inscription
    November 2008
    Localisation
    Londres
    Messages
    1 340
    Pouvoir de réputation
    42

    Je pense savoir ce qui ne va pas, enfin j'ai pas tout regardé.
    Pour un long essaye

    if(close[0]>ma && close[1] < ma) alors buy

    if(close[0]<ma && close[1] > ma) alors sell

    Un croisement s'effectue si une condition est là à T et non présente à T-1.

    Si on achete lorsque Ask>Ma cette condition peut être acceptée 10 fois sur une bougie et donc 10 trades ouverts, il faut toujours vérifier que ce n’était pas le cas les bougies précédentes
    Chaque trade doit avoir seul et unique but ...... faire un nouveau plus haut sur votre équity!!!
    Chez moi, la prog c'est une affaire de famille!
    Même notre chien s'y met

  8. #8
    Membre lvl 5 Nehemah est sur la route de la réputation...
    Date d'inscription
    August 2007
    Messages
    13
    Pouvoir de réputation
    7

    Citation Envoyé par pipsforever Voir le message
    Bonjour Nemha;

    POur le short et long ma c'est des variables externes, afin que l'utilisateur puisse choisir lui même les périodes utilisées dans la fenêtre d'options.

    Lors de tes tests, s'il s'agit bien de backtests dont tu parle, il va falloir enlever PERIOD_M5 dans le code de ta moyenne et mettre 0 à la place, car les backtests ne fonctionnent pas avec ce genre de paramètres.

    Bonne chance
    Bonjour pipsforever et merci pour ta réponse !

    Ah ok je saisis mieux. Mais est-ce qu'on peut mettre directement des valeurs dans le programme ? (à la place de short et long)

    Concernant mon petit programme en préambule, j'ai donc mis 0 à la place de PERIOD_M5 et j'ai refait un backtest. Mais toujours aucun ordre passé ! De quoi ça peut venir à ton avis ?

  9. #9
    Membre Star pipsforever is just really nice pipsforever is just really nice pipsforever is just really nice pipsforever is just really nice Avatar de pipsforever
    Date d'inscription
    November 2008
    Localisation
    Londres
    Messages
    1 340
    Pouvoir de réputation
    42

    Oups, ne prête pas attention à ma réponse Lereuland, j'ai confondus ton code et le premier donné sur cette file.

    Du reste, c'est bien connus, un simple EA de croisement de moyenne est très rarement gagnant.
    Lorsque je programmais à Londres, la plupart des traders le savaient bien
    Chaque trade doit avoir seul et unique but ...... faire un nouveau plus haut sur votre équity!!!
    Chez moi, la prog c'est une affaire de famille!
    Même notre chien s'y met

  10. #10
    Membre Star pipsforever is just really nice pipsforever is just really nice pipsforever is just really nice pipsforever is just really nice Avatar de pipsforever
    Date d'inscription
    November 2008
    Localisation
    Londres
    Messages
    1 340
    Pouvoir de réputation
    42

    Essaye ça, je suis pas sur que ca marche à 100% car je n'ai pas MT4 ici ni le compiateur

    //+------------------------------------------------------------------+
    //| expert initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    //----

    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert deinitialization function |
    //+------------------------------------------------------------------+
    int deinit()
    {
    //----

    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert start function |
    //+------------------------------------------------------------------+
    int start()
    {
    //----

    moyenneMobile=iMA(Symbol(), 0 ,10,0,MODE_SMA ,PRICE_CLOSE,0);
    double moyenneMobilePrev=iMA(Symbol(), 0 ,10,0,MODE_SMA ,PRICE_CLOSE,1);

    if (Close[0]> moyenneMobile && Close[1] < moyenneMobilePrev ) {

    OrderSend(Symbol(), OP_BUY, 1, NormalizeDouble(Ask, Digits), 0, 0, 0, 200, 0, Green);
    }
    //----
    return(0);
    }
    Chaque trade doit avoir seul et unique but ...... faire un nouveau plus haut sur votre équity!!!
    Chez moi, la prog c'est une affaire de famille!
    Même notre chien s'y met

Discussions similaires

  1. Moyenne mobile
    Par eliot7111 dans le forum Trading Divers
    Réponses: 5
    Dernier message: 26/03/2011, 12h22
  2. moyenne mobile
    Par fstl dans le forum Trading Divers
    Réponses: 12
    Dernier message: 11/02/2010, 14h33
  3. Moyenne mobile sur Forexyard ?
    Par didger dans le forum Utilisation des Plateformes de Trading
    Réponses: 0
    Dernier message: 22/04/2009, 22h23
  4. Moyenne Mobile EA
    Par Chris128 dans le forum Systèmes de Trading Auto
    Réponses: 2
    Dernier message: 23/12/2008, 08h58
  5. Moyenne mobile
    Par sasade dans le forum Novice sur le Forex
    Réponses: 1
    Dernier message: 03/03/2008, 16h55

Ajouter aux Favoris | Plan du site | Archives | Forex | Contact