Bonjour 2015.09.17_19:07 GMT+3 .J'ai défini les dimensions des tableaux dynamiques dans le programme EA. Et le compilateur donne des erreurs : "virgule attendue". Et s'il y a une variable dans le texte du programme, -- donne des avertissements : "la variable telle ou telle cache la déclaration de la variable au niveau global". Je ne comprends pas. Tout semble être correct, comme dans l'aide. Voici quelques extraits de code :
//--- tableau des prix maximaux des barres
bool ArraySetAsSeries(double &High[],bool) ;
//---
bool ArraySetAsSeries(double &Low[],bool) ;
//--- définir les tailles des tableaux avec reserve (reserve)
Bonjour 2015.09.17_19:07 GMT+3 .J'ai défini les dimensions des tableaux dynamiques dans le programme EA. Et le compilateur donne des erreurs : "virgule attendue". Et si dans le texte du programme il y a
Vous ne pouvez pas déclarer de tableaux avec les noms High[] et Low[], car il s'agit de noms système réservés aux tableaux-timeseries.
Mauvaise orthographe de ArrayResize. Ça devrait être comme ça :
//--- устанавливаю размеры массивов с запасом (reserve)ArrayResize(mrate,16,9);
ArrayResize(maVal,16,9);
ArrayResize(fVal,3,2);
ArrayResize(zVal,3);
Et la définition de l'indicateur timeseries pour un tableau ressemblerait à ceci :
-Aleks-: Je suis intéressé par le code que j'ai joint - je veux comprendre ce qu'il fait.
Le code que vous avez donné ne fait rien, ou plutôt il ne fonctionne pas. Erreur :
if(TimeN==0)
TimeN=TimeC;
Cette condition ne fonctionnera qu'une seule fois - la première fois que vous exécutez le programme. À ce stade, la variable statique sera initialisée.
La condition ci-dessous n'a aucun sens à vérifier puisque la variable TimeN dans votre code sera égale au zéro éternel (ou plutôt à la date du 1er janvier 1970) et ce zéro éternel sera comparé à la variable TimeC qui est égale à l'heure d'ouverture de la barre actuelle) :
Le code que vous avez donné ne fait rien, ou plutôt il ne fonctionne pas. Erreur :
Cette condition ne fonctionnera qu'une seule fois - la première fois que vous exécutez le programme. À ce stade, la variable statique sera initialisée.
La condition ci-dessous n'a aucun sens à vérifier puisque la variable TimeN dans votre code sera égale au zéro éternel (ou plutôt ce sera la date du 1er janvier 1970) et ce zéro éternel sera comparé à la variable TimeC qui est égale au temps d'ouverture de la barre actuelle) :
Maintenant je me demande pourquoi j'aurais dû l'écrire... dans le conseiller expert.
Il s'avère que je n'ai pas donné le code complet, le code correct était
int init()
{
static datetime TimeN=0;
return(INIT_SUCCEEDED);
}
int start()
{
datetime TimeC=iTime(NULL,TF,0);
if(TimeN==0)TimeN=TimeC;
if(TimeN==TimeC) return(0);
TimeN=TimeC;
// Код программы исполняется при появлении нового бара
return(INIT_SUCCEEDED);
}
Dans ce cas, ça marche, non ?
Avez-vous essayé de compiler ce code ? Il y a une erreur ici : la variable TimeN est déclarée dans OnInit() et lorsque vous quittez OnInit(), cette variable sera détruite. C'est pourquoi il y a une erreur dans la fonction OnTick()
Karputov Vladimir: Avez-vous essayé de compiler ce code ? Il y a une erreur ici : la variable TimeN est déclarée dans OnInit() et cette variable sera détruite à la sortie de OnInit(). Par conséquent, une erreur se produit dans la fonction OnTick()
Voici le code de travail :
J'ai écrit static datetime TimeN=0 ; dans la zone précédantintOnInit() - où les variables externes et autres sont déclarées.
Bonjour 2015.09.17_19:07 GMT+3 .J'ai défini les dimensions des tableaux dynamiques dans le programme EA. Et le compilateur donne des erreurs : "virgule attendue". Et s'il y a une variable dans le texte du programme, -- donne des avertissements : "la variable telle ou telle cache la déclaration de la variable au niveau global". Je ne comprends pas. Tout semble être correct, comme dans l'aide. Voici quelques extraits de code :
//--- tableau des prix maximaux des barres
bool ArraySetAsSeries(double &High[],bool) ;
//---
bool ArraySetAsSeries(double &Low[],bool) ;
//--- définir les tailles des tableaux avec reserve (reserve)
int ArrayResize(double &mrate[],int 16,int 9) ;
int ArrayResize(double &maVal[],int 16,int 9) ;
int ArrayResize(double &fVal[],int 3,int 2) ;
int ArrayResize(double &zVal[],int 3,int 0) ;
int ArrayResize(double &High[],int 1,int 0) ;
int ArrayResize(double &Low[],int 1,int 0) ;
//+------------------------------------------------------------------+
//| Fonction de désinitialisation experte |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Bonjour 2015.09.17_19:07 GMT+3 .J'ai défini les dimensions des tableaux dynamiques dans le programme EA. Et le compilateur donne des erreurs : "virgule attendue". Et si dans le texte du programme il y a
Si vous voulez dire mon code - alors oui, mon code vérifie la présence d'une nouvelle barre.
Je suis intéressé par le code que j'ai joint - je veux comprendre ce qu'il fait.
Le code que vous avez donné ne fait rien, ou plutôt il ne fonctionne pas. Erreur :
Cette condition ne fonctionnera qu'une seule fois - la première fois que vous exécutez le programme. À ce stade, la variable statique sera initialisée.
La condition ci-dessous n'a aucun sens à vérifier puisque la variable TimeN dans votre code sera égale au zéro éternel (ou plutôt à la date du 1er janvier 1970) et ce zéro éternel sera comparé à la variable TimeC qui est égale à l'heure d'ouverture de la barre actuelle) :
Le code que vous avez donné ne fait rien, ou plutôt il ne fonctionne pas. Erreur :
Cette condition ne fonctionnera qu'une seule fois - la première fois que vous exécutez le programme. À ce stade, la variable statique sera initialisée.
La condition ci-dessous n'a aucun sens à vérifier puisque la variable TimeN dans votre code sera égale au zéro éternel (ou plutôt ce sera la date du 1er janvier 1970) et ce zéro éternel sera comparé à la variable TimeC qui est égale au temps d'ouverture de la barre actuelle) :
Maintenant je me demande pourquoi j'aurais dû l'écrire... dans le conseiller expert.
Merci pour cette précision !
Si la nouvelle barre est sur l'échelle de temps M1, alors imprimez le message :
Il s'avère que je n'ai pas donné le code complet, le code correct était
int init()
{
static datetime TimeN=0;
return(INIT_SUCCEEDED);
}
int start()
{
datetime TimeC=iTime(NULL,TF,0);
if(TimeN==0)TimeN=TimeC;
if(TimeN==TimeC) return(0);
TimeN=TimeC;
// Код программы исполняется при появлении нового бара
return(INIT_SUCCEEDED);
}
Il s'avère que je n'ai pas donné le code complet, le code correct était
int init()
{
static datetime TimeN=0;
return(INIT_SUCCEEDED);
}
int start()
{
datetime TimeC=iTime(NULL,TF,0);
if(TimeN==0)TimeN=TimeC;
if(TimeN==TimeC) return(0);
TimeN=TimeC;
// Код программы исполняется при появлении нового бара
return(INIT_SUCCEEDED);
}
Voici le code de travail :
Avez-vous essayé de compiler ce code ? Il y a une erreur ici : la variable TimeN est déclarée dans OnInit() et cette variable sera détruite à la sortie de OnInit(). Par conséquent, une erreur se produit dans la fonction OnTick()
Voici le code de travail :
J'ai écrit static datetime TimeN=0 ; dans la zone précédantint OnInit() - où les variables externes et autres sont déclarées.