BacktestingInPlugins Sample¶
Gambaran Keseluruhan ¶
Plugin BacktestingInPlugins Sample membolehkan ujian belakang strategi sejarah dijalankan secara langsung dari antara muka platform cTrader menggunakan fungsi utama berikut:
- Mencipta susun atur panel berstruktur dengan menu dropdown, butang tindakan dan medan paparan keputusan.
- Menyenaraikan semua cBot yang dipasang dalam dropdown untuk pemilihan mudah.
- Menjalankan ujian belakang pada simbol yang ditetapkan menggunakan data sejarah apabila dicetuskan.
- Memaparkan pulangan pelaburan (ROI) dan keuntungan bersih daripada keputusan ujian belakang.

Plugin ini berjalan dalam panel tersuai dalam Panel Simbol Aktif dan kekal aktif semasa cTrader Windows atau Mac dibuka. Ia berhenti secara automatik apabila platform ditutup atau dimulakan semula.
Penciptaan plugin ¶
Pelajari cara untuk mencipta, mengedit dan membina plugin daripada templat atau dari awal dalam panduan langkah demi langkah kami.
Anda boleh mencari kod plugin BacktestingInPlugins Sample di GitHub, atau hanya salin di bawah.
Kod sampel
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;
}
}
}
Pilihan penyesuaian ¶
Plugin ini menyediakan antara muka langsung untuk memulakan ujian belakang dan melihat keputusan asas. Jadual di bawah menggariskan komponen utama dan fungsinya:
| Parameter | Penerangan | Nilai yang mungkin |
|---|---|---|
_grid | Menentukan susun atur untuk antara muka plugin. | (3, 1), (2, 2), dsb. |
_startBacktestingButton | Menyesuaikan rupa dan label butang mula. | Start Backtesting, Color.Green, new CornerRadius(5) |
_cBotsComboBox.AddItem | Mengisi ComboBox dengan cBot dari pendaftaran. | robottype.name |
_resultsTextBlock.Text | Memaparkan mesej semasa kitaran ujian belakang. | Pilih cBot..., Ujian belakang sedang dijalankan..., Ringkasan keputusan ujian belakang, dsb. |
CBotsComboBox_SelectedItemChanged | Mengemas kini cBot yang dipilih untuk ujian. | obj.selecteditem |
StartTimeUtc | Tarikh dan masa mula ujian belakang dalam UTC. | new datetime(2023, 6, 1) |
EndTimeUtc | Tarikh dan masa tamat ujian belakang dalam UTC. | datetime.utcnow |
DataMode | Menentukan apa yang mewakili setiap pergerakan titik data (1 minit, 1 jam atau 1 hari). | backtestingdatamode.m1 |
Balance | Baki akaun maya permulaan. | 10000, 20000, dsb. |
Backtesting.Start | Menentukan simbol dan tempoh masa untuk menjalankan ujian belakang. | eurusd, timeframe.hour |
Backtesting_Completed | Mengekstrak dan menunjukkan keputusan ujian dalam UI. | resultsnode[main][roi], resultsnode[main][netprofit], dsb. |
Nota
Pastikan sekurang-kurangnya satu cBot dipasang dalam cTrader untuk dropdown diisi dengan betul.
Kes penggunaan ¶
Plugin ini menyediakan cara untuk menjalankan ujian strategi sejarah dalam Panel Simbol Aktif. Ia memudahkan pemilihan dan pengujian cBot, menjadikannya sesuai untuk penilaian strategi. Di bawah adalah kes penggunaan praktikal yang menunjukkan bagaimana plugin boleh digunakan untuk senario dagangan sebenar.
| Kes penggunaan | Senario | Nilai |
|---|---|---|
| Perbandingan strategi | Jalankan ujian belakang pada beberapa cBot menggunakan keadaan ujian yang sama. | Membolehkan perbandingan prestasi secara langsung dalam satu sesi. |
| Semakan prestasi pantas | Uji mana-mana cBot yang dipasang pada persediaan pasaran standard. | Membantu anda menilai prestasi cBot sebelum menjalankannya pada akaun langsung. |
| Ujian belakang peraturan tetap | Sahkan perubahan algoritma dengan melancarkan ujian belakang yang telah ditentukan. | Memastikan konsistensi dalam keadaan ujian semasa menyahpepijat atau menguji versi strategi. |
| Alat pandangan pantas | Lihat maklum balas ROI dan keuntungan dengan segera selepas menguji cBot yang dipasang. | Menjimatkan masa berbanding melancarkan sesi ujian berasingan. |
Ringkasan ¶
Plugin ini menyediakan antara muka yang diringkaskan untuk memilih cBot dan menjalankan ujian belakang sejarah menggunakan tetapan yang telah ditentukan. Ia menjalankan ujian pada simbol dan tempoh masa yang dipilih, kemudian memaparkan metrik prestasi utama seperti ROI dan keuntungan bersih. Strukturnya menyokong pengesahan strategi pantas dan boleh disesuaikan untuk pelbagai senario dagangan.
Untuk butiran pembangunan lanjut, rujuk dokumentasi plugin kami.