Erreurs, bugs, questions - page 446

 
voix_kas:

Code d'erreur : 4756. Vous pouvez le voir dans la capture d'écran.

1. Une fois de plus, je répète ma question - Liste des symboles qui sont censés négocier sélectivement sélectionnés (c'est-à-dire pour tous les symboles qui vont négocier mult a été exécuté la commande SymbolSelect avec le deuxième paramètre true) ?

Je conseille dans le bloc d'initialisation de sélectionner tous les symboles qui sont requis par SymbolSelect et de vérifier cette erreur après cette modification.

2. Aux développeurs:

a) Pourquoi la liste des symboles du terminal devrait-elle inclure explicitement les symboles qui n'ont pas été sélectionnés à l'aide de SymbolSelect (en supposant qu'aucune action n'a été effectuée sur eux, sauf la collecte de certaines informations) ?

b) ne pensez-vous pas que des choses apparemment inoffensives comme SymbolsTotal(false) et SymbolName(index,false) conduisent à l'affichage explicite des symboles dans la fenêtre de visualisation.

D'après ce que je comprends, cela devrait être comme ceci - No SymbolSélectionnez aucun symbole parmi ceux affichés dans MarketWatch.

c) D'après ce que je comprends, le testeur doit télécharger tous les symboles qui sont interrogés, et n'afficher que ceux qui sont sélectionnés à SymbolSelect ou pour lesquels l'utilisateur essaie d'obtenir les prix ou toute autre information pertinente.

Par exemple, si j'essaie de déterminer si un symbole est synchronisé ou quelle est la profondeur de son historique sur le serveur, pourquoi devrait-il être immédiatement placé dans MarketWatch avec le signe de sélection ?

 
voix_kas:

Et comment puis-je attraper le code d'erreur au point que vous indiquez ? J'enregistre l'erreur sur la dernière ligne du code ci-dessus.

Cette erreur n'apparaît pas si le terme suivant est ajouté juste avant ce code :

Par exemple, comme ceci :

double price=SymbolInfoDouble(Instrumet, SYMBOL_ASK);
if(price==0.0)
  {
   Print("Ай-яй-яй. Ошибка ",GetLastError());
   return(false);
  }
TradeRequest.price = price;
 
Interesting:

2. La question aux développeurs - Pourquoi les symboles qui n'ont pas été sélectionnés à l'aide de SymbolSelect (en supposant qu'aucune action n'a été effectuée sur eux autre que la collecte de certaines informations) se retrouvent dans la liste des symboles terminaux sous une forme explicite (vous pouvez le voir dans la capture d'écran ci-dessus) ?

Le testeur MT5 utilise une simulation très précise des conditions de trading, y compris la conversion la plus exacte des profits dans la devise de la balance.

Cela signifie que lorsque nous travaillons avec des croisements, nous devons simuler la paire de devises de base pour recalculer le bénéfice. C'est-à-dire que lorsqu'on travaille sur certains instruments (croix), il y a un double volume de modélisation, de sorte qu'à chaque seconde, le calcul est absolument précis et répétable.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

Intéressant
Bien sûr. Ce code vient avant toutes les actions ultérieures :

if (SymbolInfoInteger(Instrumet, SYMBOL_SELECT) || SymbolSelect(Instrumet, true))
{
  ...
}

Si la condition n'est pas remplie, aucune autre action n'est effectuée sur cet outil.

A propos de"SymbolSelect " pendant l'initialisation... Vous pensez donc que lepremier appel ( SymbolSelect(Instrumet, true) ) ne charge pas l'outil?

C'est juste que je passe d'abord par les symboles de présence (initialisation). Puis, dans OnTick|OnTimer, je sélectionne explicitement l'instrument s'il n'était pas sélectionné auparavant.

oncleVic

Merci. C'est ainsi que je traite cette erreur.
Si vous le pouvez, expliquez-nous ce qui provoque l'apparition du prix nul. Et cela peut-il se produire dans la vie réelle (c'est-à-dire en mode temps réel, et pas seulement pendant les tests) ?

 
voix_kas:

Intéressant
Bien sûr. Ce code vient avant toutes les actions ultérieures :

Si la condition n'est pas remplie, aucune autre action n'est effectuée sur cet outil.

A propos de"SymbolSelect" pendant l'initialisation... Vous pensez donc que lepremier appel ( SymbolSelect(Instrumet, true) ) ne charge pas l'outil?

C'est juste que je passe d'abord par les symboles de présence (initialisation). Puis, dans OnTick|OnTimer, je fais une sélection explicite si l'outil n'a pas été sélectionné auparavant.


C'est étrange, soit je ne comprends pas quelque chose, soit il y a un code quelque part qui ne fonctionne pas comme je l'attends.

Pour autant que je sache, SymbolSelect est suffisant pour être utilisé une fois, dans le bloc d'initialisation (il est préférable de vérifier le résultat).

Dans mon testeur, je forme simplement MarketWatch à partir d'un tableau préparé au préalable comme ceci

  //Forming list of symbols
  for(int f=0;f<ArraySize(ArrSymbolsEA);f++)
  {
  SymbolSelect(ArrSymbolsEA[f],true);
  }

Il suffit généralement de rendre tous les symboles disponibles pour la négociation dans le testeur de stratégie.

Cependant, dans ce cas, si un symbole n'est pas trouvé dans le journal, vous obtiendrez une erreur comme celle-ci

2011.07.06 18:47:57     symbol NZDUSD does not exist

Si tout fonctionne correctement, la fenêtre du testeur devrait ressembler à ceci


 
voix_kas:

Merci. C'est exactement comme ça que je contourne cette erreur maintenant.
Si vous pouviez expliquer ce qui provoque le prix zéro ? Et cela peut-il se produire dans la vie réelle (lire, en mode "temps réel", pas seulement pendant les tests) ?


Quel est le code d'erreur?
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений - Документация по MQL5
 

Aux développeurs

J'allais écrire ceci en SD, mais j'ai changé d'avis. Veuillez ajouter la fonction bool SymbolExists(name) / bool SymbolIsExists(name).

Objectif - détermine si un symbole spécifié est trouvé sur le serveur. En cas de succès, la réponse est vraie.

Seulement de cette manière, ce symbole ne sera pas affiché dans MarketWatch (le principe est le même que pour SymbolIsSynchronized).

Tout cela permettra de se débarrasser de ces problèmes.

2011.07.06 18:47:57     symbol NZDUSD does not exist
 
uncleVic:
Quel est le code d'erreur?

D'après le testeur de stratégie, deux erreurs sont générées en même temps. Seul le dernier peut être intercepté.
Comment je le sais ? J'ai donné le code ci-dessus. Où dois-je mettre les informations relatives au code d'erreur ?

 
Interesting:

C'est étrange, soit je ne comprends pas quelque chose, soit il y a un code quelque part qui ne fonctionne pas comme je le pense.

...

Si tout a fonctionné comme prévu, la fenêtre du testeur doit ressembler à ceci

Veuillez exécuter le testeur avec votre multidevise à partir du 2011.01.03 00:00:00.

Jusqu'au 2011.01.03 00 :59:59 seulement 3 paires de devises sont disponibles (qui sont affichées dans marketwatch, vous pouvez voir sur la capture d'écran). En commençant par 2011.01.0301:00:00 - tout est normal.

P.S.

Nous parlons de comptes de démonstration MQ (pour se préparer au championnat).

 
voix_kas:

Veuillez exécuter le testeur avec votre multidevise à partir du 2011.01.03 00:00:00.

J'ai jusqu'au 2011.01.03 00 :59:59 seulement 3 paires de devises sont disponibles (qui sont affichées dans marketwatch, vous pouvez voir sur la capture d'écran). En commençant par 2011.01.0301:00:00 - tout est normal.

P.S.

Nous parlons de comptes de démonstration MQ (pour se préparer au championnat).

L'historique par symboles est-il synchronisé ?