BacktestingInPlugins Sample¶
概述 ¶
BacktestingInPlugins Sample 插件支持直接从 cTrader 平台界面运行历史策略测试,使用以下关键功能:
- 创建一个结构化面板布局,包含下拉菜单、操作按钮和结果显示字段。
- 在下拉菜单中列出所有已安装的 cBot,以便轻松选择。
- 触发时使用历史数据对设定的交易品种进行回测。
- 显示回测结果中的投资回报率 (ROI) 和净利润。

该插件在活跃交易品种面板中的自定义面板中运行,并在 cTrader Windows 或 Mac 打开时保持活动状态。 当平台关闭或重启时,它会自动停止。
插件创建 ¶
了解如何通过我们的分步指南创建、编辑和构建插件,无论是从模板还是从头开始。
您可以在 GitHub 上找到 BacktestingInPlugins Sample 插件的代码,或直接复制以下内容。
示例代码
using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Nodes;
namespace cAlgo.Plugins
{
[Plugin(AccessRights = AccessRights.None)]
public class BacktestingInPluginsSample : Plugin
{
// Declaring the necessary UI elements
// and the cBot (RobotType) selected in the ComboBox
private Grid _grid;
private ComboBox _cBotsComboBox;
private Button _startBacktestingButton;
private TextBlock _resultsTextBlock;
private RobotType _selectedRobotType;
protected override void OnStart()
{
// Initialising and structuring the UI elements
_grid = new Grid(3, 1);
_cBotsComboBox = new ComboBox();
_startBacktestingButton = new Button
{
BackgroundColor = Color.Green,
CornerRadius = new CornerRadius(5),
Text = "Start Backtesting",
};
_resultsTextBlock = new TextBlock
{
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);
var block = Asp.SymbolTab.AddBlock("Backtesting Plugin");
block.Child = _grid;
// Populating the ComboBox with existing cBots
PopulateCBotsComboBox();
// 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;
}
protected void StartBacktestingButton_Click(ButtonClickEventArgs obj)
{
// Initialising and configuring the backtesting settings
var backtestingSettings = new BacktestingSettings
{
DataMode = BacktestingDataMode.M1,
StartTimeUtc = new DateTime(2023, 6, 1),
EndTimeUtc = DateTime.UtcNow,
Balance = 10000,
};
// Starting backtesting on EURUSD h1
Backtesting.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...";
}
protected void PopulateCBotsComboBox()
{
// Iterating over the AlgoRegistry and
// getting the names of all installed cBots
foreach (var robotType in AlgoRegistry.OfType<RobotType>())
{
_cBotsComboBox.AddItem(robotType.Name);
}
}
protected void Backtesting_Completed(BacktestingCompletedEventArgs obj)
{
// Attaining the JSON results of backtesting
string jsonResults = obj.JsonReport;
// Converting the JSON string into a JsonNode
JsonNode resultsNode = 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;
}
protected void CBotsComboBox_SelectedItemChanged(ComboBoxSelectedItemChangedEventArgs obj)
{
// Updating the variable to always contain
// the cBot selected in the ComboBox
_selectedRobotType = AlgoRegistry.Get(obj.SelectedItem) as RobotType;
}
}
}
自定义选项 ¶
该插件提供了一个直接界面,用于启动回测并查看基本结果。 下表概述了其关键组件及其功能:
| 参数 | 描述 | 可选值 |
|---|---|---|
_grid | 定义插件界面的布局。 | (3, 1), (2, 2) 等。 |
_startBacktestingButton | 自定义开始按钮的外观和标签。 | Start Backtesting, Color.Green, new CornerRadius(5) |
_cBotsComboBox.AddItem | 用注册表中的 cBots 填充 ComboBox。 | robottype.name |
_resultsTextBlock.Text | 在回测周期中显示消息。 | Select a cBot..., Backtesting in progress..., Backtesting results summary, 等。 |
CBotsComboBox_SelectedItemChanged | 更新用于测试的选定 cBot。 | obj.selecteditem |
StartTimeUtc | 回测开始日期和时间(UTC)。 | new datetime(2023, 6, 1) |
EndTimeUtc | 回测结束日期和时间(UTC)。 | datetime.utcnow |
DataMode | 定义每个数据点移动的代表(1 分钟、1 小时或 1 天)。 | backtestingdatamode.m1 |
Balance | 初始虚拟账户余额。 | 10000, 20000, 等。 |
Backtesting.Start | 定义用于回测的交易品种和时间周期。 | eurusd, timeframe.hour |
Backtesting_Completed | 提取并显示测试结果在用户界面中。 | resultsnode[main][roi], resultsnode[main][netprofit], 等。 |
注意
确保在 cTrader 中至少安装一个 cBot,以便下拉菜单正确填充。
用例 ¶
该插件提供了一种在活跃交易品种面板中运行历史策略测试的方式。 它简化了选择和测试 cBots 的过程,非常适合策略评估。 以下是实际用例,展示了如何将该插件应用于真实交易场景。
| 使用场景 | 场景 | 值 |
|---|---|---|
| 策略比较 | 在多个 cBot 上使用相同的测试条件运行回测。 | 支持在单个会话内直接进行性能比较。 |
| 快速性能审查 | 在标准市场设置下测试任何已安装的 cBot。 | 帮助您在实盘账户上运行 cBot 之前评估其性能。 |
| 固定规则回测 | 通过启动预定义的回测来验证算法更改。 | 在调试或版本测试策略时确保测试条件的一致性。 |
| 快速洞察工具 | 测试已安装的 cBot 后立即查看 ROI 和盈利反馈。 | 与启动单独的测试会话相比,节省时间。 |
总结 ¶
该插件提供了一个简化的界面,用于选择 cBot 并使用预定义设置运行历史回测。 它在选定的交易品种和时间周期上运行测试,然后显示关键性能指标,如 ROI 和净利润。 该结构支持快速策略验证,并适用于各种交易场景。
有关进一步的开发细节,请参阅我们的插件文档。