Erreurs, bugs, questions - page 2932

 
x572intraday:

J'essaie de permettre à l'utilisateur de sélectionner les deux horizons temporels et leur nombre dans le menu de la fenêtre de configuration de l'indicateur :

et je veux que les périodes sélectionnées aillent directement dans PArray. Mais d'après l'exemple ci-dessus, il s'avère que j'affecte au tableau les valeurs prédéfinies dans le programme et non les valeurs entrées par un utilisateur. En outre, le compilateur génère des avertissements :

Lorsque j'essaie de remplacer la dernière ligne par :

le compilateur génère carrément une erreur :

De plus, NO_PERIOD=0 signifiePERIOD_CURRENT, et je n'ai pas besoin de cela, j'ai besoin de quelque chose comme false ou EMPTY_VALUE, mais ils ne correspondent pas du tout.

Comment puis-je le réparer ?

C'est presque réparé.

 
Les paramètres des symboles dans le testeur ne tiennent pas, les sessions de trading sont coupées le jeudi et le vendredi, à cause de cela il y a toujours une erreur marché fermé, les positions ne sont pas ouvertes, l'optimisation est impossible, le robot ne fonctionne pas correctement, les autres courtiers sont bien, mais celui-ci est nécessaire, que faire ? Je ne sais pas, mais je n'ai jamais eu ce genre de problème. Je ne sais pas, je ne sais pas si j'ai déjà enregistré le robot de trading, mais je n'ai jamais pu ouvrir de positions. Qui sait ce qu'il faut faire ? Enregistrement d'un nouveau compte, nettoyage du terminal des fichiers temporaires, essai d'un autre terminal, aucune aide. problèmes vidéo https://radikal.ru/video/1HA3UfUNVZt
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
SymbolInfoSessionQuote - Получение рыночной информации - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Pourriez-vous nous dire quelles sont les méthodes disponibles pour combattre l'erreur "array out of range" ? Tout d'abord, je ne peux pas utiliser Print pour imprimer un élément d'un tableau qui est sorti de sa plage, car le message d'erreur le précède et ne parvient pas à l'imprimer. Deuxièmement, cette erreur n'apparaît pas systématiquement, mais comme bon lui semble : elle est apparue une fois et l'indicateur n'a pas fonctionné (pourtant il est dans la liste des indicateurs sur le graphique), par contre, elle n'est pas apparue par la suite, sans recompiler l'indicateur, rien à dire sur sa modification.
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:
Dites-moi, quelles méthodes de lutte existent pour attraper et corriger l'erreur "array out of range" ?

ArrayResize() faire avant d'écrire un élément du tableau, compter et entrer à cet endroit le nombre d'éléments qui devraient être dans le tableau, ou utiliser un tableau dynamique qui devient lui-même gros. Vous sortez simplement du tableau. Par exemple, vous spécifiez une taille de 100 éléments, mais comme le premier élément est le numéro 0, certaines personnes ne s'y retrouvent pas, mais si vous écrivez les chiffres en ligne, cela correspondra à 0-99. Je ne suis pas un programmeur professionnel si quoi que ce soit (mais je peux), la première chose qui m'est venue à l'esprit, ça marche))).

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Объект динамического массива - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
freelancerAntonyan:

Effectuez ArrayResize() avant d'écrire un élément du tableau, comptez et entrez à cet endroit le nombre d'éléments qui devraient être dans le tableau, ou utilisez un tableau dynamique qui se développe tout seul.

En fait, c'est dynamique de toute façon. Extrait de l'aide :"La fonction ne peut être appliquée qu'aux tableaux dynamiques. Notez que les tableaux dynamiques affectés comme tampons d'indicateurs par la fonction SetIndexBuffer() ne doivent pas être redimensionnés. Pour les tampons indicateurs, toutes les opérations de redimensionnement sont effectuées par le sous-système d'exécution du terminal. "Mais ce n'est pas un tampon indicateur, donc il faut penser avec ses mains et sa tête...".

 
x572intraday:

En fait, c'est déjà dynamique. Extrait de l'aide :"La fonction ne peut être appliquée qu'aux tableaux dynamiques. Vous devez garder à l'esprit que les tableaux dynamiques affectés comme tampons d'indicateurs par la fonction SetIndexBuffer() ne peuvent pas être redimensionnés. Pour les tampons indicateurs, toutes les opérations de redimensionnement sont effectuées par le sous-système d'exécution du terminal. "Mais ce n'est pas un tampon indicateur, donc vous devrez penser avec vos mains et votre tête...".

Le problème de la capture de telles erreurs n'est résolu que par l'utilisation de "couches", comme une classe de tableau personnalisée qui intercepte l'adressage.

MQL's OOP notes: rubber arrays, safe numbers, exceptions handling and other tricks: part 1
MQL's OOP notes: rubber arrays, safe numbers, exceptions handling and other tricks: part 1
  • 2016.11.08
  • www.mql5.com
Today we're starting a patchy subject, which will combine many different things. This is why I decided to split it into parts. Out final goal is exception handling, but before we can address it, we
 

Lors du lancement de l'EA lorsque l'algotrading est désactivé, puis lors de l'activation de l'algotrading :

Selon le code d'erreur, l'interdiction de commerce demeure, bien que la propriété TERMINAL_TRADE_ALLOWED soit vraie.

#include <Greshnik\\ErrorDescription.mqh>
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
     {
      return;
     }
   MqlTradeRequest tr;
   MqlTradeResult r;
   ResetLastError();
   if(!OrderSend(tr,r))
     {
      int err=GetLastError();
      Print(err,"  ",cLng::CodeDescription(err));
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
2020.12.30 15:25:38.629 Experts automated trading is enabled
2020.12.30 15:25:39.159 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.297 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.397 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.499 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.725 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:42.781 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:43.129 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:43.758 Experts automated trading is disabled

Le résultat devrait être le suivant :

2020.12.30 15:29:58.406 Experts automated trading is enabled
2020.12.30 15:30:02.247 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:02.368 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:02.486 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:04.320 Experts automated trading is disabled
 
CopyTime(_Symbol,tf,0,1,Arr);
Évidemment, il faut toujours que ArraySize(Arr)=1. C'est le cas en cas de copie réussie. Mais dans quels cas la copie de la barre peut-elle échouer ? Parce que lorsquel'erreur "array out of range" se produit, le terminal pointe sur Arr[0].
 
x572intraday:
Évidemment, il devrait toujours être ArraySize(Arr)=1. C'est le cas en cas de copie réussie. Mais dans quels cas la copie de la barre peut-elle échouer ? Lorsque l'erreur "array out of range" se produit, le terminal pointe sur Arr[0].

J'ai trouvé l'erreur après tout, citation de l'aide :

4401

L'historique demandé n'a pas été trouvé.

Imprimé dans le journal de bord - c'est fait :

2020.12.31 14:45:20.474 test (EURUSD,H2)        ArraySize(Arr)=0; copied=-1; TF=PERIOD_H2
2020.12.31 14:45:20.474 test (EURUSD,H2)        Error Code = 4401

Qu'est-ce que j'en fais maintenant, où est-ce que je vais ? Suis-je une mauvaise main ou... ? Je ne fais que copier une mesure de 0 à 1, après tout. Comment cela (l'histoire) pourrait-il ne pas être ? D'autant que l'erreur ne s'affiche pas toujours. Ou est-il nécessaire de vérifier et de charger de force l'historique au préalable ?

 
x572intraday:

J'ai trouvé l'erreur après tout, je cite la référence :

Imprimé dans le Journal - compris :

Qu'est-ce que j'en fais maintenant, où est-ce que je vais ? Suis-je une mauvaise main ou... ?

Tu es sûr que c'est censé être un devoir ?

ArraySize(Arr)=0

et non une comparaison ?

ArraySize(Arr)==0
Raison: