Comment mettre à jour les indicateurs pour la version 600+ ? - page 2

 
parce que pour une raison quelconque (probablement un bug) les tableaux ne sont pas initialisés
 
qjol:
parce que pour une raison quelconque (probablement un bug) les tableaux ne sont pas initialisés.


Jusqu'à présent, je n'ai pas obtenu de valeur pour 'T3MA' et 'HMA'.

C'est probablement la raison pour laquelle cet EA n'ouvre aucun ordre puisque ces deux indis sont utilisés.

Ou ai-je fait une erreur dans l'EA ?

Dossiers :
xxp.mq4  5 kb
 
Arav007:


Jusqu'à présent, je n'ai pas obtenu de valeur pour 'T3MA' et 'HMA'.

Je vous l'ai déjà dit

qjol:
parce que pour une raison quelconque (probablement un bug), les tableaux ne sont pas initialisés.

C'est probablement la raison pour laquelle cet EA n'ouvre pas d'ordre puisque ces deux indis sont utilisés.

Je ne sais pas, peut-être, probablement, peut-être, possible, probable, raisonnable...

Ou ai-je fait une erreur dans l'EA ?

Je ne le pense pas

 
Arav007:


Oui, vous avez raison. Mais pourquoi ?

Je les ai compilés comme le dit SDC et j'ai trouvé '0' erreur ou avertissement.

Alors que puis-je faire pour les mettre à jour vers B-600+ ?

HMA.mq4 a un bug, changez cette ligne dans init() :

   if(!SetIndexBuffer(0,ind_buffer0) && !SetIndexBuffer(1,ind_buffer1))

à
   if(!SetIndexBuffer(0,ind_buffer0) || !SetIndexBuffer(1,ind_buffer1))
 
qjol:



Cet EA n'ouvre aucune transaction même dans le Build 509 où les deux 'T3MA' et 'HMA' fonctionnent bien.

Quelle peut être la raison alors ?

 

Bogue similaire dans T3MA.mq4, changer en :

   if(
      !SetIndexBuffer(0,e7) ||
      !SetIndexBuffer(1,e2) ||
      !SetIndexBuffer(2,e3) ||
      !SetIndexBuffer(3,e4) ||
      !SetIndexBuffer(4,e5) ||
      !SetIndexBuffer(5,e6) ||
      !SetIndexBuffer(6,e1)
      )

Ce sont des bogues logiques que le compilateur ne peut pas attraper.

Ces bogues sont déjà présents dans la build 509, mais ne posent pas de problème car SetIndexBuffer a peu de chance d'être faux. C'est maintenant un problème dû à ce changement:

Shortened conditions check is now used in logical operations, unlike the old MQL4 version where all expressions have been calculated and the check has been performed afterwards. Suppose there is a check of two conditions with the use of logical AND

  if(condition1 && condition2)
    {
     // some block of operations
    }

Si l'expression condition1 est fausse, le calcul de l'expression condition2 n'est pas effectué, car le résultat false && true est toujours égal à false.


 
angevoyageur:

Bug similaire dans T3MA.mq4, changer en :

Ce sont des bogues logiques que le compilateur ne peut pas attraper.

Merci beaucoup Monsieur.

Oui, c'était les bogues et ils fonctionnent maintenant :)

Pouvez-vous regarder pourquoi l'EA n'ouvre aucun ordre malgré le fait que ces indicateurs fonctionnent ?

Salutations

 
Arav007:


Pouvez-vous vérifier pourquoi l'EA n'ouvre aucun ordre malgré le fait que ces indicateurs fonctionnent ?



Montrez le code de votre EA
 
qjol:

montrez votre code EA


Le voici :

extern double    LotSize=0.01;
extern double    StopLoss=15.0;
extern double    TakeProfit=20.0;
extern int       iMaxOrders=10;
extern int       Slippage=5;
extern int       MagicNumber=814;


extern int       iOrderType_Buy=0;
extern int       iOrderType_Sell=1;


int BuyOrder;
int SellOrder;

int iOpenOrders_Sell;
int iOpenOrders_Buy;

int iLastError;


double dPip;
double dStopLossPrice, dTakeProfitPrice;


//+------------------------------------------------------------------+
#define  MODE_DEMA    4
#define  MODE_TEMA    5
#define  MODE_T3MA    6
#define  MODE_JMA     7
#define  MODE_HMA     8
#define  MODE_DECEMA  9
#define  MODE_SALT    10
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
extern   int      MA_Period               = 34;
extern   int      MA_Type                 = MODE_HMA;
extern   int      MA_Applied              = PRICE_CLOSE;
extern   double   T3MA_VolumeFactor       = 0.8;
extern   double   JMA_Phase               = 0.0;
extern   int      Step_Period             = 3;
extern   int      BarsCount               = 100;
extern   bool     DebugMode               = false;
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{

if(Digits==3){
        dPip = 0.01;
}else{
        dPip = 0.0001;
}

return(0);

}

int deinit()
{

Comment("");
return(0);

}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+



int start()
{

   double  signal = iCustom(NULL,0,"xpMA",MA_Period,MA_Type,MA_Applied ,T3MA_VolumeFactor,JMA_Phase,Step_Period,DebugMode,3,0);
   
   bool BuyCondition = false , SellCondition = false , CloseBuyCondition = false , CloseSellCondition = false; 
   
   if (signal==1)
       BuyCondition = true;
       
   if (signal==-1)
      SellCondition = true;

///////////////////////////// Checking Buying Condition
if(BuyCondition)
{               
                double OpenPrice=Ask;

                
                dStopLossPrice = NormalizeDouble(OpenPrice - StopLoss * dPip,Digits);
                dTakeProfitPrice = NormalizeDouble(OpenPrice + TakeProfit * dPip,Digits);
                

                BuyOrder=OrderSend(Symbol() , iOrderType_Buy , LotSize,OpenPrice,Slippage ,dStopLossPrice ,dTakeProfitPrice , "Buy Order",MagicNumber , 0,Blue);
                
                
                 if(BuyOrder>0) {
                                Print("Buy Order was Opened");
                                iLastError = 0;
                        }
                        else
                        {                       
                                iLastError = GetLastError();                    
                        
                        }
        
}
        

if(SellCondition)
{       
                OpenPrice=Bid;
                
                dStopLossPrice = NormalizeDouble(OpenPrice + StopLoss * dPip,Digits);
                dTakeProfitPrice = NormalizeDouble(OpenPrice - TakeProfit * dPip,Digits);

                SellOrder=OrderSend(Symbol() , iOrderType_Sell , LotSize,OpenPrice,Slippage ,dStopLossPrice ,dTakeProfitPrice , "Sell Order",MagicNumber , 0,Red);
                
                
                if(SellOrder>0) {
                                Print("Sell Order was opened");
                                iLastError = 0;
                        }else{
                                iLastError = GetLastError();
                        
                        }               
        }
                


return (0);

}
 

iCustom

Calcule l'indicateur personnalisé spécifié et renvoie sa valeur.

double iCustom(
string symbole, // symbole
int timeframe, // timeframe
string name, // chemin/nom du programme compilé de l'indicateur personnalisé
... // paramètres d'entrée de l'indicateur personnalisé (si nécessaire)
int mode, // indice de ligne
int shift // décalage
) ;

Paramètres

symbol

[in] Nom du symbole sur les données duquel l'indicateur sera calculé. NULL signifie le symbole actuel.

timeframe

[in] Cadre temporel. Il peut s'agir de l'une des valeurs de l'énumération ENUM_TIMEFRAMES. 0 signifie la période actuelle du graphique.

name

[in] Nom du programme compilé de l'indicateur personnalisé, relatif au répertoire racine des indicateurs (MQL4/Indicators/). Si l'indicateur est situé dans un sous-répertoire, par exemple, dans MQL4/Indicators/Examples, son nom doit être spécifié comme "Examples\\indicator_name" (la double barre oblique inversée "\\" doit être spécifiée comme séparateur au lieu d'un simple).

...

[in] Paramètres d'entrée de l'indicateur personnalisé, séparés par des virgules.

Les paramètres passés et leur ordre doivent correspondre à l'ordre de déclaration et au type des variables externes de l'indicateur personnalisé. Si les valeurs des paramètres d'entrée ne sont pas spécifiées, les valeurs par défaut seront utilisées.

Raison: