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

Aide pour la réalisation d'un EA MT4

  • and.piscopo

    Bonjour à tous,

    je suis débutant dans le langage MQL4 et j'en appelle à votre aide pour coder un EA.

    J'ai commencé par coder un EA très simple qui doit lors de son initialisation:
    - Ouvrir instantanément 2 positions (long & short) aux prix ask et bid du marché.
    - Envoyer sur le carnet d'ordre 4 postions BUYSTOP, SELLLIMIT, BUYLIMIT, SELLSTOP qui s'activeront si le cours passe soit au cours actuel + 10 PIP, soit - 10PIP.

    Le problème est que lorsque je backtest ce code, aucun trade n'est effectué. Quelqu'un peut-il m'indiquer mon erreur?
    Je vous remercie d'avance.

    Andrea

    Code
    //+------------------------------------------------------------------+ //| MTCM_V3.mq4 | //| Copyright 2016, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict double aski; double bidi; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- aski=Ask; bidi=Bid; OrderSend(Symbol(),OP_BUY,1,aski,2,aski-10*Point,aski+10*Point,"Ordre Achat",666,0,Green); OrderSend(Symbol(),OP_SELL,1,bidi,2,bidi+10*Point,bidi-10*Point,"Ordre Vente",666,0,Red); OrderSend(Symbol(),OP_BUYSTOP,1,aski+10*Point,2,aski,aski+20*Point,"Ordre Achat",666,0,Green); OrderSend(Symbol(),OP_SELLLIMIT,1,Bid+10*Point,2,Bid+20*Point,Bid,"Ordre Vente",666,0,Red); OrderSend(Symbol(),OP_BUYLIMIT,1,aski-10*Point,2,aski-20*Point,aski,"Ordre Achat",666,0,Green); OrderSend(Symbol(),OP_SELLSTOP,1,bidi-10*Point,2,bidi,bidi-20*Point,"Ordre Vente",666,0,Red); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+
  • leiha.sellier — en réponse à and.piscopo dans son message #105299

    Hello

    As tu vérifié ce que renvoyait OderSend ?

    Code
    double aski = Ask; int ticket = OrderSend(Symbol(),OP_BUY,1,aski,2,aski-10*Point,aski+10*Point,"Ordre Achat",666,0,Green);

    Si tu regardes dans l'onglet expert du terminal tu verras que :
    2016.06.04 10:58:20.081 .....................: OrderSend function cannot be called from a custom indicator

    Tu en deduiras donc que tu n'utilises pas le bon événement je t'invites à aller voir cette
    page par exemple pour comprendre ton erreur

    Bon courage ;)
  • lefeuvr3

    Il faut tout d'abord enlever ce qui bloque souvent le fonctionnement de l'EA
    Code
    #property strict
    Modifié le 2018-11-27 09:35:09 par lefeuvr3
  • riden

    Peux-tu nous montrer tout le corp de l'EA ?
    D'abord aski-10*Point veut dire ask -1 pip et non pas 10 pips (sauf si tu as encore 4 digits et 2 pour les XXXJPY) la "distance" entre le pt d'entré et SL ou TP lors de la prise de position doit toujours être supérieur à MarketInfo(Symbol(),MODE_STOPLEVEL) sinon tu auras une erreur.

    La fonction OnInit() s'exécute uniquement lors de: ajout de l'EA sur le graph / démarrage de MT4 / recompilation de l'EA / changement de TF. Dans un backtest OnInit() s’exécute une seule fois puis OnTick() s'exécutera à chaque changement de prix (chaque tick ou chaque nouvelle bougie selon ce que tu va sélectionner avant de backtester)