Caractéristiques du langage mql5, subtilités et techniques - page 99

 
fxsaber:

Le besoin se fait sentir de transférer par référence sans modification - soit pour la vitesse, soit pour l'objet.

S'il n'y a pas besoin de le passer pour modification, alors vous pouvez simplement ignorer tout ce que j'ai écrit).

Avez-vous un exemple réel dans MQL5 où ce problème se produit ?

Un véritable exemple de commodité fait défaut.

J'ai tout décrit en détail, à la fois en mots et en code. Si cela vous semble incompréhensible pour une raison quelconque, c'est que vous n'êtes manifestement pas confronté aux problèmes décrits, et je vous en félicite. Bonne nuit, cher ami.)

Mon message s'adressait probablement davantage aux templateurs purs et durs et aux amateurs de contrôle des types.

 
Alexey Navoykov:

Il est souvent nécessaire de passer une variable en tant qu'argument de modèle par référence pour la modifier. Cependant, la spécification existante des modèles C++ ne permet malheureusement pas de spécifier explicitement la non-constance de l'argument, comme c'est le cas dans les fonctions normales :

Tout d'abord, le C++ dispose simplement de capacités de template beaucoup plus riches, et ensuite, le C++ dispose de SFINAE, qui vous permet d'embrouiller les choses au point de vous faire dresser les cheveux sur la tête.

C'est à ça que ça peut ressembler :

template<class T>
    static void const_check(T & t){
        BOOST_STATIC_ASSERT(! boost::is_const<T>::value);
    }
C'est la même chose qu'avec un pointeur. Vous ne pouvez pas spécifier directement que le type que vous voulez ne doit pas être un pointeur, mais vous pouvez le faire par une spécialisation non compilée.
 
TheXpert:

cela pourrait ressembler à ceci

D'après ce que j'ai compris, cela provoque une erreur de compilation dans le corps de la fonction (qui peut être appelée de toute façon), mais cela n'affecte pas le processus de sélection du modèle. Il faut manipuler avec le type de la valeur de retour de la fonction. Mais peu importe. Mais tout cela est mis en œuvre non seulement par le biais de modèles, mais aussi par le spécificateur decltype, qui est absent de MQL et toujours nécessaire.

 
Alexey Navoykov:

Mon message s'adressait probablement davantage aux modélistes purs et durs et aux amateurs de contrôles de type intello.

Je pensais qu'après avoir écrit TypeToBytes, j'étais devenu plus compétent en matière de modèles.

 
fxsaber:

Je pensais qu'après avoir écrit TypeToBytes, j'étais devenu plus compétent en matière de modèles.

Je me rends compte maintenant que l'expression "hardcore pattern maker" en relation avec MQL semble ironique. C'est comme un "programmeur MQL certifié". ))

Le problème est qu'il n'y a rien de particulièrement difficile à faire dans les modèles, et pas seulement à cause du manque de fonctionnalité supplémentaire du langage, mais aussi à cause du mauvais fonctionnement de celle qui existe. Je rencontre constamment des bogues.

 

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

Bugs, bugs, questions

Slava, 2018.09.19 06:37

Pour placer un objet au-dessus de tous les autres, quel que soit l'ordre, vous devez d'abord le rendre invisible sur toutes les échéances, puis le rendre à nouveau visible.
 

Bonjour !

Ladocumentation indique explicitement que lorsque le gestionnaire OnTickest en cours d'exécution https://www.mql5.com/ru/docs/runtime/event_fire#newtick

est inactif et aucun nouveau ticks n'est traité. Est-ce qu'il en va de même pour lesgestionnaires OnBookEvent, OnTimer, OnChartEvent ou non.

La question est due au fait que dans tous les gestionnaires ci-dessus, j'utilise mon propre traitement des tics.

Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Сразу же после того, как клиентский терминал загрузит программу (эксперт или пользовательский индикатор) и запустит процесс инициализации глобальных переменных, будет послано событие Init, которое обрабатывается функцией OnInit(), если она есть. Это событие также генерируется после смены финансового инструмента и/или периода графика, после...
 
Andrey Kotrin:

Bonjour !

Ladocumentation indique explicitement que pendant l'exécution du gestionnaire OnTick https://www.mql5.com/ru/docs/runtime/event_fire#newtick

Est-ce qu' il en va de même pour les gestionnaires OnBookEvent, OnTimer, OnChartEvent ou non.

La question est due au fait que tous les gestionnaires ci-dessus utilisent leur propre traitement des tics.

C'est faux.

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

Bibliothèques : HistoryTicks

fxsaber, 2018.04.10 17:53

Combat EA sur un symbole à haute fréquence (200-350 ticks par minute) avec des ordres de commerce fréquents (plusieurs fois par minute) et un ping de 100 ms en mode standard perd ~5% des ticks.

En mode HistoryTicks, aucune perte.


N'hésitez pas à utiliser le système OnTick multidevises dans MT5.

 
fxsaber:

Définitivement pas correct.


ZZY Vous pouvez utiliser en toute sécurité OnTick multidevises sous MT5Z

Merci pour le lien ! En fait, le problème ne réside pas dans la perte de ticks, mais dans l'éventuelle mise à jour partielle de l'information lors du traitement de l'information courante. J'ai résolu un problème similaire lors de la communication entre les robots qui effectuent des transactions simultanément.

Comme le robot est orienté sur un service d' hébergement utilisant desdllsexternes et donc quelemutexest impossible, j'ai utilisé l'émulation GlobalVariableSetOnCondition.

 
Andrey Kotrin:

Merci pour le lien ! En fait, le problème ne réside pas dans la perte de ticks, mais dans l'éventuelle mise à jour partielle de l'information lors du traitement de l'information courante. J'ai eu un problème similaire pour organiser la communication entre les robots qui effectuent des transactions simultanément.

Comme mon robot est orienté sur un service d' hébergement utilisant desdllstierces et donc quelemutexest impossible, j'ai utilisé l'émulation GlobalVariableSetOnCondition.

Vous pouvez peut-être utiliser les ressources pour transférer des données.