À la fin de la meilleure passe, les données sont prises et, à partir d'elles, plusieurs tâches d'optimisation sont formées (plages définies de paramètres d'entrée).
Toutes les optimisations à partir du point 3 sont effectuées.
Les meilleures passes sont extraites de toutes les optimisations du point 4 et sauvegardées en tant qu'ensembles pour la négociation de portefeuilles.
Il s'est avéré être un scanner de marché et un ajusteur de TS très puissant. Les sources de CT ne sont pas nécessaires pour de telles manipulations.
Il s'est avéré être un scanner de marché et un ajusteur de TS très puissant.
#property script_show_inputs#include <fxsaber\MultiTester\MultiTester.mqh> // https://www.mql5.com/fr/code/26132#include <fxsaber\MultiTester\Task.mqh>
inputbool OnlyCustomSymbols = true; // Caractères personnalisés uniquementinputbool AllSymbols = false; // Tous les caractères ou le courantvoid Add( conststring SymbName )
{
TesterSettings.Add(NULL, SymbName, 0, 0, 0, TASK::InitBase, TASK::DeinitBase);
for (int i = 0; i < ::inAmount; i++)
TesterSettings.Add(NULL, NULL, 0, 0, 0, TASK::InitSub, TASK::DeinitSub);
}
// Cette fonction est responsable de la génération de la liste des tâches.void SetTesterSettings()
{
if (AllSymbols)
// Recherche de tous les symboles dans le Market Watch.for (int i = SymbolsTotal(true) - 1; i >= 0; i--)
{
conststring Name = SymbolName(i, true);
if (!OnlyCustomSymbols || SymbolInfoInteger(Name, SYMBOL_CUSTOM))
Add(Name);
}
elseif (!OnlyCustomSymbols || SymbolInfoInteger(_Symbol, SYMBOL_CUSTOM))
Add(_Symbol);
}
Le conseiller expert doit avoir
sinputint inMinTrades = 500; // Nombre minimum de transactions (positions).sinputint inMaxTrades = 90000; // Nombre maximal de transactions (positions).doubleOnTester()
{
return(((TesterStatistics(STAT_TRADES) >= inMinTrades) && (TesterStatistics(STAT_TRADES) <= inMaxTrades)) ? TesterStatistics(STAT_PROFIT) : 0);
}
Je ne sais pas ce qu'il en est des versions précédentes. Mais la dernière version peut exécuter plusieurs fois un test pour le même instrument.
Done apparaît dans le log, puis vide (Start n'apparaît pas), et le terminal a démarré une nouvelle passe en même temps. Il semble que else if (IsRun = (Init = TesterSettings.Init(Pos)) && TesterSettings.Run(Pos)) renvoie un faux, parce que TesterSettings.Run(Pos) renvoie un faux. Et au prochain passage du timer, else if (MTTESTER::IsReady()) renverra false, ce qui fera tourner la boucle en attendant. TesterSettings.Run(Pos)) lui-même renvoie false, cela semble être trivial à cause du timeout, c'est à dire qu'il n'attend pas et sort.
Oui, c'est ce que j'ai fait pour moi, j'ai augmenté la limite à 50. Mais juste au cas où quelqu'un d'autre aurait un problème similaire ou voudrait le modifier dans la version générale.
traveller00: Oui, c'est ce que j'ai fait pour moi, j'ai augmenté la limite à 50. Mais juste au cas où quelqu'un d'autre aurait un problème similaire ou voudrait le modifier dans la version générale.
Mise en place d'un enregistrement du nombre de tentatives nécessaires pour changer l'état du bouton. Résultats intéressants.
Il est désormais possible d'automatiser le testeur en toute liberté.
Un des exemples d'application réelle (tout est fait automatiquement)
Il s'est avéré être un scanner de marché et un ajusteur de TS très puissant. Les sources de CT ne sont pas nécessaires pour de telles manipulations.
Il s'est avéré être un scanner de marché et un ajusteur de TS très puissant.
Le conseiller expert doit avoir
Je ne sais pas ce qu'il en est des versions précédentes. Mais la dernière version peut exécuter plusieurs fois un test pour le même instrument.
Done apparaît dans le log, puis vide (Start n'apparaît pas), et le terminal a démarré une nouvelle passe en même temps. Il semble que else if (IsRun = (Init = TesterSettings.Init(Pos)) && TesterSettings.Run(Pos)) renvoie un faux, parce que TesterSettings.Run(Pos) renvoie un faux. Et au prochain passage du timer, else if (MTTESTER::IsReady()) renverra false, ce qui fera tourner la boucle en attendant. TesterSettings.Run(Pos)) lui-même renvoie false, cela semble être trivial à cause du timeout, c'est à dire qu'il n'attend pas et sort.
traveller00:
TesterSettings.Run(Pos)) renvoie false semble être trivial à cause du timeout, c'est-à-dire qu'il n'attend pas et sort.
Si c'est le cas, essayez d'augmenter ce nombre
Je n'ai jamais eu de cas où le bouton Start ne s'est pas transformé en bouton Stop pendant une longue période après avoir été pressé.
J'ai exécuté l'exemple 3 pour une centaine de caractères et tout a bien fonctionné.
Oui, c'est ce que j'ai fait pour moi, j'ai augmenté la limite à 50. Mais juste au cas où quelqu'un d'autre aurait un problème similaire ou voudrait le modifier dans la version générale.
Mise en place d'un enregistrement du nombre de tentatives nécessaires pour changer l'état du bouton. Résultats intéressants.
ZY Ce bogue est peut-être toujours d'actualité.