Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1738

 
Nikolay Ivanov #:

Votre code imprime 0, pas -1...

Peut-être que -1 est imprimé ailleurs, le plus probable est que tout le code soit dans les imprimantes...

Oui, vous avez raison, chaque étape est pré-imprimée pour voir où il a "calé".

L'exemple est incorrect, désolé, le code lui-même est gros.

Mais, la solution de Konstantin a résolu le problème ! J'ai vraiment échangé les i-- et les contrôles de zéro partout, et maintenant la logique fonctionne comme elle le devrait, au lieu de -1 elle sort 0 ou 1. (avant 0 ou -1, ce dernier étant une erreur immédiate).

 
Nikolay Ivanov #:

Votre code imprime 0, pas -1...

Il est possible que -1 soit imprimé ailleurs, le plus probable est que tout le code soit dans les imprimantes...

Avant d'essayer de résoudre le problème, vous devez l'identifier... Assurez-vous qu'elle est là et localisez-la avant de la résoudre...

Prenez un stylo et une feuille de papier. Et écrivez comment la boucle compte. Dans ce code.

void OnStart()
  {
int i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
  }

vérification de

if (i==0) break;

ne fonctionnera jamais dans ce code. À moins que vous n'ayez initialement défini

int i=11;

une valeur impaire. Si c'est pair, alors ce code

int i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

à

if (i==0) break;

viendra avec une valeur impaire.

 
Nikolay Ivanov #:

Avant d'essayer de résoudre un problème, vous devez l'identifier... S'assurer qu'il est là et le localiser, puis le résoudre...

Je vois ce que vous voulez dire.

 
Konstantin Nikitin #:

Prenez un stylo et une feuille de papier. Et écrivez comment le cycle est compté. Dans ce code.

Pourquoi prendrais-je un stylo et du papier si la condition dit que l'impression =-1, mais en fait (j'ai vérifié) elle imprime comme 0, c'est-à-dire que l'exemple est donné incorrectement. Et il est impossible de donner une réponse correcte à un exemple incorrect...

 
Nikolay Ivanov #:

Pourquoi prendrais-je un stylo et du papier si la condition dit que l'impression =-1, mais en fait (j'ai vérifié) elle imprime comme 0, donc l'exemple est incorrect. Et il est impossible de donner une réponse correcte à un exemple incorrect...

Le zéro est imprimé à partir de cette ligne

for (i; i>0; i--)

et non à partir de la sortie de contrôle et de rupture.

En général, il est plus correct d'écrire

for (i; i>= 0; i--)

parce que les tableaux commencent avec un index zéro

 
Konstantin Nikitin #:

Le zéro est imprimé à partir de cette ligne

pas du contrôle de la pause et de la sortie.

0 est imprimé à partir de cette ligne, pour le code qui a été donné...

Print(i);

La question n'était pas de savoir pourquoi break ne fonctionne pas, la question était de savoir pourquoi l'imprimante imprimait -1... c'est tout. Et peu importe que le début du i soit pair ou impair, il n'imprime jamais -1....

 
Pouvez-vous me dire comment compter les ticks ou les bougies sur une longue période de temps ? (Une année, par exemple).

Essayant Close[], mais l'indice ne donne pas plus de 5000.
 
Ivan Butko #:
Pouvez-vous me dire comment calculer les ticks ou les bougies sur une longue période de temps ? (Une année, par exemple).

J'ai essayé Close[], mais l'index ne donne pas plus de 5000.

Les tiques ou les bougies font une telle différence, c'est pour le moins effrayant...

 
Alexey Viktorov #:

Il y a tellement de différence entre les tiques et les bougies que c'est effrayant de dire...

Par exemple, un EA, si vous lui spécifiez une période quelconque, dans le testeur, il ira par ticks ou par barres M1, tout le monde en tiendra compte.

Mais si vous prenez un EA qui va dans l'historique long en temps réel et prend des données à partir de là, je ne comprends pas comment l'organiser. Le terminal ne donne pas plus de 5000 bougies.


UPD
Je vais essayer d'utiliser ce truc, le code est sur le net.

MqlRates rates[];

   int copied=CopyRates(NULL,0,0,100,rates);

   if(copied<=0)

      Print("Ошибка копирования ценовых данных ",GetLastError());

   else Print("Скопировано ",ArraySize(rates)," баров");


UPD
Étrange. Tout d'un coup, ça marche. Même la millionième barre est vérifiée. Je n'ai rien fait, j'ai lu de la documentation, bu du thé. Je viens de le relancer et ça a marché. J'ai eu l'erreur toute la journée, bien que j'avais téléchargé l'historique et modifié les paramètres hier.
Donc, il n'y avait pas non plus besoin de vérifier le code supplémentaire (ci-dessus).
MT4 est un peu capricieux. Ou peut-être que forex chif possède une telle fonctionnalité. Je vais devoir mettre le standard au lieu de celui du courtier.

 
Ivan Butko #:

Par exemple, un Conseiller Expert, si vous lui donnez n'importe quelle période, il passera dans le testeur par ticks ou par barres M1, tout le monde en tiendra compte.

Mais si vous prenez un Conseiller Expert, qui en mode temps réel va dans l'historique long et prend des données à partir de là, je ne comprends pas comment l'organiser. Le terminal ne donne pas plus de 5000 bougies.


UPD
Je vais essayer d'utiliser ce truc, le code est sur le net.

MqlRates rates[];

   int copied=CopyRates(NULL,0,0,100,rates);

   if(copied<=0)

      Print("Ошибка копирования ценовых данных ",GetLastError());

   else Print("Скопировано ",ArraySize(rates)," баров");


UPD
Étrange. Tout d'un coup, ça marche. Même la millionième barre est vérifiée. Je n'ai rien fait, j'ai lu de la documentation, bu du thé. Je viens de le relancer et ça a marché. J'ai eu l'erreur toute la journée, bien que j'avais téléchargé l'historique et modifié les paramètres hier.
Donc, il n'y avait pas non plus besoin de vérifier le code supplémentaire (ci-dessus).
MT4 est un peu capricieux. Ou peut-être que forex chif possède une telle fonctionnalité. Je vais devoir mettre le standard, pas le courtage.

Le premier appel à CopyRates() a lancé le pompage des données historiques (ne l'exécutez pas pendant une semaine et vous obtiendrez à nouveau la même chose, enfin, peut-être pas une semaine, mais un certain temps).
Il vous suffit de vérifier la quantité de données présentes sur le serveur et de comparer la quantité disponible au conseiller expert. S'il est inférieur à ce qui est requis - laissez l'EA jusqu'au prochain tick. Au prochain tic, vérifiez à nouveau. Si, après un certain nombre de tentatives, l'historique requis n'est pas obtenu, cette erreur doit être traitée comme il se doit.

Raison: