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

    script à creuser script à creuser

    Voici un petit script de débutant qui ne marche pas et m'empêche de progresser
    Je ne comprends pas:
    Je souhaite prendre position quand une MM1 ou 6 croise une M50 sur UT H1.
    Jusque là rien de plus classique.
    Cette prise de position se fait avec un schift -1 ou -2, autrement dit, je demande ceci:

    Si M1 > MM50 et si M1 précédent (-1 ou -2 barres ) < à MM50 alors acheter.
    Fermer si M1 à nouveau < à MM50.

    Je fais pareil pour vendre.

    Je vous donne le script si dessous pour MT4 sachant que :
    -mon backtest porte sur EURUSD en H1
    -date: 2009.10.01 à 2010.01.01

    Je remarque la chose suivante: A partir de 2009.11.19 les ordres d'ouverture et de fermeture ne cessent de se succéder... évidemment à mon désavantage et au bonheur (virtuel )...de mon broker !!

    Je ne comprends pas pourquoi, erreur de débutant, sans doute mais que beaucoup ont du rencontrer.

    UN PETIT MOT POUR M'AIDER SERAIT SYMPA.

    Bon trade à tous,

    Luc31

    Script:
    //+------------------------------------------------------------------+
    //| This MQL is generated by Expert Advisor Builder |
    //| Expert Advisor Builder for metatrader 4 |
    //| |
    //| In no event will author be liable for any damages whatsoever. |
    //| Use at your own risk. |
    //| |
    //+------------------- DO NOT REMOVE THIS HEADER --------------------+

    #define SIGNAL_NONE 0
    #define SIGNAL_BUY 1
    #define SIGNAL_SELL 2
    #define SIGNAL_CLOSEBUY 3
    #define SIGNAL_CLOSESELL 4

    #property copyright "Expert Advisor Builder"
    #property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

    extern int MagicNumber = 0;
    extern bool SignalMail = False;
    extern bool EachTickMode = True;
    extern double Lots = 0.5;
    extern int Slippage = 3;
    extern bool UseStopLoss = False;
    extern int StopLoss = 80;
    extern bool UseTakeProfit = True;
    extern int TakeProfit = 500;
    extern bool UseTrailingStop = False;
    extern int TrailingStop = 80;

    int BarCount;
    int Current;
    bool TickCheck = False;
    //+------------------------------------------------------------------+
    //| expert initialization function |
    //+------------------------------------------------------------------+
    int init() {
    BarCount = Bars;

    if (EachTickMode) Current = 0; else Current = 1;

    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert deinitialization function |
    //+------------------------------------------------------------------+
    int deinit() {
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert start function |
    //+------------------------------------------------------------------+
    int start() {
    int Order = SIGNAL_NONE;
    int Total, Ticket;
    double StopLossLevel, TakeProfitLevel;



    if (EachTickMode && Bars != BarCount) TickCheck = False;
    Total = OrdersTotal();
    Order = SIGNAL_NONE;

    //+------------------------------------------------------------------+
    //| Variable Begin |
    //+------------------------------------------------------------------+


    double Buy1_1 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_OPEN, Current + 0);
    double Buy1_2 = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
    double Buy2_1 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
    double Buy2_2 = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, Current + 0);

    double Sell1_1 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_OPEN, Current + 0);
    double Sell1_2 = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
    double Sell2_1 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
    double Sell2_2 = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, Current + 0);

    double CloseBuy1_1 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_OPEN, Current + 0);
    double CloseBuy1_2 = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, Current + 0);

    double CloseSell1_1 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_OPEN, Current + 0);
    double CloseSell1_2 = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, Current + 0);


    //+------------------------------------------------------------------+
    //| Variable End |
    //+------------------------------------------------------------------+

    //Check position
    bool IsTrade = False;

    for (int i = 0; i < Total; i ++) {
    OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
    if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
    IsTrade = True;
    if(OrderType() == OP_BUY) {
    //Close

    //+------------------------------------------------------------------+
    //| Signal Begin(Exit Buy) |
    //+------------------------------------------------------------------+

    if (CloseBuy1_1 < CloseBuy1_2) Order = SIGNAL_CLOSEBUY;


    //+------------------------------------------------------------------+
    //| Signal End(Exit Buy) |
    //+------------------------------------------------------------------+

    if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
    OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
    if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
    if (!EachTickMode) BarCount = Bars;
    IsTrade = False;
    continue;
    }
    //Trailing stop
    if(UseTrailingStop && TrailingStop > 0) {
    if(Bid - OrderOpenPrice() > Point * TrailingStop) {
    if(OrderStopLoss() < Bid - Point * TrailingStop) {
    OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
    if (!EachTickMode) BarCount = Bars;
    continue;
    }
    }
    }
    } else {
    //Close

    //+------------------------------------------------------------------+
    //| Signal Begin(Exit Sell) |
    //+------------------------------------------------------------------+

    if (CloseSell1_1 > CloseSell1_2) Order = SIGNAL_CLOSESELL;


    //+------------------------------------------------------------------+
    //| Signal End(Exit Sell) |
    //+------------------------------------------------------------------+

    if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
    OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
    if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
    if (!EachTickMode) BarCount = Bars;
    IsTrade = False;
    continue;
    }
    //Trailing stop
    if(UseTrailingStop && TrailingStop > 0) {
    if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
    if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
    OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
    if (!EachTickMode) BarCount = Bars;
    continue;
    }
    }
    }
    }
    }
    }

    //+------------------------------------------------------------------+
    //| Signal Begin(Entry) |
    //+------------------------------------------------------------------+

    if (Buy1_1 > Buy1_2 && Buy2_1 < Buy2_2) Order = SIGNAL_BUY;

    if (Sell1_1 < Sell1_2 && Sell2_1 > Sell2_2) Order = SIGNAL_SELL;


    //+------------------------------------------------------------------+
    //| Signal End |
    //+------------------------------------------------------------------+

    //Buy
    if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
    if(!IsTrade) {
    //Check free margin
    if (AccountFreeMargin() < (1000 * Lots)) {
    Print("We have no money. Free Margin = ", AccountFreeMargin());
    return(0);
    }

    if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
    if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

    Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
    if(Ticket > 0) {
    if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
    Print("BUY order opened : ", OrderOpenPrice());
    if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
    } else {
    Print("Error opening BUY order : ", GetLastError());
    }
    }
    if (EachTickMode) TickCheck = True;
    if (!EachTickMode) BarCount = Bars;
    return(0);
    }
    }

    //Sell
    if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
    if(!IsTrade) {
    //Check free margin
    if (AccountFreeMargin() < (1000 * Lots)) {
    Print("We have no money. Free Margin = ", AccountFreeMargin());
    return(0);
    }

    if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
    if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

    Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
    if(Ticket > 0) {
    if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
    Print("SELL order opened : ", OrderOpenPrice());
    if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
    } else {
    Print("Error opening SELL order : ", GetLastError());
    }
    }
    if (EachTickMode) TickCheck = True;
    if (!EachTickMode) BarCount = Bars;
    return(0);
    }
    }

    if (!EachTickMode) BarCount = Bars;

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

  2. #2
    Membre lvl 25 FolkenIII est sur la route de la réputation...
    Date d'inscription
    March 2010
    Messages
    26
    Pouvoir de réputation
    4

    Normal.
    Voici les conditions à rentrer dans Expert Builder pour l'achat :

    Buy #1

    MM Période Inférieur (Appelé Fast MA) Shift 0 > MM Période Supérieur (Appelé Slow MA) Shift 0


    And #2

    MM Période Inférieur Shift 1 < MM Période Supérieur Shift 1


    Dans ton Script tu n'a qu'une seule condition de Buy et qu'une seule condition de vente.
    Dernière modification par FolkenIII ; 22/07/2010 à 20h01.

  3. #3
    Membre lvl 5 luc31 est sur la route de la réputation...
    Date d'inscription
    November 2009
    Messages
    7
    Pouvoir de réputation
    5

    modification EA MM 1_50 modification EA MM 1_50

    Tout d'abord, merci Folken III pour votre aide ... mais malheureusement, cela ne marche toujours pas.
    Je n'arrête pas d'avoir des ordres en rafale et je ne comprends toujours pas pourquoi!!

    Ca ne doit pourtant pas être si compliqué que ca, me semble t'il.

    Je veux juste que l'ordre se passe quand MM1 croise MM50 et se ferme à nouveau en cas de refranchissement (la MM1, bien sûr,pas la valeur)
    Bien entendu, si je donne le même ordre pour buy et sell, alors en réalité, théoriquement quand mon buy se referme, c'est mon sell qui se déclenche et vis et versa. J'ai même essayé de mettre le croisement buy pour MM1/MM50 et le croisement sell pour MM1/51 ... mais rien n'y fait.

    HELP, HELP please: juste un petit coup de main svp pour me dire pourquoi cette succession d'ordres.

    ci joint, le petit EA et le rapport qui montre ces ordres de Zut pris en rafale !

    Bon trade à tous sous le soleil et merci encore folken.
    Fichiers attachés

  4. #4
    Membre Performance Guonzo deviendra bientot célèbre...
    Date d'inscription
    April 2009
    Messages
    168
    Pouvoir de réputation
    8

    Salut Luc31,

    as-tu essayé de mettre le paramètre EachTickMode à false ? Par ce qui se passe c'est que le robot test sa condition à chaque tick.

    Donc si une condition de croisement est vérifié 50 fois sur une barre, alors il ouvrira 50 positions...

    Il semble que les concepteurs du robot laisse le choix du fonctionnement (test à chaque tick ou test une seule foix dès lors que la condition est vérifiée) avec le paramètre EachTickMode.

    @+, Guonzo.

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

    Evolution de EA croisement MM1_50 Evolution de EA croisement MM1_50

    Merci Guonzo!!

    Il y a un progrès notable.

    Les ordres en rafale ont sacrément diminués!

    Je ne comprends pas encore pourquoi les croisements ne suivent pas tout à fait mon graphique mais je vais travailler dessus.

    Si certains veulent regarder ce petit EA avec la modif de Guonzo et proposer àleur tour des modifs, ils sont les bienvenus!
    Fichiers attachés

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

    fôôôtes d'orthographe fôôôtes d'orthographe

    désolé pr les fautes et accords

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

    Modif croisement MM1_MM50 Modif croisement MM1_MM50

    as-tu testé ce petit EA Guonzo?

    Qu'en penses-tu?

    Merci

  8. #8
    Membre Performance Guonzo deviendra bientot célèbre...
    Date d'inscription
    April 2009
    Messages
    168
    Pouvoir de réputation
    8

    Salut Luc31,

    j'ai testé rapidement ton EA et sans surprise l'espérance de gain est négative en H1 (j'ai testé EUR/USD sur 3 ans avec un minicompte de 2000 euros et des prises de position de 10K).

    C'est normal pour une stratégie à base de moyenne mobiles, sur des unités de temps aussi petites la volatilité est trop importante. L'écart type du prix sur la période de ta moyenne est en général trop important. Conséquence un croisement correspond plus à une anomalie ponctuelle qui te fera clôturé perdant, qu'à un réel nouveau consensus sur le prix qui décale.

    Par contre j'ai testé en D1, là c'est beaucoup mieux (même si c'est sans vraie rentabilité), il faut maintenant gérer de façon plus efficace ton suivi de position (breakeven, MM, pyramidage, que sais-je encore...) et bien comprendre dans quelle mesure tu exposes ton capital avec une telle stratégie.

    Cordialement,

    Guonzo.

Discussions similaires

  1. EA ou Script
    Par nickleus dans le forum Programmation
    Réponses: 3
    Dernier message: 14/07/2010, 15h49
  2. Recherche script
    Par un6oitil dans le forum Systèmes de Trading Auto
    Réponses: 31
    Dernier message: 13/04/2010, 15h48
  3. EA, script et indicateur ?
    Par TAAD dans le forum Novice sur le Forex
    Réponses: 4
    Dernier message: 26/02/2010, 08h45
  4. question script
    Par ptrck72 dans le forum Systèmes de Trading Auto
    Réponses: 0
    Dernier message: 25/02/2009, 19h34
  5. Réponses: 0
    Dernier message: 10/10/2008, 19h10

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