Symboles personnalisés. Erreurs, bogues, questions, suggestions. - page 33

 
RusPro #:

J'ai essayé votre test, c'est exactement la même chose - un décalage de quelques secondes. Pas sur le custom, mais sur les silver futures.

Instrument Silv-12.21. MICEX, courtier BCS. Mais je pense que ça n'a pas d'importance.

Mais dans votre cas, il est possible que le graphique ne soit pas construit sur les offres, ou que le courtier ait des flux de cotations et de transactions différents (bien que, sur la bourse - peu probable).

Le sujet ici concerne les instruments personnalisés.

 
Andrey Khatimlianskii #:

On ne parlait pas d'outils ordinaires, on parlait de castum. Par définition, toutes les informations les concernant sont disponibles dans le terminal, rien ne doit aller au serveur.

Peut-être qu'il y a un non-sens ici - comme une demande de temps de serveur ou autre. En général, il s'agit d'une bévue. Et si vous effectuez un test en l'absence de connexion physique, que se passera-t-il ? Je suis curieux, mais je n'ai rien pour le tester.

 

Bonjour à tous !
Pour une raison quelconque, l'histoire n'est pas copiée dans le symbole personnalisé. Le code est le plus simple. Je ne reçois aucune erreur, mais il n'y a pas de guillemets dans le symbole personnalisé.

Je veux juste transférer les cotations réelles avec un décalage d'une heure vers le symbole personnalisé.

Pouvez-vous me dire pourquoi le résultat est vide ?
Merci.


int OnInit()
  {
   
   string Sym1 = "EURUSD"; /// источник
   string Sym2 = "EURUSD2";   /// приемник
   int HBack = 1;   /// количество часов сдвига
   datetime tc = StringToTime(TimeCurrent());   /// конец участка
   datetime sht = tc - HBack * 60 * 60;
   datetime sht2 = tc - 2 * HBack * 60 * 60;
   
   MqlRates mrates[];
   
   if( CopyRates(Sym1, PERIOD_M1, sht, tc, mrates) < 0 ){
        
        Alert("Ошибка копирования исторических данных - ошибка:", GetLastError() );
        return(INIT_FAILED);
        
        }
        
   if( CustomRatesReplace(Sym2, sht2, sht, mrates, WHOLE_ARRAY) < 0 ){
      
      Alert("Ошибка вставки исторических данных - ошибка:", GetLastError() );
        return(INIT_FAILED);
        
        }
      
   
   return(INIT_SUCCEEDED);
  }
 

SymbolInfoXXX est implacablement à la traîne par rapport à iClose :

symboles personnalisés (ticks et barres).

J'ai constaté queSymbolInfoDouble et SymbolInfoTick, qui sont appelés dans l'EA, travaillant sur ce graphique, à un moment donné"se bloquent" : dans l'aperçu du marché les cotations changent, le graphique est mis à jour, iClose et CopyTicksRange obtiennent des données réelles, mais SymbolInfoXXX donne des informations périmées.

Dans le processus d'analyse il est venu au code le plus simple, qui était destiné à détecter ces "hangs", mais beaucoup plus tôt a démontré le problème de l'autre côté :SymbolInfoXXX est tout simplement retardé implacablement par rapport à iClose ! Vous pouvez le voir à l'œil nu :


Exécutez un tel EA sur votre graphique de castum, s'il vous plaît :

int OnInit(void)
{
        EventSetMillisecondTimer(10);
        return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
        EventKillTimer();
        Comment("");
}

void OnTimer(void)
{
        MqlTick tick;
        SymbolInfoTick( _Symbol, tick );

        Comment( "SymbolInfoInteger( _Symbol, SYMBOL_TIME ) = ", TimeToString( SymbolInfoInteger( _Symbol, SYMBOL_TIME ), TIME_SECONDS ),
                                        "\nSymbolInfoDouble( _Symbol, SYMBOL_BID ) = ", SymbolInfoDouble( _Symbol, SYMBOL_BID ),
                                        "\ntick.time = ", TimeToString( tick.time, TIME_SECONDS ),
                                        "\ntick.bid = ", tick.bid,
                                        "\niClose[0] = ", iClose( _Symbol, PERIOD_CURRENT, 0 ) );
}

(OnTimer peut être remplacé par OnTick, l'effet est le même).

Avez-vous des décalages similaires ?


 
Andrey Khatimlianskii #:

Exécutez un tel programme sur votre graphique de naufrage, s'il vous plaît :

Avez-vous des freins similaires ?

Sur un symbole personnalisé qui n'est pas mis à jour et qui n'a pas de tick dans Market Watch, aucun frein n'est ressenti.

 
MOZART09 symbole personnalisé. Le code est le plus simple.

Vous ne pouvez pas créer un symbole personnalisé avec le code le plus simple. Il y a beaucoup de culbutes. Regarde ça.

Пользовательские символы: основы применения на практике
Пользовательские символы: основы применения на практике
  • www.mql5.com
Статья посвящена программной генерации пользовательских символов, с помощью которых демонстрируется несколько популярных способов отображения котировок. Предложен вариант малоинвазивной адаптации советников для торговли реальным символом с графика производного пользовательского символа. Исходные коды MQL прилагаются.
 
fxsaber #:

Sur un symbole personnalisé qui n'est pas mis à jour et qui n'a pas de tick dans Market Watch, je ne sens pas les freins.

Probablement parce que les freins sont précisément dans la mise à jour (ou plutôt dans la réception des informations mises à jour par l'EA fonctionnant sur un tel graphique) ?

 
Andrey Khatimlianskii #:

Probablement parce que c'est la mise à jour (ou plutôt l'obtention d'informations mises à jour par un EA fonctionnant sur un tel graphique) qui ralentit les choses ?

Je n'utilise pas de symboles personnalisés pouvant être mis à jour, et je n'en ai donc pas connaissance.

 

Build 3091, pris des citations suspendues (clic) :


Le dernier tick retourné par SymbolInfoDouble et SymbolInfoTick est 04:52:07 (bid 61083.19)

En même temps que les ticks les plus récents sont dans l'historique de l'instrument, le graphique et marketwatch sont mis à jour, iClose renvoie la valeur correcte.

Il existe un code pour le reproduire. Qu'est-ce que je dois réparer d'autre ?

 

J'ai trouvé une dépendance - seuls les instruments sur lesquels les graphiques étaient ouverts (et l'EA était exécuté pour les suivre, respectivement) ont gelé.

Si je change l'instrument graphique pour un autre (également castrum, mais non actif jusqu'à présent), tout est correct. Si nous revenons à un instrument "gelé", ou si nous ouvrons un nouveau graphique pour celui-ci, les SymbolInfoDouble et SymbolInfoTick sont toujours dans le même état gelé.

Raison: