Question programmation de script MT5

 

Bonjour,

Je veux savoir si il est possible de coder un script qui permet de rentrer en position sur une petite timeframe uniquement si certains critères sont respectés sur une plus haute timeframe ?

Exemple simple : 

Sur la timeframe M15, si l'EMA 21 est au dessus de l'EMA 50
Sur la timeframe M1, si l'EMA 21 croise l'EMA 50 à la hausse
-> Rentrer en position LONG

Sur la timeframe M15, si l'EMA 21 est en dessous de l'EMA 50
Sur la timeframe M1, si l'EMA 21 croise l'EMA 50 à la hausse
-> Ne PAS rentrer en position

Cordialement,

 

Bonjour,

Bon j'ai trouvé, c'est en effet possible la fonction suivante le permet : 

double iMA(string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)

Voici mon code finalisé pour ceux qui voudraient s'en inspirer : 

void OnTick()

{

    double smmaM15[], smmaM1[], emaM15[], emaM1[];

    

    int MysmmaM15 = iMA (_Symbol,PERIOD_M15,3,0,MODE_SMMA,PRICE_CLOSE);

    int MyemaM15 = iMA (_Symbol,PERIOD_M15,21,0,MODE_EMA,PRICE_CLOSE);

    int MysmmaM1 = iMA (_Symbol,PERIOD_M1,3,0,MODE_SMMA,PRICE_CLOSE);

    int MyemaM1 = iMA (_Symbol,PERIOD_M1,21,0,MODE_EMA,PRICE_CLOSE);

    

    ArraySetAsSeries(smmaM15,true);

    ArraySetAsSeries(emaM15,true);

    ArraySetAsSeries(smmaM1,true);

    ArraySetAsSeries(emaM1,true);

    

    CopyBuffer(MysmmaM15,0,0,3,smmaM15);

    CopyBuffer(MyemaM15,0,0,3,emaM15);

    CopyBuffer(MysmmaM1,0,0,3,smmaM1);

    CopyBuffer(MyemaM1,0,0,3,emaM1);

    

    if( (smmaM15[0] > emaM15[0]) && (smmaM1[1] > emaM1[1]) )

    {

      Comment("BUY");

    }

        

    if( (smmaM15[0] > emaM15[0]) && (smmaM1[1] < emaM1[1]) )

    {

      Comment("DO NOT ENTRY");

    }

    

    if( (smmaM15[0] < emaM15[0]) && (smmaM1[1] < emaM1[1]) )

    {

      Comment("SELL");

    }

    

    if( (smmaM15[0] < emaM15[0]) && (smmaM1[1] > emaM1[1]) )

    {

      Comment("DO NOT ENTRY");

    }

}
@+
Raison: