Mon compte
Déjà membre ? S'identifier
Non inscrit ? S'inscrire
 
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre lvl 50 skl23105 est sur la route de la réputation...
    Date d'inscription
    August 2008
    Localisation
    creuse
    Messages
    58
    Pouvoir de réputation
    6

    besoin de rensegnement pour un coup de main pour un ea besoin de rensegnement pour un coup de main pour un ea

    Bonjour, je debute dans la prog d'ea j en ai réussi à partir d'indic externe mais la je bloque sur un truc surement trés simple : une moyenne mobile expo

    Mon but est de stopper un achat ou une vente au retournement de la moyenne mobine en comparant le prix sur la barre passer et la bar presente a chaque fermeture :

    Si elle descent = vente
    Si elle monte = achat
    si elle se retourne stop achat et vente ou inversement

    Pourtant j ai deja programme des fonctions d achat vente sur les croisements de MM sans souci

    Mais voila , lorsque je fais un backtest dessus , les achats et les ventes ne sont pas du tout en face des retournements de tendance signaler par la moyenne mobile mais 2 ou 3 barres avant ou aprés : pourtant une MM ne se redessine pas


    Pour ce que cela interresse , j ai mis le code en dessous , le but serait de comprendre pourquoi ça merde



    #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 = False;
    extern double Lots = 1.0;
    extern int Slippage = 3;
    extern bool UseStopLoss = False;
    extern int StopLoss = 30;
    extern bool UseTakeProfit = False;
    extern int TakeProfit = 60;
    extern bool UseTrailingStop = False;
    extern int TrailingStop = 30;

    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 Var1 = iMA(NULL, 0, 10, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
    double Var2 = iMA(NULL, 0, 10, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

    double Buy1_1 = iMA(NULL, 0, 10, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
    double Buy1_2 = iMA(NULL, 0, 10, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

    double Sell1_1 = iMA(NULL, 0, 10, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
    double Sell1_2 = iMA(NULL, 0, 10, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

    double CloseBuy1_1 = iMA(NULL, 0, 10, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
    double CloseBuy1_2 = iMA(NULL, 0, 10, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

    double CloseSell1_1 = iMA(NULL, 0, 10, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
    double CloseSell1_2 = iMA(NULL, 0, 10, 0, MODE_EMA, PRICE_CLOSE, Current + 1);


    //+------------------------------------------------------------------+
    //| 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) Order = SIGNAL_BUY;

    if (Sell1_1 < Sell1_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 75 trader24 est actif et passionnant
    Date d'inscription
    August 2008
    Localisation
    Sarlat
    Messages
    87
    Pouvoir de réputation
    13

    A mon avis ta variable current ne sert à rien et en plus tu ne l'as pas initialisé.
    il faut que tu mettes : int current=0;
    dans les ima(........,current+0 .... le current vaut n'importe quoi.

    Petit détail si tu veux que l'on corrige to code il vaut mieux qu'il soit clair du genre

    if (.....)
    instruction;
    else
    instruction;

    il vaut mieux ne pas mettre plusieurs instruction sur la même ligne

    Bonne chance

  3. #3
    Membre lvl 50 skl23105 est sur la route de la réputation...
    Date d'inscription
    August 2008
    Localisation
    creuse
    Messages
    58
    Pouvoir de réputation
    6

    bonjour trader 24
    Loin de moi l'idée de contredir qui que ce soit, maes talent trés récent de programmeur bas de gamme ne me le permettent pas
    tu me dis que le "current n'est pas initialiser mais l initialisation c'est bien ça non :


    int init() {
    BarCount = Bars;

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

    return(0);

    En partant du principe que le calcul est pris en compte à la fin de chaque bar bien sûr

    Sinon j ai bien remplacé current+0 par int current =0 est j ai des message d'erreur

    Le but de cette ea ( en réalité, je décompose un ea en plusieur), c'est de pouvoir me servir de celle ci comme base pour les stop buy et sell, ce petit bout de programme sera joint par la suite à un autre prog en MM pour acheter ou vendre sur une tendance géneral



    Donc c est vrai qu un coup de main sur cette partie est primordiale : sans elle , pas de stop buy ou sell dans la bonne tendance


    Merci de me lire

Discussions similaires

  1. Besoin également d’un coup de main
    Par flo1402 dans le forum Systèmes de Trading Auto
    Réponses: 3
    Dernier message: 25/11/2008, 09h28
  2. besoin d un programmeur pour MT4
    Par skl23105 dans le forum Systèmes de Trading Auto
    Réponses: 3
    Dernier message: 23/10/2008, 20h06
  3. Besoin d'aide pour l'échelle de temps
    Par greg300777 dans le forum Novice sur le Forex
    Réponses: 0
    Dernier message: 17/09/2008, 01h38
  4. Coup d'essai, coup de maître pour Saxo Bank
    Par Saxo Banque dans le forum Analyses Forex professionnelles
    Réponses: 0
    Dernier message: 29/07/2008, 09h40
  5. Besoin de conseils pour débuter
    Par Gloriay dans le forum Novice sur le Forex
    Réponses: 2
    Dernier message: 26/09/2007, 14h10

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