Rejoignez notre page de fans
- Vues:
- 33
- Note:
- Publié:
- 2025.04.03 11:15
-
Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur Freelance
Cette bibliothèque vous permet de lire/écrire des fichiers tst - MT5-Tester single pass format.
Quelques variantes d'utilisation
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading
fxsaber, 2019.10.04 07:18 pm.
S'ils ouvrent le format des fichiers tst et placent le dossier cache du Testeur dans le bac à sable, il est possible de créer des produits Market d'un nouveau type, qui seront des analyseurs/correcteurs des résultats du Testeur.
Par exemple, il sera possible d'écrire une combinaison de marché qui montre toutes les passes en simple disponibles dans le cache.
- Vous sélectionnez les passes nécessaires à l'aide de la souris et il affiche les statistiques combinées.
- Il nettoie le cache des passes inutiles.
- Il calcule le portefeuille optimal avec les coefficients de pondération appropriés à partir des passes.
- Affiche les meilleurs intervalles de négociation pour chaque passe.
- Offre sa propre visualisation interactive des statistiques, y compris des filtres.
- Calcule la MM optimale.
- Pour chaque position de couverture dans l'historique, montre OrderOpenPriceBest (le meilleur prix d'ouverture pendant la durée de vie de la position), OrderClosePriceBest (similaire), OrderOpenPriceLength (combien de temps le prix n'a pas été inférieur à OrderOpenPrice pendant la durée de vie de la position), OrderClosePriceLength (similaire), OrderProfitBest (le profit le plus élevé possible d'une position similaire pendant la durée de vie de la position d'origine).
- Indique l'efficacité de chaque position de couverture.
- Calcule le résultat lorsque la latence est activée.
- Calcule le résultat en fonction de différents paramètres d'exécution des ordres (glissement, etc.) et des commissions.
- Affiche le résultat du TS sur un historique de ticks différent.
- ...
Vous n'avez pas besoin de lancer le Testeur pour implémenter chaque élément.
Tout cela peut être fait maintenant si vous mettez le dossier cache dans le bac à sable via mklink. Vous n'avez besoin que de tst-format.
Celui qui en a la force devrait probablement commencer à écrire un tel produit. Je rejoindrais volontiers l'équipe de ses développeurs et l'achèterais. Le créneau est complètement vide.
Si cache-folder n'est pas placé dans un bac à sable, il y a plus de chances que des produits similaires apparaissent en dehors de l'écosystème MQ, car ils seront écrits dans d'autres langages.
Exemples.
#include <fxsaber\SingleTesterCache\SingleTesterCache.mqh> // Données de la passe unique du testeur. void OnStart() { SINGLETESTERCACHE SingleTesterCache; // Création d'un objet de cache pour les testeurs. SingleTesterCache.Set(); // Mettez-y l'histoire réelle de l'offre. // ..\NMQL5\NFiles/Test.tst. Print(SingleTesterCache.Save("Test.tst")); // L'écrire dans un fichier qui peut être importé dans le testeur. }
Ce script rassemble l'historique des transactions sur compte réel au format tst. Il est importé dans le testeur comme suit.
Il en résulte quelque chose comme ceci.
Les solutions DLL ne peuvent pas être placées dans la base de données, c'est pourquoi vous trouverez ci-dessous le code source d'un autre script, qui n'est pas inclus dans la livraison de la base de données.
#include <fxsaber\SingleTesterCache\SingleTesterCache.mqh> // Données de la passe unique du testeur. #include <Graphics\Graphic.mqh> #include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/fr/code/26132 #define MIN_WIDTH 10 // Création d'un graphique. string GraphPlot( const double &Y1[], const double &Y2[], int Width = 0, int Height = 0, const ENUM_CURVE_TYPE Type = CURVE_NONE, const string CurveName1 = NULL, const string CurveName2 = NULL, string ObjName = NULL ) { Width = Width ? Width : (int)::ChartGetInteger(0, CHART_WIDTH_IN_PIXELS); Height = Height ? Height : (int)::ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS); ObjName = (ObjName == NULL) ? __FUNCTION__ : ObjName; CGraphic Graphic; const bool Res = (::ObjectFind(0, ObjName) >= 0) ? Graphic.Attach(0, ObjName) : Graphic.Create(0, ObjName, 0, 0, 0, Width, Height); if (Res) { const int Size1 = ::ArraySize(Y1); const int Size2 = ::ArraySize(Y2); Graphic.CurveAdd(Y1, ((Type == CURVE_NONE) && Size1) ? ((Width / Size1 < MIN_WIDTH) ? CURVE_LINES : CURVE_POINTS_AND_LINES) : Type, CurveName1); Graphic.CurveAdd(Y2, ((Type == CURVE_NONE) && Size2) ? ((Width / Size2 < MIN_WIDTH) ? CURVE_LINES : CURVE_POINTS_AND_LINES) : Type, CurveName2); Graphic.CurvePlotAll(); Graphic.Update(); } return (Res ? Graphic.ChartObjectName() : NULL); } void OnStart() { uchar Bytes2[]; if (MTTESTER::GetLastTstCache(Bytes2) != -1) // S'il était possible de lire le dernier enregistrement de cache d'une seule exécution { const SINGLETESTERCACHE SingleTesterCache(Bytes2); // L'introduire dans l'objet correspondant. SingleTesterCache.SaveSet(NULL, true, "Created by " + __FILE__); // Sauvegarder le fichier set avec les détails. double Balance[]; double Equity[]; // Imprimer le tableau des soldes et des capitaux propres. if (SingleTesterCache.GetBalance(Balance) && SingleTesterCache.GetEquity(Equity)) GraphPlot(Balance, Equity, 1200, 500, CURVE_NONE, "Balance", "Equity"); Print(SingleTesterCache.Header.ToString()); // Sortie de l'en-tête d'une seule passe. Print(SingleTesterCache.Summary.ToString()); // Statistica. Print(SingleTesterCache.Inputs); // Paramètres d'entrée. } }
Ce script récupère automatiquement les données de la dernière passe simple et les restitue, y compris un graphique d'équilibre/équité.
Remerciements.
Merci aux développeurs d'avoir créé les caches Tester et de m'avoir aidé à décompresser leurs formats.
Traduit du russe par MetaQuotes Ltd.
Code original : https://www.mql5.com/ru/code/27611

A zigzag based on the trend change of the parabolic sar

This MT5 Expert Advisor combines multi-timeframe candlestick pattern analysis with fundamental event filtering to execute trades with disciplined risk management.

Calendrier - analyse fondamentale sur l'historique et en temps réel.

Détection du début d'une nouvelle barre ou d'une nouvelle bougie dans le gestionnaire d'événement OnTick() d'un conseiller expert.