Le plug-in BacktestingInPlugins Sample permet d'exécuter des tests de stratégie historiques directement depuis l'interface de la plateforme cTrader en utilisant les fonctionnalités clés suivantes :
Crée une disposition de panneau structurée avec un menu déroulant, un bouton d'action et un champ d'affichage des résultats.
Répertorie tous les cBots installés dans le menu déroulant pour une sélection facile.
Exécute un backtest sur le symbole défini en utilisant des données historiques lorsqu'il est déclenché.
Affiche le retour sur investissement (ROI) et le profit net à partir des résultats du backtest.
Ce plug-in s'exécute dans un panneau personnalisé au sein du Panneau de symbole actif et reste actif tant que cTrader Windows ou Mac est ouvert. Il s'arrête automatiquement lorsque la plateforme est fermée ou redémarrée.
Le code du plug-in BacktestingInPlugins Sample est disponible dans nos dépôts publics C# et Python. Le même code est fourni comme modèle dans l'assistant de création d'algorithme dans cTrader Windows ou Mac, ou vous pouvez simplement copier et utiliser l'extrait ci-dessous :
usingSystem;usingcAlgo.API;usingcAlgo.API.Collections;usingcAlgo.API.Indicators;usingcAlgo.API.Internals;usingSystem.Linq;usingSystem.Text.Json;usingSystem.Text.Json.Nodes;namespacecAlgo.Plugins{[Plugin(AccessRights = AccessRights.None)]publicclassBacktestingInPluginsSample:Plugin{// Declaring the necessary UI elements// and the cBot (RobotType) selected in the ComboBoxprivateGrid_grid;privateComboBox_cBotsComboBox;privateButton_startBacktestingButton;privateTextBlock_resultsTextBlock;privateRobotType_selectedRobotType;protectedoverridevoidOnStart(){// Initialising and structuring the UI elements_grid=newGrid(3,1);_cBotsComboBox=newComboBox();_startBacktestingButton=newButton{BackgroundColor=Color.Green,CornerRadius=newCornerRadius(5),Text="Start Backtesting",};_resultsTextBlock=newTextBlock{HorizontalAlignment=HorizontalAlignment.Center,VerticalAlignment=VerticalAlignment.Center,Text="Select a cBot...",};_grid.AddChild(_cBotsComboBox,0,0);_grid.AddChild(_startBacktestingButton,1,0);_grid.AddChild(_resultsTextBlock,2,0);varblock=Asp.SymbolTab.AddBlock("Backtesting Plugin");block.Child=_grid;// Populating the ComboBox with existing cBotsPopulateCBotsComboBox();// Assigning event handlers to the Button.Click,// ComboBox.SelectedItemChanged, and Backtesting.Completed events_startBacktestingButton.Click+=StartBacktestingButton_Click;_cBotsComboBox.SelectedItemChanged+=CBotsComboBox_SelectedItemChanged;Backtesting.Completed+=Backtesting_Completed;}protectedvoidStartBacktestingButton_Click(ButtonClickEventArgsobj){// Initialising and configuring the backtesting settingsvarbacktestingSettings=newBacktestingSettings{DataMode=BacktestingDataMode.M1,StartTimeUtc=newDateTime(2023,6,1),EndTimeUtc=DateTime.UtcNow,Balance=10000,};// Starting backtesting on EURUSD h1Backtesting.Start(_selectedRobotType,"EURUSD",TimeFrame.Hour,backtestingSettings);// Disabling other controls and changing// the text inside the TextBlock_cBotsComboBox.IsEnabled=false;_startBacktestingButton.IsEnabled=false;_resultsTextBlock.Text="Backtesting in progress...";}protectedvoidPopulateCBotsComboBox(){// Iterating over the AlgoRegistry and// getting the names of all installed cBotsforeach(varrobotTypeinAlgoRegistry.OfType<RobotType>()){_cBotsComboBox.AddItem(robotType.Name);}}protectedvoidBacktesting_Completed(BacktestingCompletedEventArgsobj){// Attaining the JSON results of backtestingstringjsonResults=obj.JsonReport;// Converting the JSON string into a JsonNodeJsonNoderesultsNode=JsonNode.Parse(jsonResults);// Attaining the ROI and net profit from backtesting results_resultsTextBlock.Text=$"ROI: {resultsNode["main"]["roi"]}\nNet Profit: {resultsNode["main"]["netProfit"]}";// Re-enabling controls after backtesting is finished_cBotsComboBox.IsEnabled=true;_startBacktestingButton.IsEnabled=true;}protectedvoidCBotsComboBox_SelectedItemChanged(ComboBoxSelectedItemChangedEventArgsobj){// Updating the variable to always contain// the cBot selected in the ComboBox_selectedRobotType=AlgoRegistry.Get(obj.SelectedItem)asRobotType;}}}
importclrclr.AddReference("cAlgo.API")fromcAlgo.APIimport*fromSystemimportDateTimefromSystem.Text.Json.NodesimportJsonNodefromSystem.Text.JsonimportJsonDocumentOptionsimportjsonclassBacktestingInPluginsSample():defon_start(self):self.grid=Grid(3,1)self.cBotsComboBox=ComboBox()self.startBacktestingButton=Button()self.startBacktestingButton.BackgroundColor=Color.Greenself.startBacktestingButton.CornerRadius=CornerRadius(5)self.startBacktestingButton.Text="Start Backtesting"self.resultsTextBlock=TextBlock()self.resultsTextBlock.HorizontalAlignment=HorizontalAlignment.Centerself.resultsTextBlock.VerticalAlignment=VerticalAlignment.Centerself.resultsTextBlock.Text="Select a cBot..."self.grid.AddChild(self.cBotsComboBox,0,0)self.grid.AddChild(self.startBacktestingButton,1,0)self.grid.AddChild(self.resultsTextBlock,2,0)block=api.Asp.SymbolTab.AddBlock("Backtesting Plugin")block.Child=self.grid# Populating the ComboBox with existing cBotsself.populate_cbots_combobox();self.startBacktestingButton.Click+=self.on_start_backtesting_button_click;self.cBotsComboBox.SelectedItemChanged+=self.on_cbots_combobox_selected_item_changed;api.Backtesting.Completed+=self.on_backtesting_completed;defpopulate_cbots_combobox(self):# Iterating over the AlgoRegistry and getting the names of all installed cBotsforrobotTypeinapi.AlgoRegistry.Robots:self.cBotsComboBox.AddItem(robotType.Name)defon_start_backtesting_button_click(self,args):backtestingSettings=BacktestingSettings()backtestingSettings.DataMode=BacktestingDataMode.M1backtestingSettings.StartTimeUtc=DateTime(DateTime.UtcNow.Year-2,DateTime.UtcNow.Month,DateTime.UtcNow.Day)backtestingSettings.EndTimeUtc=DateTime.UtcNowbacktestingSettings.Balance=10000# Starting backtesting on EURUSD h1self.backtestingProcess=api.Backtesting.Start(self.selectedRobotType,"EURUSD",TimeFrame.Hour,backtestingSettings)# Disabling other controls and changing the text inside the TextBlockself.cBotsComboBox.IsEnabled=Falseself.startBacktestingButton.IsEnabled=Falseself.resultsTextBlock.Text="Backtesting in progress..."defon_cbots_combobox_selected_item_changed(self,args):self.selectedRobotType=RobotType(api.AlgoRegistry.Get(args.SelectedItem))defon_backtesting_completed(self,args):ifint(args.Process.BacktestingError)>0:api.Print(f"Backtesting failed with error {args.Process.BacktestingError}")returnjsonResults=json.loads(args.JsonReport)# # Attaining the ROI and net profit from backtesting resultsself.resultsTextBlock.Text=f"ROI: {jsonResults["main"]["roi"]}\nNet Profit: {jsonResults["main"]["netProfit"]}"# Re-enabling controls after backteting is finishedself.cBotsComboBox.IsEnabled=True;self.startBacktestingButton.IsEnabled=True;
Ce plug-in fournit une interface directe pour lancer des backtests et visualiser les résultats de base. Le tableau ci-dessous décrit ses composants clés et leurs fonctions :
Paramètre
Description
Valeurs possibles
_grid
Définit la disposition de l'interface du plug-in.
(3, 1), (2, 2), etc.
_startBacktestingButton
Personnalise l'apparence et l'étiquette du bouton de démarrage.
Start Backtesting, Color.Green, new CornerRadius(5)
_cBotsComboBox.AddItem
Remplit la ComboBox avec les cBots du registre.
robottype.name
_resultsTextBlock.Text
Affiche des messages pendant le cycle de backtest.
Sélectionnez un cBot..., Backtest en cours..., Résumé des résultats du backtest, etc.
CBotsComboBox_SelectedItemChanged
Met à jour le cBot sélectionné pour les tests.
obj.selecteditem
StartTimeUtc
Date et heure de début du backtest en UTC.
new datetime(2023, 6, 1)
EndTimeUtc
Date et heure de fin du backtest en UTC.
datetime.utcnow
DataMode
Définit ce que représente chaque mouvement de point de données (1 minute, 1 heure ou 1 jour).
backtestingdatamode.m1
Balance
Solde de compte virtuel de départ.
10000, 20000, etc.
Backtesting.Start
Définit sur quel symbole et quelle période exécuter les backtests.
eurusd, timeframe.hour
Backtesting_Completed
Extrait et affiche les résultats des tests dans l'interface utilisateur.
resultsnode[main][roi], resultsnode[main][netprofit], etc.
Remarque
Assurez-vous qu'au moins un cBot est installé dans cTrader pour que le menu déroulant se remplisse correctement.
Ce plug-in offre un moyen d'exécuter des tests de stratégie historiques dans le Panneau de symbole actif. Il simplifie la sélection et le test des cBots, ce qui le rend idéal pour l'évaluation de stratégies. Vous trouverez ci-dessous des cas d'utilisation pratiques qui montrent comment le plug-in peut être appliqué à des scénarios de trading réels.
Cas d'utilisation
Scénario
Valeur
Comparaison de stratégies
Exécutez des backtests sur plusieurs cBots en utilisant des conditions de test identiques.
Permet une comparaison directe des performances au cours d'une seule session.
Examen rapide des performances
Testez n'importe quel cBot installé sur une configuration de marché standard.
Vous aide à évaluer les performances d'un cBot avant de l'exécuter sur un compte réel.
Backtest à règles fixes
Validez les modifications d'algorithme en lançant un backtest prédéfini.
Garantit la cohérence des conditions de test lors du débogage ou du test de version des stratégies.
Outil d'informations rapides
Visualisez le ROI et les retours de profit immédiatement après avoir testé les cBots installés.
Permet de gagner du temps par rapport au lancement de sessions de test séparées.
Ce plug-in fournit une interface simplifiée pour sélectionner un cBot et exécuter un backtest historique en utilisant des paramètres prédéfinis. Il exécute le test sur un symbole et une période choisis, puis affiche des indicateurs de performance clés tels que le ROI et le profit net. La structure prend en charge la validation rapide de stratégie et est adaptable à divers scénarios de trading.