C'est un bon truc. L'astuce consiste à appliquer le motif au TParent. Je n'ai jamais rien vu de tel auparavant.
Eh bien, ce n'est pas un héritage multiple. C'est en fait une chaîne Base -> A -> B -> C -> X. Qui vous empêche de l'utiliser directement si elle est suffisante ?
Eh bien, ce n'est pas un héritage multiple. C'est en fait une chaîne Base -> A -> B -> C -> X. Qui vous empêche de l'utiliser directement si elle est suffisante ?
Si, soudainement, l'héritage multiple est introduit, il suffirait d'une petite substitution dans une seule ligne
Dommage que le forum ne dispose pas d'un formulaire de pari en plus des sondages - comme un sondage avec des options, mais bloquant quelques "centimes" sur le compte pour la réponse. Ceux qui choisissent la bonne option obtiendront les paris des perdants après l'événement ;-). Je ne pense pas qu'ils l'introduiraient.
Eh bien, ce n'est pas un héritage multiple. C'est en fait une chaîne Base -> A -> B -> C -> X. Qui vous empêche de l'utiliser directement si elle est suffisante ?
Oui, mais la caractéristique principale est que toutes les classes sources sont définies et utilisées comme modèles. Cette chaîne peut donc être placée dans n'importe quel ordre. En substance, il n'y a pas de différence fondamentale avec l'héritage multiple. Comme je l'ai déjà écrit, les classes peuvent comporter des pièges. Quant aux interfaces, tout est identique. La seule chose est qu'il aura l'air un peu croûté, mais ici chacun est libre de décider s'il faut vérifier ou conduire ;)
Une dernière chose que j'aimerais ajouter. Une alternative complète à l'héritage multiple (et avec des options plus flexibles) pourrait être implémentée via la surcharge de l'opérateur fantôme. Mais MQ, pour une raison quelconque, n'a pas ajouté cette fonction de surcharge alors que je leur demande de le faire depuis longtemps. Et je n'ai même pas entendu de réponse concrète de leur part, ils se contentent de l'ignorer.
EA est compilé sous 1641 où l'historique de trading rapide est implémenté.
Est-il possible que l'optimisation arrive à l'Agent build 1596, où l'historique fonctionne TRÈS lentement, et par conséquent obtenir un ralentissement de l'optimisation à plusieurs reprises ?
De manière plus générale, l'optimisation sur le Cloud donne parfois des résultats différents non seulement en termes de temps, mais aussi en termes de calculs. Il arrive parfois que le résultat de l'optimisation ne coïncide pas avec une seule exécution.
Cela peut être dû au fait que les agents impliqués dans l'optimisation et un agent local impliqué dans une seule exécution peuvent avoir un numéro de construction différent.
Et chaque version contient des bogues différents. Par exemple, voici un bogue qui est pertinent aujourd'hui, mais qui n'était pas présent dans les builds il y a quelques années
Encore une fois le bug de HistorySelect dans le testeur. Il ne semblait pas l'avoir en 1626. En 1629, il y a.
#include <Trade\Trade.mqh>
voidOnTick()
{
static CTrade Trade;
constdatetime NowTime = TimeCurrent();
if (Trade.Buy(1) && Trade.PositionClose(_Symbol) && HistorySelect(NowTime, NowTime))
{
Print(HistoryDealsTotal()); // 0 - это при том, что мы открыли и закрыли позицию в NowTime-времяExpertRemove();
}
}
Par conséquent, si votre EA touche l'Agent b1626 pendant l'optimisation, il peut afficher un résultat, mais lorsqu'il est exécuté sur l'Agent b1641 local, un résultat complètement différent.
Nous pouvons en conclure qu'avant l'optimisation, vous devez savoir pour quels bâtiments vous souhaitez optimiser votre EA et ceux pour lesquels il ne l'est pas.
Par conséquent, je recommanderais d'écrire une vérification pour faire correspondreTerminalInfoInteger(TERMINAL_BUILD) avec les valeurs souhaitées dans OnInit pour les optimisations basées sur le Cloud.
Mais il est presque impossible de connaître la liste des contrôles qui correspondent à vos besoins, donc vous écrirez probablement ceci
intOnInit( void )
{
// Если Агент не совпадает с билдом компиляции, отказываемся от его услугif (TerminalInfoInteger(TERMINAL_BUILD) != __MQLBUILD__)
return(INIT_AGENT_NOT_SUITABLE);
//....
Mais c'est aussi une mauvaise solution. Une solution plus souple consiste à transmettre votre numéro de build aux agents pendant l'optimisation.
En général, soyez vigilant.
SZY. Il est possible de générer un rapport commercial de chaque exécution de l'agent et de l'obtenir en une seule fois pendant l'optimisation. Cela peut aider à mieux comprendre pourquoi le résultat de l'agent dans le nuage est différent du résultat local lors d'une seule exécution. La génération automatique de ces rapports pendant l'optimisation et l'exécution unique est possible avec l'aide de cette bibliothèque.
Lors du débogage (pas nécessairement du débogage), lorsque vous voulez réduire rapidement l'intervalle de test dans le testeur, j'utilise les fonctions suivantes
// Выгружает эксперт, если количество сделок в истории больше DealsNum.void ConditionStopExpert( constint DealsNum = INT_MAX )
{
if ((DealsNum != INT_MAX) && ::HistorySelect(0, ::TimeCurrent()) && ::HistoryDealsTotal() > DealsNum)
::ExpertRemove();
return;
}
// Выгружает эксперт, если с момента запуска прошло AmountHours-часов.void ConditionStopExpert( constdouble AmountHours )
{
staticdatetime FirstTime = ::TimeCurrent();
if (::TimeCurrent() > FirstTime + (datetime)(AmountHours * 3600))
::ExpertRemove();
return;
}
Lors du débogage (pas nécessairement du débogage), lorsque vous avez besoin de réduire rapidement l'intervalle de test dans le testeur, j'utilise les fonctions suivantes
Corrigez le code, vous avez le numéro 5 dans la première fonction au lieu de DealsNum.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
C'est un bon truc. L'astuce consiste à appliquer le motif au TParent. Je n'ai jamais rien vu de tel auparavant.
Eh bien, ce n'est pas un héritage multiple. C'est en fait une chaîne Base -> A -> B -> C -> X. Qui vous empêche de l'utiliser directement si elle est suffisante ?
Eh bien, ce n'est pas un héritage multiple. C'est en fait une chaîne Base -> A -> B -> C -> X. Qui vous empêche de l'utiliser directement si elle est suffisante ?
La brièveté.
La brièveté.
Je ne pourrais pas être plus d'accord. À mon avis, prescrire directement les quatre classes de successeurs serait plus court et plus clair.
Je ne pourrais pas être plus d'accord. À mon avis, prescrire directement les quatre classes de successeurs serait plus court et plus clair.
Si, soudainement, l'héritage pluriel est introduit, il suffit d'effectuer un petit changement en une seule ligne
Si, soudainement, l'héritage multiple est introduit, il suffirait d'une petite substitution dans une seule ligne
Dommage que le forum ne dispose pas d'un formulaire de pari en plus des sondages - comme un sondage avec des options, mais bloquant quelques "centimes" sur le compte pour la réponse. Ceux qui choisissent la bonne option obtiendront les paris des perdants après l'événement ;-). Je ne pense pas qu'ils l'introduiraient.
Eh bien, ce n'est pas un héritage multiple. C'est en fait une chaîne Base -> A -> B -> C -> X. Qui vous empêche de l'utiliser directement si elle est suffisante ?
Une dernière chose que j'aimerais ajouter. Une alternative complète à l'héritage multiple (et avec des options plus flexibles) pourrait être implémentée via la surcharge de l'opérateur fantôme. Mais MQ, pour une raison quelconque, n'a pas ajouté cette fonction de surcharge alors que je leur demande de le faire depuis longtemps. Et je n'ai même pas entendu de réponse concrète de leur part, ils se contentent de l'ignorer.
Il y a des situations comme celle-ci
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading
Bugs, bugs, questions
fxsaber, 2017.07.24 09:27
EA est compilé sous 1641 où l'historique de trading rapide est implémenté.
Est-il possible que l'optimisation arrive à l'Agent build 1596, où l'historique fonctionne TRÈS lentement, et par conséquent obtenir un ralentissement de l'optimisation à plusieurs reprises ?
De manière plus générale, l'optimisation sur le Cloud donne parfois des résultats différents non seulement en termes de temps, mais aussi en termes de calculs. Il arrive parfois que le résultat de l'optimisation ne coïncide pas avec une seule exécution.
Cela peut être dû au fait que les agents impliqués dans l'optimisation et un agent local impliqué dans une seule exécution peuvent avoir un numéro de construction différent.
Et chaque version contient des bogues différents. Par exemple, voici un bogue qui est pertinent aujourd'hui, mais qui n'était pas présent dans les builds il y a quelques années
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading
Bugs, bugs, questions
fxsaber, 2017.07.17 23:08
Encore une fois le bug de HistorySelect dans le testeur. Il ne semblait pas l'avoir en 1626. En 1629, il y a.
Par conséquent, si votre EA touche l'Agent b1626 pendant l'optimisation, il peut afficher un résultat, mais lorsqu'il est exécuté sur l'Agent b1641 local, un résultat complètement différent.
Nous pouvons en conclure qu'avant l'optimisation, vous devez savoir pour quels bâtiments vous souhaitez optimiser votre EA et ceux pour lesquels il ne l'est pas.
Les développeurs ont prévu un coupeur pour les agents inadaptés - INIT_AGENT_NOT_SUITABLE.
Par conséquent, je recommanderais d'écrire une vérification pour faire correspondreTerminalInfoInteger(TERMINAL_BUILD) avec les valeurs souhaitées dans OnInit pour les optimisations basées sur le Cloud.
Mais il est presque impossible de connaître la liste des contrôles qui correspondent à vos besoins, donc vous écrirez probablement ceci
Mais c'est aussi une mauvaise solution. Une solution plus souple consiste à transmettre votre numéro de build aux agents pendant l'optimisation.
En général, soyez vigilant.
SZY. Il est possible de générer un rapport commercial de chaque exécution de l'agent et de l'obtenir en une seule fois pendant l'optimisation. Cela peut aider à mieux comprendre pourquoi le résultat de l'agent dans le nuage est différent du résultat local lors d'une seule exécution. La génération automatique de ces rapports pendant l'optimisation et l'exécution unique est possible avec l'aide de cette bibliothèque.
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie
Bugs, bugs, questions
Renat Fatkhullin, 2017.07.25 08:26
Nous coupons périodiquement les anciennes builds dans le clouda, en attendant qu'elles soient mises à jour, ce qui passe très vite et inaperçu.Lors du débogage (pas nécessairement du débogage), lorsque vous voulez réduire rapidement l'intervalle de test dans le testeur, j'utilise les fonctions suivantes
Lors du débogage (pas nécessairement du débogage), lorsque vous avez besoin de réduire rapidement l'intervalle de test dans le testeur, j'utilise les fonctions suivantes