BacktestingInPlugins Sample¶
Tổng quan ¶
Plugin BacktestingInPlugins Sample cho phép chạy kiểm tra chiến lược lịch sử trực tiếp từ giao diện nền tảng cTrader bằng cách sử dụng các chức năng chính sau:
- Tạo bố cục panel có cấu trúc với menu thả xuống, nút hành động và trường hiển thị kết quả.
- Liệt kê tất cả các cBots đã cài đặt trong menu thả xuống để dễ dàng lựa chọn.
- Chạy một backtest trên ký hiệu đã đặt bằng cách sử dụng dữ liệu lịch sử khi được kích hoạt.
- Hiển thị tỷ lệ lợi nhuận trên đầu tư (ROI) và lãi ròng từ kết quả backtest.

Plugin này chạy trong một panel tùy chỉnh trong Bảng ký hiệu đang hoạt động và vẫn hoạt động khi cTrader Windows hoặc Mac đang mở. Nó sẽ tự động dừng khi nền tảng đóng hoặc khởi động lại.
Tạo plugin ¶
Tìm hiểu cách tạo, chỉnh sửa và xây dựng plugin từ một mẫu hoặc từ đầu trong hướng dẫn từng bước của chúng tôi.
Bạn có thể tìm thấy mã của plugin BacktestingInPlugins Sample trên GitHub, hoặc đơn giản là sao chép nó bên dưới.
Mẫu mã
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;
}
}
}
Tùy chọn tùy chỉnh ¶
Plugin này cung cấp một giao diện trực tiếp để khởi động backtest và xem kết quả cơ bản. Bảng dưới đây trình bày các thành phần chính và chức năng của chúng:
| Tham số | Mô tả | Giá trị có thể |
|---|---|---|
_grid | Xác định bố cục cho giao diện plugin. | (3, 1), (2, 2), v.v. |
_startBacktestingButton | Tùy chỉnh giao diện và nhãn của nút bắt đầu. | Start Backtesting, Color.Green, new CornerRadius(5) |
_cBotsComboBox.AddItem | Điền vào ComboBox với các cBots từ registry. | robottype.name |
_resultsTextBlock.Text | Hiển thị thông báo trong chu kỳ backtest. | Chọn một cBot..., Backtest đang tiến hành..., Tóm tắt kết quả backtest, v.v. |
CBotsComboBox_SelectedItemChanged | Cập nhật cBot đã chọn để kiểm tra. | obj.selecteditem |
StartTimeUtc | Ngày và giờ bắt đầu backtest theo UTC. | new datetime(2023, 6, 1) |
EndTimeUtc | Ngày và giờ kết thúc backtest theo UTC. | datetime.utcnow |
DataMode | Xác định đại diện cho mỗi bước di chuyển điểm dữ liệu (1 phút, 1 giờ hoặc 1 ngày). | backtestingdatamode.m1 |
Balance | Số dư tài khoản ảo ban đầu. | 10000, 20000, v.v. |
Backtesting.Start | Xác định ký hiệu và khung thời gian để chạy backtest. | eurusd, timeframe.hour |
Backtesting_Completed | Trích xuất và hiển thị kết quả kiểm tra trong giao diện người dùng. | resultsnode[main][roi], resultsnode[main][netprofit], v.v. |
Ghi chú
Đảm bảo ít nhất một cBot được cài đặt trong cTrader để danh sách thả xuống hiển thị chính xác.
Các trường hợp sử dụng ¶
Plugin này cung cấp cách để chạy các bài kiểm tra chiến lược lịch sử trong Bảng ký hiệu đang hoạt động. Nó đơn giản hóa việc lựa chọn và kiểm tra cBots, làm cho nó trở nên lý tưởng để đánh giá chiến lược. Dưới đây là các trường hợp sử dụng thực tế cho thấy cách plugin có thể được áp dụng vào các kịch bản giao dịch thực tế.
| Trường hợp sử dụng | Kịch bản | Giá trị |
|---|---|---|
| So sánh chiến lược | Chạy backtest trên nhiều cBot bằng cách sử dụng các điều kiện kiểm tra giống nhau. | Cho phép so sánh hiệu suất trực tiếp trong một phiên duy nhất. |
| Đánh giá hiệu suất nhanh | Kiểm tra bất kỳ cBot nào đã cài đặt trên một thiết lập thị trường tiêu chuẩn. | Giúp bạn đánh giá hiệu suất của cBot trước khi chạy nó trên tài khoản thực. |
| Backtest với quy tắc cố định | Xác thực các thay đổi thuật toán bằng cách khởi chạy một bài backtest được định nghĩa trước. | Đảm bảo tính nhất quán trong điều kiện kiểm tra khi gỡ lỗi hoặc kiểm tra phiên bản chiến lược. |
| Công cụ thông tin nhanh | Xem phản hồi ROI và lãi ngay sau khi kiểm tra các cBot đã cài đặt. | Tiết kiệm thời gian so với việc khởi chạy các phiên kiểm tra riêng biệt. |
Tổng quan ¶
Plugin này cung cấp một giao diện tối ưu để chọn một cBot và chạy một bài backtest lịch sử bằng cách sử dụng các thiết lập được định nghĩa trước. Nó chạy bài kiểm tra trên một ký hiệu và khung thời gian đã chọn, sau đó hiển thị các chỉ số hiệu suất chính như ROI và lãi ròng. Cấu trúc hỗ trợ việc xác thực chiến lược nhanh chóng và có thể điều chỉnh cho các kịch bản giao dịch khác nhau.
Để biết thêm chi tiết phát triển, hãy tham khảo tài liệu plugin của chúng tôi.