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.
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.
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 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.