cTrader Algo memungkinkan backtesting cBot langsung dari plugin, yang membuka banyak kemungkinan bagi pengembang algo. Baca ringkasan satu menit kami di bawah ini untuk mempelajari lebih lanjut.
Backtesting dalam plugin dalam satu menit!
Jalankan backtesting secara terprogram atau sebagai respons terhadap umpan balik pengguna dan tampilkan hasilnya di tempat yang sesuai di UI cTrader di mana plugin dapat ditempatkan.
Perluas kemampuan backtesting bawaan di dalam cTrader dengan menambahkan strategi backtesting baru seperti simulasi Monte Carlo.
Tambahkan statistik kustom ke hasil backtesting dan tampilkan langsung di UI cTrader.
Buat metode optimisasi kompleks yang melampaui algoritma genetik standar.
Cara kerja backtesting dalam plugin
Kelas dasar Plugin memiliki akses ke antarmuka Backtesting dari mana ia dapat memanggil metode Start() dengan tanda tangan berikut.
Dalam array parameterValues, parameter cBot harus dilewatkan dalam urutan tetap (urutan yang ditentukan dalam UI cTrader). Jika beberapa parameter tidak ada, nilai default akan disisipkan secara otomatis.
Proses backtesting
Saat menjalankan backtesting secara terprogram, Anda dapat menjalankan beberapa proses backtesting secara paralel, yang berpotensi menghemat banyak waktu.
Selain itu, antarmuka juga berisi dua event, yaitu ProgressChanged dan Completed. Argumen untuk event Completed (BacktestingCompletedEventArgs) berisi objek JSON dari hasil backtesting akhir (JsonReport), memungkinkan Anda untuk menafsirkannya sesuai kebutuhan dan menampilkan statistik yang dihasilkan kepada pengguna baru.
Buat plugin contoh
Plugin berikut menampilkan blok baru di Panel Simbol Aktif (ASP). Di dalam blok tersebut, plugin memungkinkan pengguna memilih cBot apa pun yang mereka miliki dan melakukan backtesting pada EURUSD h1. Setelah backtesting selesai, plugin menampilkan ROI dan laba bersih akhir.
usingSystem;usingcAlgo.API;usingcAlgo.API.Collections;usingcAlgo.API.Indicators;usingcAlgo.API.Internals;usingSystem.Linq;usingSystem.Text.Json;usingSystem.Text.Json.Nodes;namespacecAlgo.Plugins{[Plugin(AccessRights = AccessRights.None)]publicclassBacktestingInPluginsSample:Plugin{// Declaring the necessary UI elements// and the cBot (RobotType) selected in the ComboBoxprivateGrid_grid;privateComboBox_cBotsComboBox;privateButton_startBacktestingButton;privateTextBlock_resultsTextBlock;privateRobotType_selectedRobotType;protectedoverridevoidOnStart(){// Initialising and structuring the UI elements_grid=newGrid(3,1);_cBotsComboBox=newComboBox();_startBacktestingButton=newButton{BackgroundColor=Color.Green,CornerRadius=newCornerRadius(5),Text="Start Backtesting",};_resultsTextBlock=newTextBlock{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);varblock=Asp.SymbolTab.AddBlock("Backtesting Plugin");block.Child=_grid;// Populating the ComboBox with existing cBotsPopulateCBotsComboBox();// 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;}protectedvoidStartBacktestingButton_Click(ButtonClickEventArgsobj){// Initialising and configuring the backtesting settingsvarbacktestingSettings=newBacktestingSettings{DataMode=BacktestingDataMode.M1,StartTimeUtc=newDateTime(2023,6,1),EndTimeUtc=DateTime.UtcNow,Balance=10000,};// Starting backtesting on EURUSD h1Backtesting.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...";}protectedvoidPopulateCBotsComboBox(){// Iterating over the AlgoRegistry and// getting the names of all installed cBotsforeach(varrobotTypeinAlgoRegistry.OfType<RobotType>()){_cBotsComboBox.AddItem(robotType.Name);}}protectedvoidBacktesting_Completed(BacktestingCompletedEventArgsobj){// Attaining the JSON results of backtestingstringjsonResults=obj.JsonReport;// Converting the JSON string into a JsonNodeJsonNoderesultsNode=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;}protectedvoidCBotsComboBox_SelectedItemChanged(ComboBoxSelectedItemChangedEventArgsobj){// Updading the variable to always contain// the cBot selected in the ComboBox_selectedRobotType=AlgoRegistry.Get(obj.SelectedItem)asRobotType;}}}
Plugin secara dinamis bereaksi terhadap status proses backtesting. Segera setelah backtesting selesai, plugin menampilkan hasilnya di TextBlock. _startBacktestingButton dan _cBotsComboBox dinonaktifkan selama backtesting berlangsung.
Ringkasan
Backtesting melalui plugin adalah fitur yang kuat yang memungkinkan Anda membangun ekstensi UI di atas logika backtesting yang sudah kuat yang disediakan oleh cTrader. Digabungkan dengan anggota API lainnya seperti AlgoRegistry, backtesting dalam plugin menawarkan banyak kemungkinan bagi siapa pun yang menjual dan mengembangkan algo cTrader.