Langkau tajuk talian

Ujian belakang dalam plugin

cTrader Algo membolehkan ujian belakang cBot terus daripada plugin, yang membuka banyak kemungkinan untuk pembangun algo. Baca ringkasan satu minit kami di bawah untuk mengetahui lebih lanjut.

Ujian belakang dalam plugin dalam satu minit!

  • Lancarkan ujian belakang secara programatik atau sebagai tindak balas kepada maklum balas pengguna dan keluarkan hasilnya di mana-mana tempat yang sesuai dalam antara muka pengguna cTrader di mana plugin boleh diletakkan.
  • Perluas keupayaan ujian belakang terbina dalam cTrader dengan menambah strategi ujian belakang baharu seperti simulasi Monte Carlo.
  • Tambah statistik tersuai pada hasil ujian belakang dan tunjukkannya secara langsung dalam antara muka pengguna cTrader.
  • Cipta kaedah pengoptimuman kompleks yang melampaui algoritma genetik standard.

Bagaimana ujian belakang dalam plugin berfungsi

Kelas asas Plugin mempunyai akses kepada antara muka Backtesting dari mana ia boleh memanggil kaedah Start() dengan tandatangan berikut.

1
BacktestingProcess Start(RobotType robotType, string symbolName, TimeFrame timeFrame, BacktestingSettings settings, params object[] parameterValues);

Parameter

Dalam tatasusunan parameterValues, parameter cBot mesti dihantar dalam urutan tetap (urutan di mana ia dinyatakan dalam antara muka pengguna cTrader). Jika beberapa parameter tiada, nilai lalai dimasukkan secara automatik.

Proses ujian belakang

Apabila melancarkan ujian belakang secara programatik, anda boleh melancarkan beberapa proses ujian belakang secara selari, yang berpotensi menjimatkan banyak masa anda.

Sebagai tambahan, antara muka tersebut juga mengandungi dua peristiwa, iaitu ProgressChanged dan Completed. Hujah untuk peristiwa Completed (BacktestingCompletedEventArgs) mengandungi objek JSON hasil ujian belakang akhir (JsonReport), membolehkan anda mentafsirkannya mengikut keperluan dan memaparkan statistik yang terhasil kepada pengguna baharu.

Cipta plugin contoh

Plugin berikut memaparkan blok baharu dalam Panel Simbol Aktif (ASP). Di dalam blok tersebut, plugin membolehkan pengguna memilih mana-mana cBot yang mereka miliki dan menguji belakangnya pada EURUSD h1. Selepas ujian belakang selesai, plugin memaparkan ROI akhir dan keuntungan bersih.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
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)
        {
            // Updading the variable to always contain
            // the cBot selected in the ComboBox
            _selectedRobotType = AlgoRegistry.Get(obj.SelectedItem) as RobotType;
        }

    }
}

Plugin bertindak balas secara dinamik terhadap status proses ujian belakang. Sebaik sahaja ujian belakang selesai, plugin menunjukkan hasilnya dalam TextBlock. _startBacktestingButton dan _cBotsComboBox dinyahaktifkan sepanjang ujian belakang.

Ringkasan

Ujian belakang melalui plugin adalah ciri berkuasa yang membolehkan anda membina sambungan antara muka pengguna di atas logik ujian belakang yang sudah berkuasa yang disediakan oleh cTrader. Digandingkan dengan ahli API lain seperti AlgoRegistry, ujian belakang dalam plugin menawarkan banyak kemungkinan untuk sesiapa yang menjual dan membangunkan algo cTrader.

Image title