ArraySetAsSeries

 

bonjour

double myMovingAverageArray[10];  // Création un tableau pour les valeurs de la moyenne mobile.
ArrayInitialize(myMovingAverageArray,0);// init a zero

puis

if(!ArraySetAsSeries(myMovingAverageArray,true))Print("true ko"); 


pourquoi cette fonction renvoie toujours flase 

la doc









 
Bonjour
je pense que la bonne syntaxe est 

if ( condition == vrai)
instruction
else
instruction
 
Gerard Willia G J B M Dinh Sy #:
Bonjour
je pense que la bonne syntaxe est 

if ( condition == vrai)
instruction
else
instruction

Tu n'as pas essayé

if(!ArraySetAsSeries(myMovingAverageArray,true))Print("true ko"); 

ou

if(ArraySetAsSeries(myMovingAverageArray,true)==false)Print("true ko"); 


Cela ne change rien et la fonction renvoie bien un booléen voir doc .Bon, bref, cette fonction ne fonctionne pas. Son seul avantage est de le dire, c'est déjà cela.

 
Essaye
if( ! ArraySetAsSeries(myMovingAverageArray,true))
Print("Pas bon"); 
else
Print("Bon"); 
 
Gerard Willia G J B M Dinh Sy #:
Essaye






nous somme peut être d'accord pour dir que la fonction ne fonctionne pas non?

 
Elle fonctionne de mon coté...
je ne sais pas quoi te dire
 
Essaye

bool test = ArraySetAsSeries(myMovingAverageArray,true)

et regarde dans le debug le résultat
essayes d'autres array, c'est peut être ton array 
myMovingAverageArray

 qui pose souci

 
Gerard Willia G J B M Dinh Sy #:
Elle fonctionne de mon coté...
je ne sais pas quoi te dire
//variable globale moyenne mobile
int movingAverage;              // pointeur moyenne mobile'
double myMovingAverageArray[10];  // Création un tableau pour les valeurs de la moyenne mobile.

 
//variable globale moyenne mobile exponentiel
int movingAverageExp;              // pointeur moyenne mobile exponentiel
double myMovingAverageArrayExp[10];  // Création un tableau pour les valeurs de la moyenne mobile exponentiel.




int OnInit()
  {

   if( ! ArraySetAsSeries(myMovingAverageArray,true))
   Print("Pas bon"); 
   else
   Print("Bon");
  
  
   ArrayInitialize(myMovingAverageArray,0);// init a zero
      // Initialisation de la moyenne mobile  https://www.mql5.com/fr/docs/indicators/ima
   movingAverage = iMA(_Symbol, PERIOD_M1, 20, 0, MODE_SMA, PRICE_CLOSE);  //creation d'un pointeur moyenne mobile

   ArrayInitialize(myMovingAverageArrayExp,0);// init a zero
     // Initialisation de la moyenne mobile triple expo https://www.mql5.com/en/docs/indicators/itema
   movingAverageExp = iTEMA(_Symbol,PERIOD_M1, 20, 0, PRICE_CLOSE);  //creation d'un pointeur moyenne mobile triple exp
 
  
   return(INIT_SUCCEEDED);
  }

tu l’initialise dans la fonction OnInit()  ?

 

C'est bon, j'ai trouvé. Pour cela, j'ai testé la fonction sur un robot vierge de tout code.



//+------------------------------------------------------------------+
//|                                                   testalacon.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"


//variable globale moyenne mobile exponentiel
int movingAverageExp;              // pointeur moyenne mobile exponentiel'
static double myMovingAverageArrayExp[10];  


//variable globale moyenne mobile
int movingAverage;              // pointeur moyenne mobile'
double myMovingAverageArray[10]; 


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {

   if( ! ArraySetAsSeries(myMovingAverageArray,true))
   Print("Pas bon"); 
   else
   Print("Bon");
  
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
//---
   
  }
//+------------------------------------------------------------------+
 
Normalement
Pour faire un buffer d'affichage
il te faut le créer au global. Met le en dynamique pour la taille, pas la peine de le limiter
avec les properties

Dans oninit
moi j'ai tendance à faire le SetIndexBuffer() puis après le ArraySetAsSeries()
 

Gerard Willia G J B M Dinh Sy #:

bingo

 double myMovingAverageArray[]; 
au lieux de
double myMovingAverageArray[10]; 


Merci
Raison: