Mon compte
Déjà membre ? S'identifier
Non inscrit ? S'inscrire
 
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Membre lvl 5 lupin est sur la route de la réputation...
    Date d'inscription
    November 2008
    Messages
    5
    Pouvoir de réputation
    6

    ea mql4 - stochastic ea mql4 - stochastic

    bonjour!

    je ne me rappel plus si j'ai déja posté sur le site, mais j'ai ce soir une question qui me brûle les lèvres.

    J'essai depuis quelques jours de faire un Expert Advisor en MQL4 (mt4) qui est en fait très simple: j'achète, je vend, et je ferme mes positions en fonction de l'incateur stochastic. mais on dirait que la variable globale que j'utilise afin d'être sur de ne pas réouvrir une position quand j'en ais déja ouverte une fonctionne mal; l'ea ouvre une après l'autre des positions quand il est suposer en ouvrir une seule et attendre le moment opportun pour la fermer...

    en voici une petite ébauche...

    //variables globales

    bool selling = false;
    bool buying = false;
    double m0, m1, s0, s1;

    int start()
    {
    //----
    m0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 0);
    m1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 1);
    s1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0) ;
    s1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1) ;

    if(GlobalVariableGet(buying) == false) Alert(" buying = false");

    if(m1 < s1 && m0 >= s0)
    {
    if(GlobalVariableGet(buying) == true)
    {
    Alert("on ferme la vente!");
    GlobalVariableSet(selling, false);
    }
    else if(GlobalVariableGet(selling) == false && GlobalVariableGet(buying) == false)
    {
    Alert("on achete!");
    GlobalVariableSet(buying, true);
    }
    }
    else if(m1 > s1 && m0 <= s0)
    {
    if(GlobalVariableGet(buying) == true)
    {
    Alert("on ferme lachat!");
    GlobalVariableSet(buying, false);
    }
    if(GlobalVariableGet(buying) == false && GlobalVariableGet(selling) == false)
    {
    Alert("on vend!");
    GlobalVariableSet(selling, true);
    }
    }
    else
    {
    Alert("il se passe rien!");
    }
    return(0);

    ca m'aiderait beaucoup!

  2. #2
    Membre lvl 50 Pacamo deviendra bientot célèbre... Avatar de Pacamo
    Date d'inscription
    February 2011
    Localisation
    Suisse
    Messages
    64
    Pouvoir de réputation
    4

    Bonjour
    je pense que le mieux est de passé par une fonction qui compte les positions ouverte par devise

    Code:
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    //+ ordre en cour                                                    +
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    int ordre_en_cour() 
    {
     int nb=0;
      for (int i=0; i<(OrdersTotal()); i++) 
      { 
          if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)&& OrderSymbol()==Symbol()) 
          {
          nb++;
          }
      } 
     
    return(nb);
    }
    et pour l'appelle
    Code:
    int start()
    {
     if (ordre_en_cour()<1)
          {//ce qu'il faut faire si pas d'ordre en cours
          }else{
           //ce qu'il faut faire si il y a un ordre ouvert
          }
    }
    Ce n'est qu'une piste mais l'utilisation de fonction rend plus clair le code
    bien a vous

  3. #3
    Membre Star remjie est actif et passionnant Avatar de remjie
    Date d'inscription
    January 2011
    Localisation
    Rhone
    Messages
    279
    Pouvoir de réputation
    10

    Salut,
    Sinon pour faire très simple:

    //variables globales

    bool selling = false;
    bool buying = false;
    double m0, m1, s0, s1;

    int start()
    {
    //----
    m0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 0);
    m1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 1);
    s0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0) ;
    s1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1) ;

    if(OrdersTotal()<1)
    {

    if(m1 < s1 && m0 >= s0)
    {
    if(GlobalVariableGet(buying) == true)
    {
    Alert("on ferme la vente!");
    GlobalVariableSet(selling, false);
    }
    else if(GlobalVariableGet(selling) == false && GlobalVariableGet(buying) == false)
    {
    Alert("on achete!");
    GlobalVariableSet(buying, true);
    }
    }
    else if(m1 > s1 && m0 <= s0)
    {
    if(GlobalVariableGet(buying) == true)
    {
    Alert("on ferme lachat!");
    GlobalVariableSet(buying, false);
    }
    if(GlobalVariableGet(buying) == false && GlobalVariableGet(selling) == false)
    {
    Alert("on vend!");
    GlobalVariableSet(selling, true);
    }
    }
    else
    {
    Alert("il se passe rien!");
    }
    }
    return(0);


    Je t'ai mis ma modif en vert et une petite erreur d'inatention en rouge

    Attention cependant, j'ai pas vérifier tout le code, c'est pour te donner une idée de modif que tu peut faire pour faire fonctionner ce que tu souhaite (sans mettre une boucle, c'est chiant les boucles =D )
    Dernière modification par remjie ; 06/05/2011 à 15h18.
    Mieux vaut ouvrir sa gueule et passer pour un con que la fermer et ne laisser aucun doute sur le sujet.

  4. #4
    Membre lvl 50 Pacamo deviendra bientot célèbre... Avatar de Pacamo
    Date d'inscription
    February 2011
    Localisation
    Suisse
    Messages
    64
    Pouvoir de réputation
    4

    @remjie
    Oups
    Moi qui voulais bien faire... structure,vagabondage du code... etc multi-devises et le tout réutilisable ...


  5. #5
    Membre lvl 5 lupin est sur la route de la réputation...
    Date d'inscription
    November 2008
    Messages
    5
    Pouvoir de réputation
    6

    merci beaucoup de l'effort pacamo, c'est très apprécié, mais ce que remjie a fait ressemble plus a ce que j'ai de besoin! j'ai juste besoin d'ouvrir un ordre et de le fermer avant d'en ouvrir un autre.

    mais bref, je crois qu'un probleme subsiste. mes variables globales du début revenaient toujours a false même si logiquement, comme je le comprends, elles ne le devrait pas. le même phénomène ne se produira-t-il pas avec la variable ticket de mon dernier code?

    double m0, m1, s0, s1, lots;
    int ticket;

    int start()
    {
    //----
    m0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 0);
    m1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 1);
    s0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0) ;
    s1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1) ;

    lots = 1;

    if(m1 < s1 && m0 >= s0)
    {
    if(OrdersTotal() == 1)
    {
    Alert("on ferme la vente!");
    OrderClose(ticket, lots, Bid, 10*Point, CLR_NONE);
    }
    if(OrdersTotal()<1)
    {
    Alert("on achete!");
    ticket = OrderSend (Symbol(), OP_BUY, 1, Ask, 5, Ask-15*Point, 0);
    }
    }
    else if(m1 > s1 && m0 <= s0)
    {
    if(OrdersTotal() == 1)
    {
    Alert("on ferme lachat!");
    OrderClose(ticket, lots, Bid, 10*Point, CLR_NONE);
    }
    else if(OrdersTotal()<1)
    {
    Alert("on vend!");
    ticket = OrderSend (Symbol(), OP_SELL, 1, Bid, 5, Bid+15*Point, 0);
    }
    }
    else
    {
    Alert("il se passe rien!");
    }
    return(0);
    }

    je n'ais malheureusement pas pu tester le code le marché est fermer...

  6. #6
    Membre Performance jeanjo est sur la route de la réputation...
    Date d'inscription
    November 2010
    Messages
    181
    Pouvoir de réputation
    3

    S'il n'y a qu'un seul ordre, le code devrait marcher, sauf ici :

    if(OrdersTotal() == 1)
    {
    Alert("on ferme la vente!");
    OrderClose(ticket, lots, Bid, 10*Point, CLR_NONE);
    }

    Le programme dit : " s'il y a un ordre, revend-le"
    Le programme va prendre un ordre d'achat ou de vente, et le revendre aussitôt.
    Si on précise, "s'il y a un signal de vente, et si on a un ordre d'achat on le revend" ça devrait marcher.

    Pour savoir s'il y a ordre d'achat :
    if(orderType() == OP_BUY)

    Il faut passer par un OrdreSelect :
    for(int r = 0; r<= OrderTotal(); r++)
    {
    OrderSelect(r, SELECT_BY_POS,MODE_TRADES);
    if (orderType(r) == OP_BUY)
    {
    lots = OrderLot(r); // on prend son nombre de lots
    ticket = OrderTicket(r); // On prend son N° de ticket ( on sait jamais )
    OrderClose(ticket, lots, Bid, 3);
    }
    }
    Dernière modification par jeanjo ; 10/05/2011 à 19h16.

  7. #7
    Membre lvl 5 forexwarrior est sur la route de la réputation...
    Date d'inscription
    January 2009
    Messages
    5
    Pouvoir de réputation
    6

    bjr a vs, DEPUIS CE POST QQUELS sont les resultats jusqua present , utilisez vous en M1 ou M5 ou les 2? eur usd et aussi aud sud et gbd usd?
    AVEZ vous ameliorer le code? l'avez vous em mq4?
    avez vous automatisé le stop loss aussi ca me paraitn important , non?
    moi je stope regulierement sur 30 max et ne trade que M5

    jai un systeme sympa qui donne 100 points jour moyenne, tres tres regulierement! aussi mais pas programmable,

    je peux echanger mon historique de compte réel et lexpliquer contre un historique de compte réel avec un tel indicateur stocastique
    le donnant donnant est une conceptioo d'echange equitable et honnete

    s'il donne 30% par mois minimum avc DD de 12 max environ et 1% de prise de risque par position, cest ainsi que je fais, avec 4 pos ouvertes à la fois max

    a bientot peut etre

Discussions similaires

  1. EA croisement stochastic
    Par turfer dans le forum Systèmes de Trading Auto
    Réponses: 3
    Dernier message: 14/11/2010, 14h27
  2. Stochastic avec histo.
    Par pipsforever dans le forum Trading Divers
    Réponses: 12
    Dernier message: 11/09/2009, 22h11
  3. Stochastic divergence
    Par @rno67 dans le forum Trading Divers
    Réponses: 7
    Dernier message: 29/08/2009, 02h11
  4. pb mql4
    Par pingoo dans le forum Systèmes de Trading Auto
    Réponses: 2
    Dernier message: 25/01/2009, 13h35
  5. Stochastic Slow
    Par condor666 dans le forum Novice sur le Forex
    Réponses: 10
    Dernier message: 01/06/2008, 21h51

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