BacktestingInPlugins Sample¶
Ikhtisar ¶
Plugin BacktestingInPlugins Sample memungkinkan pengujian strategi historis langsung dari antarmuka platform cTrader menggunakan fungsi utama berikut:
- Membuat tata letak panel terstruktur dengan menu dropdown, tombol aksi, dan bidang tampilan hasil.
- Mencantumkan semua cBots yang terinstal di dropdown untuk memudahkan pemilihan.
- Menjalankan backtest pada simbol yang ditetapkan menggunakan data historis saat dipicu.
- Menampilkan imbal hasil investasi (ROI) dan laba bersih dari hasil backtest.

Plugin ini berjalan di panel kustom dalam Panel Simbol Aktif dan tetap aktif saat cTrader Windows atau Mac terbuka. Plugin akan berhenti secara otomatis saat platform ditutup atau dimulai ulang.
Pembuatan Plugin ¶
Pelajari cara membuat, mengedit, dan membangun plugin dari template atau dari awal dalam panduan langkah demi langkah kami.
Anda dapat menemukan kode plugin BacktestingInPlugins Sample di GitHub, atau cukup salin di bawah ini.
Sampel kode
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;
}
}
}
Opsi Kustomisasi ¶
Plugin ini menyediakan antarmuka langsung untuk memulai backtest dan melihat hasil dasar. Tabel di bawah ini merangkum komponen utama dan fungsinya:
| Parameter | Deskripsi | Nilai yang Mungkin |
|---|---|---|
_grid | Mendefinisikan tata letak untuk antarmuka plugin. | (3, 1), (2, 2), dll. |
_startBacktestingButton | Menyesuaikan tampilan dan label tombol mulai. | Start Backtesting, Color.Green, new CornerRadius(5) |
_cBotsComboBox.AddItem | Mengisi ComboBox dengan cBots dari registri. | robottype.name |
_resultsTextBlock.Text | Menampilkan pesan selama siklus backtest. | Pilih cBot..., Backtesting sedang berlangsung..., Ringkasan hasil backtesting, dll. |
CBotsComboBox_SelectedItemChanged | Memperbarui cBot yang dipilih untuk pengujian. | obj.selecteditem |
StartTimeUtc | Tanggal dan waktu mulai backtest dalam UTC. | new datetime(2023, 6, 1) |
EndTimeUtc | Tanggal dan waktu akhir backtest dalam UTC. | datetime.utcnow |
DataMode | Mendefinisikan apa yang mewakili setiap pergerakan titik data (1 menit, 1 jam, atau 1 hari). | backtestingdatamode.m1 |
Balance | Saldo akun virtual awal. | 10000, 20000, dll. |
Backtesting.Start | Mendefinisikan simbol dan rentang waktu untuk menjalankan backtest. | eurusd, timeframe.hour |
Backtesting_Completed | Mengekstrak dan menampilkan hasil pengujian di UI. | resultsnode[main][roi], resultsnode[main][netprofit], dll. |
Catatan
Pastikan setidaknya satu cBot terinstal di cTrader agar dropdown terisi dengan benar.
Kasus Penggunaan ¶
Plugin ini menyediakan cara untuk menjalankan pengujian strategi historis di Panel Simbol Aktif. Ini menyederhanakan pemilihan dan pengujian cBots, menjadikannya ideal untuk evaluasi strategi. Di bawah ini adalah kasus penggunaan praktis yang menunjukkan bagaimana plugin dapat diterapkan pada skenario trading nyata.
| Kasus Penggunaan | Skenario | Nilai |
|---|---|---|
| Perbandingan strategi | Jalankan backtest pada beberapa cBot menggunakan kondisi pengujian yang identik. | Memungkinkan perbandingan performa langsung dalam satu sesi. |
| Tinjauan kinerja cepat | Uji cBot yang terpasang pada pengaturan pasar standar. | Membantu Anda menilai kinerja cBot sebelum menjalankannya pada akun riil. |
| Backtest aturan tetap | Validasi perubahan algoritma dengan meluncurkan backtest yang telah ditentukan. | Memastikan konsistensi dalam kondisi pengujian saat melakukan debugging atau menguji versi strategi. |
| Alat wawasan cepat | Lihat ROI dan umpan balik laba segera setelah menguji cBot yang terpasang. | Menghemat waktu dibandingkan dengan meluncurkan sesi pengujian terpisah. |
Ringkasan ¶
Plugin ini menyediakan antarmuka yang efisien untuk memilih cBot dan menjalankan backtest historis menggunakan pengaturan yang telah ditentukan. Plugin ini menjalankan pengujian pada simbol dan rentang waktu yang dipilih, kemudian menampilkan metrik kinerja utama seperti ROI dan laba bersih. Strukturnya mendukung validasi strategi cepat dan dapat disesuaikan untuk berbagai skenario trading.
Untuk detail pengembangan lebih lanjut, lihat dokumentasi plugin kami.