Lewati ke isi

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.