Langkau tajuk talian

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.