Erreurs, bugs, questions - page 2634

 
Igor Zakharov:

Non, ça ne l'est pas.

l'heure du serveur, d'ailleurs, ne s'arrête pas le samedi. voici le contraire : dans le terminal, l'heure du serveur est mise à jour avec l'arrivée d'une nouvelle cotation. Par exemple, vous n'avez qu'un seul symbole ouvert dans l'aperçu du marché (non seulement dans le testeur, mais aussi dans la réalité). et il n'y a pas de ticks pendant cinq secondes - pendant tout ce temps, la minuterie du temps serveur ne bougera pas. ceci est vrai pour le samedi : le temps serveur est en cours, mais le terminal ne le sait pas, car il n'y a pas de ticks. le testeur manquera simplement cette période.

J'ai déjà vérifié. Dans le testeur,TimeLocal fonctionne le week-end,TimeTradeServer aussi, maisTimeCurrent, bien sûr, ne fonctionne pas. Il n'y a pas de tic, mais l'heure du serveur est toujours là.

int OnInit()
{
  Print(__FUNCTION__," TimeCurrent     ",TimeCurrent());
  Print(__FUNCTION__," TimeLocal       ",TimeLocal());
  Print(__FUNCTION__," TimeTradeServer ",TimeTradeServer());

    EventSetTimer(3*3600);
 return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnTimer()
{
  Print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
  Print(__FUNCTION__," TimeCurrent     ",TimeCurrent());
  Print(__FUNCTION__," TimeLocal       ",TimeLocal());
  Print(__FUNCTION__," TimeTradeServer ",TimeTradeServer());
}
 
Igor Zakharov:

https://www.mql5.com/ru/forum/328008/page2#comment_14166682

Comme toujours, des vélos.

La question est de savoir pourquoi elle ne passe pas.
Après tout, les variables des paramètres, ont des valeurs initiales.

void MxResize(int row=1, int col=1)
{
   int A[row][col];    
      
}

Et si vous spécifiez la taille des mesures en chiffres

void MxSize(int row=1, int col=1)
{
   int A[1][1];    
      
}

Le compilateur le saute, quelle est l'astuce ?

Le développeur pourrait-il faire des commentaires à ce sujet ?

 
Andrey Khatimlianskii:

Dans quel but ? Pour lancer l'auto-optimisation le week-end ? Le réglage d'une minuterie à partir de OnTick à une distance de quelques minutes pourrait alors fonctionner. Si cela fonctionne, alors les tics se sont arrêtés et vous pouvez optimiser.

Si c'est à d'autres fins, formulez-les.

Non, pas à d'autres fins.

Je ne pensais pas que TimeLocal fonctionnait le week-end, alors j'ai fait ceci : j'ai ajouté quelques heures à TimeCurrent et vérifié le jour de la semaine. Si c'est samedi, alors commencez à optimiser.

Bien sûr, je ne peux pas être sûr du début du samedi, car le marché ferme différemment le vendredi ou les jours fériés.

De plus, je n'ai trouvé nulle part un moyen de déterminer si le marché est fermé ou non.

 
Petros Shatakhtsyan:

Non, pas dans un autre but.

Je ne pensais pas que TimeLocal fonctionnait le week-end, alors j'ai fait ceci : j'ai ajouté quelques heures à TimeCurrent et vérifié le jour de la semaine. Si c'est samedi, alors commencez à optimiser.

Bien sûr, je ne peux pas être sûr du début du samedi, car le marché ferme différemment le vendredi ou les jours fériés.

De plus, je n'ai trouvé nulle part un moyen de déterminer si le marché est fermé ou non.

Avez-vous essayé ?

SymbolInfoSessionTrade

ou

SymbolInfoInteger(SYMBOL_TRADE_MODE)

Quelque chose d'entre eux devrait être bon

 
Aleksey Mavrin:

L'avez-vous essayé ?

SymbolInfoSessionTrade

ou

SymbolInfoInteger(SYMBOL_TRADE_MODE)

L'un d'eux devrait être bon, je me souviens.

Non, je ne l'ai pas fait. Le manuel ne précise pas comment déterminer si le marché est ouvert ou non.

Le problème est que lorsque le marché "ouvre" le lundi, par exemple chez un courtier, les cotations commencent à arriver à 02:05 mais les transactions ne sont pas acceptées pendant quelques minutes et affichent "Marché fermé".

Je ne sais pas si cela va aider ou non.

SYMBOLE_DÉBUT_HEURE

Date de début de l'instrument (généralement utilisée pour les contrats à terme)

 
Petros Shatakhtsyan:

Non, je ne l'ai pas fait. Le guide ne dit pas spécifiquement comment déterminer si le marché est ouvert ou non.

Le problème est que lorsque le marché "s'ouvre" le lundi, par exemple chez un courtier, les cotations commencent à arriver à 02:05, mais les transactions ne sont pas acceptées avant quelques minutes, et le système affiche "Marché fermé".

Je ne sais pas si cela va aider ou non.

SYMBOLE_DÉBUT_HEURE

Il s'agit du symbol_start_time (généralement utilisé pour les futures).

LeSymbolInfoSessionTrade indique quand la transaction commence et leSymbolInfoSessionQuote quand les cotations arrivent.

up : ceci devrait aider

boolIsTradeAllowed(
const string symbol// symbole
datetimetested_time//time
) ;

Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
Получение рыночной информации / SymbolInfoSessionQuote - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Roman:

Comme toujours, des vélos.

La question ici est de savoir pourquoi une telle entrée échoue.
Après que toutes les variables des paramètres ont des valeurs initiales.

Et si vous spécifiez la taille des mesures en chiffres

alors le compilateur le saute, quel est le problème ?

Le développeur fera-t-il des commentaires à ce sujet ?

Roman, c'est la deuxième fois que vous tombez dans le piège d'un refus élémentaire de lire la documentation.

Seul unnombre entier peut être un index de tableau. Les tableaux ne peuvent pas avoir plus de quatre dimensions. La numérotation des éléments du tableau commence par 0. Le dernier élément d'un tableau unidimensionnel est numéroté 1 de moins que la taille du tableau, c'est-à-dire que l'accès au dernier élément d'un tableau de 50 entiers ressemblera à un [49]. Il en va de même pour les tableaux multidimensionnels, une dimension étant indexée de 0 à la taille de la dimension-1. Le dernier élément du tableau bidimensionnel de l'exemple ressemblerait à m[6][49].

Les tableaux statiques ne peuvent pas être représentés comme des séries temporelles, c'est-à-dire que la fonction ArraySetAsSeries() qui permet d'accéder aux éléments d'un tableau de la fin à son début ne leur est pas applicable. Si vous voulez donner accès à un tableau comme dans les séries chronologiques, utilisez un objet tableau dynamique.

Si vous accédez à l'extérieur du tableau, le sous-système d'exécution générera une erreur critique et l'exécution du programme s'arrêtera.

Et dans la documentation de mql4, si ma mémoire est bonne, il était clairement indiqué que les variables ne devaient pas être utilisées comme taille de tableau.

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов...
 
Roman:

Comme toujours, des vélos.

La question ici est de savoir pourquoi une telle entrée ne fonctionne pas.
Après tout, les variables des paramètres, ont des valeurs initiales.

Et si vous spécifiez la taille des mesures en chiffres

Puis le compilateur le saute, quel est le truc ?

Le développeur pourrait-il faire des commentaires à ce sujet ?

Je ne suis pas un développeur, mais je vais commenter.

Pour un tableau statique, le compilateur doit allouer un certain nombre d'octets en mémoire dès la compilation.

Combien de mémoire doit être allouée par le compilateur si nous ne connaissons pas la ligne et la colonne au moment de la compilation ?

Les valeurs initiales ne sont utilisées que si les paramètres sont omis lors de l'appel. Les paramètres réels ne sont connus qu'au moment de l'exécution.

Donc, pas d'astuces, apprenez la langue.

 
Aleksey Mavrin:

Non, ce n'est pas ça,SymbolInfoSessionTrade indique quand il y a des transactions etSymbolInfoSessionQuote quand les cotations arrivent.

ap : cela devrait aider.

boolIsTradeAllowed(
const string symbol// symbole
datetimetested_time//time
) ;

Je pense que ce n'est pas le bon. Il y a un sujet spécial ici :https://www.mql5.com/ru/forum/40295.

Je ne l'ai pas regardé en entier, surtout que c'est pour MQL4.

Je ne pense pas que le serveur doive envoyer des cotations de symboles si le marché est fermé.

Mon robot n'est pas vraiment affecté par cela, car après l'ouverture du marché, lorsque les ticks entrent, il analyse la tendance, les revirements, et cela prend du temps. Pendant ce temps, le marché s'ouvre.

Mais cela nous gêne si nous voulons exécuter manuellement des transactions pendant cette période. Si l'exécution est basée sur le marché, la demande est en attente jusqu'à l'ouverture du marché et est naturellement exécutée au prix actuel.

La fonction directe qui reçoit le nom du symbole et renvoie vrai/faux (marché ouvert/fermé) est clairement manquante.

Как правильно выяснить, что рынок закрыт? (mql4)
Как правильно выяснить, что рынок закрыт? (mql4)
  • 2015.01.31
  • www.mql5.com
Перевел советника в режим работы OnTimer() теперь когда рынок закрыт он этого не понимает и пытается торговать, в общем обращается к серверу и естественно получает ошибки и забивает логи журнала.
 

Cette plateforme (MT5) est-elle conçue pour le trading sur les marchés financiers ou s'agit-il d'un cirque ? Que devons-nous faire à chaque fois que nous devons refaire les codes pour vos mises à jour ? J'en ai marre.