Erreurs, bugs, questions - page 1807

 
Vladislav Andruschenko:

juste pour être clair :

OK, ajouté au BOD.

Les bugs commerciaux sont plus alarmants qu'autre chose. Mise à jour vers 1531+ pour que les logs soient plus complets.

 
2017.02.16 08:53:03.158 Network '2250': disconnected from FXOpen-MT5
2017.02.16 08:53:03.285 MQL5    wrong type, loading of Test failed
2017.02.16 08:53:03.813 Network '5122740': authorized on MetaQuotes-Demo through Access Point EU Amsterdam (ping: 50.93 ms)

Qu'est-ce que c'est ?

Il n'y a rien en cours sur le seul graphique. Ce message s'affiche chaque fois que vous changez de compte.

 

@Slawa, la synchronisation s'étend-elle à TimeCurrent() ? Maintenant, j'ai l'image suivante : hier soir, à 22 h 45, j'ai éteint le terminal. Je l'ai allumé ce matin. Le marché est toujours fermé. FORTS. Les ticks arrivent avant l'ouverture du marché à 10h00, heure de Moscou. Les informations de chaque tick sont traitées dans OnBookEvent(). Le problème est que malgré la vérification redondante de la synchronisation :

bool GetRatesTotal( int& rates_total )                          // Количество просчитанных баров (out)
        {
         //--- Проверка переданного значения
         if( rates_total > 0 )                                                          // Если передано корректное значение
                 return( true );                                                                        // Возвращаем истину
         //--- Проверка синхронизации
         bool isSync = SymbolIsSynchronized( _Symbol );
         bool sync = (bool)SeriesInfoInteger( _Symbol, _Period, SERIES_SYNCHRONIZED );
         //---
    if( !isSync || !sync )                                                              // Если история не синхронизирована
        {
         Print( __FUNCTION__,": ОШИБКА РАССИНХРОНИЗАЦИИ! isSync = ",isSync,", sync = ",sync,", rt = ",rates_total );
         return( false );                                                                       // Выходим с ошибкой
        }
    //--- Определим число просчитанных баров
         rates_total = Bars( _Symbol, _Period );                // Определяем число баров
         if( rates_total <= 0 )                                                         // Если синхронизация не произведена
                {
                 Print( __FUNCTION__,": ОШИБКА #",GetLastError(),": Синхронизация по Bars() не пройдена!" );
                 return( false );                                                                       // Возвращаем ложь
                }
         else                                                                                                   // Если значение получено
                 return( true );                                                                        // Возвращаем истину
        }

suivi d'une demande de l'heure et du courant SYMBOL_SESSION_... valeur - HEURE NON CORRECTE = HEURE DE FERMETURE DU TERMINAL, c'est-à-dire 22:45 ! Par conséquent, l'entrée dans le fichier est tordue et les lectures sont confuses. Veuillez vérifier la fonction TimeCurrent() pour la synchronisation !

Ajouté :

La valeur de l'argument rates_total passé à la fonction est toujours = 0 ! C'est-à-dire que la synchronisation est vérifiée !

 
Alexey Kozitsyn:

L'HEURE N'EST PAS CORRECTE = HEURE DE FERMETURE DU TERMINAL, c'est-à-dire 22:45

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Bugs, bugs, questions

fxsaber, 2017.02.14 15:40

Si vous ne laissez que les symboles MOEX sur Metaquotes-Demo dans le Market Watch, TimeCurrent aura 15 minutes de retard. Dès qu'un seul symbole FOREX est ajouté, TimeCurrent avance de 15 minutes d'un coup.
 
fxsaber:

Il s'agit d'une véritable ouverture, il est peu probable que des caractères FOREX puissent y être ajoutés... Mais si c'est le cas, TimeCurrent() doit être vraiment tordue maintenant, et même elle ne peut pas être synchronisée par tous les moyens disponibles !

Encore une fois, si nous devions ajouter SYMBOL_SESSION_... seraient ajoutées à leur heure réelle d'arrivée, nous n'aurions pas un tel problème ! Et nous n'aurions pas à faire des béquilles avec TimeCurrent().

 
fxsaber:

D'ailleurs, le cas que vous décrivez est assez logique, car le délai de cotation de la bourse est de 15 minutes. Il n'y a pas de retard dû au forex, le temps est donc ajusté en fonction du forex. Mais, bien sûr, c'est une erreur. C'est-à-dire que TimeCurrent() "ne navigue pas" entre les différents marchés.

Il est également possible que TimeCurrent() provienne du fournisseur de liquidités. Et les liquidités sont collectées à différents endroits.

 
Alexey Kozitsyn:

D'ailleurs, le cas que vous décrivez est assez logique, car le délai de cotation de la bourse est de 15 minutes. Il n'y a pas de retard dû au forex, le temps est donc ajusté en fonction du forex. Mais, bien sûr, c'est une erreur. C'est-à-dire que TimeCurrent() "ne navigue pas" entre les différents marchés.

Il est également possible que TimeCurrent() provienne du fournisseur de liquidités. Et les liquidités sont collectées à différents endroits.

_TimeCurrent = MathMax(SymbolInfoInteger(Symbol1, SYMBOL_TIME), SymbolInfoInteger(Symbol2, SYMBOL_TIME), ...);
 
fxsaber:
_TimeCurrent = MathMax(SymbolInfoInteger(Symbol1, SYMBOL_TIME), SymbolInfoInteger(Symbol2, SYMBOL_TIME), ...);
Merci pour l'idée, nous devrions comparer SYMBOL_TIME et TimeCurrent(). Peut-être y aura-t-il des différences...
 
Alexey Kozitsyn:
Merci pour l'idée, je vais devoir comparer SYMBOL_TIME et TimeCurrent(). Peut-être y aura-t-il des différences...

Ooh... Je ne pensais pas que ça arriverait si vite :

2017.02.16 12:47:37.575 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:35 2017.02.16 10:47:36)
2017.02.16 12:47:37.575 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:35 2017.02.16 10:47:36)
2017.02.16 12:47:37.575 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:35 2017.02.16 10:47:36)
2017.02.16 12:47:37.575 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:35 2017.02.16 10:47:36)
2017.02.16 12:47:37.575 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:35 2017.02.16 10:47:36)
2017.02.16 12:47:37.575 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:35 2017.02.16 10:47:36)
2017.02.16 12:47:52.889 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:51 2017.02.16 10:47:52)
2017.02.16 12:47:52.890 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:51 2017.02.16 10:47:52)
2017.02.16 12:47:52.890 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:51 2017.02.16 10:47:52)
2017.02.16 12:47:52.890 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:51 2017.02.16 10:47:52)
2017.02.16 12:47:52.890 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:51 2017.02.16 10:47:52)
2017.02.16 12:47:52.890 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:51 2017.02.16 10:47:52)
2017.02.16 12:48:06.890 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:48:05 2017.02.16 10:48:06)
2017.02.16 12:48:06.890 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:48:05 2017.02.16 10:48:06)
2017.02.16 12:48:06.890 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:48:05 2017.02.16 10:48:06)
2017.02.16 12:48:06.890 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:48:05 2017.02.16 10:48:06)
2017.02.16 12:48:06.891 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:48:05 2017.02.16 10:48:06)
2017.02.16 12:48:06.891 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:48:05 2017.02.16 10:48:06)

Lorsque le terminal est allumé, éteint. Une erreur évidente de TimeCurrent() !

 
fxsaber:
_TimeCurrent = MathMax(SymbolInfoInteger(Symbol1, SYMBOL_TIME), SymbolInfoInteger(Symbol2, SYMBOL_TIME), ...);
Il n'y a vraiment que peu de choses à distribuer jusqu'à présent. En sélectionnant le temps le plus long. Mais cela représente un coût supplémentaire pour obtenir deux valeurs temporelles à chaque OnBookEvent()...
Raison: