BacktestingInPlugins Sample¶
نظرة عامة ¶
تتيح إضافة BacktestingInPlugins Sample تشغيل اختبار الإستراتيجية التاريخي مباشرة من واجهة منصة cTrader باستخدام الوظائف الرئيسية التالية:
- إنشاء تخطيط لوحة منظم مع قائمة منسدلة وزر إجراء وحقل عرض النتائج.
- سرد جميع cBots المثبتة في القائمة المنسدلة لسهولة الاختيار.
- تشغيل اختبار عكسي على الرمز المحدد باستخدام البيانات التاريخية عند تشغيله.
- عرض العائد على الاستثمار (ROI) وصافي الربح من نتائج الاختبار العكسي.

تعمل هذه الإضافة في لوحة مخصصة داخل لوحة الرمز النشط وتظل نشطة أثناء فتح cTrader Windows أو Mac. تتوقف تلقائيًا عند إغلاق المنصة أو إعادة تشغيلها.
إنشاء الإضافة ¶
تعرف على كيفية إنشاء وتحرير وبناء الإضافات من قالب أو من الصفر في دليلنا خطوة بخطوة.
يمكنك العثور على كود إضافة BacktestingInPlugins Sample على GitHub، أو ببساطة نسخه أدناه.
نموذج الكود
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;
}
}
}
خيارات التخصيص ¶
توفر هذه الإضافة واجهة مباشرة لبدء الاختبارات العكسية وعرض النتائج الأساسية. يوضح الجدول أدناه المكونات الرئيسية ووظائفها:
| المعلمة | الوصف | القيم الممكنة |
|---|---|---|
_grid | تحدد تخطيط واجهة الإضافة. | (3, 1)، (2, 2)، إلخ. |
_startBacktestingButton | تخصص مظهر وتسمية زر البدء. | Start Backtesting, Color.Green, new CornerRadius(5) |
_cBotsComboBox.AddItem | تملأ ComboBox بـ cBots من السجل. | robottype.name |
_resultsTextBlock.Text | تعرض الرسائل أثناء دورة الاختبار العكسي. | حدد cBot...، الاختبار العكسي قيد التقدم...، ملخص نتائج الاختبار العكسي، إلخ. |
CBotsComboBox_SelectedItemChanged | تحدّث cBot المحدد للاختبار. | obj.selecteditem |
StartTimeUtc | تاريخ ووقت بدء الاختبار العكسي بتوقيت UTC. | new datetime(2023, 6, 1) |
EndTimeUtc | تاريخ ووقت انتهاء الاختبار العكسي بتوقيت UTC. | datetime.utcnow |
DataMode | تحدد ما يمثل كل حركة نقطة بيانات (1 دقيقة، 1 ساعة أو 1 يوم). | backtestingdatamode.m1 |
Balance | رصيد الحساب الافتراضي الأولي. | 10000، 20000، إلخ. |
Backtesting.Start | تحدد الرمز والإطار الزمني لتشغيل الاختبارات العكسية عليهما. | eurusd, timeframe.hour |
Backtesting_Completed | تستخرج وتعرض نتائج الاختبار في واجهة المستخدم. | resultsnode[main][roi]، resultsnode[main][netprofit]، إلخ. |
ملاحظة
تأكد من تثبيت cBot واحد على الأقل في cTrader لتعبئة القائمة المنسدلة بشكل صحيح.
حالات الاستخدام ¶
توفر هذه الإضافة طريقة لتشغيل اختبارات الإستراتيجية التاريخية في لوحة الرمز النشط. تبسط عملية اختيار واختبار cBots، مما يجعلها مثالية لتقييم الإستراتيجية. فيما يلي حالات استخدام عملية توضح كيف يمكن تطبيق الإضافة على سيناريوهات التداول الحقيقية.
| حالة الاستخدام | السيناريو | القيمة |
|---|---|---|
| مقارنة الإستراتيجية | تشغيل اختبارات عكسية على cBots متعددة باستخدام ظروف اختبار متطابقة. | تمكّن من المقارنة المباشرة للأداء ضمن جلسة واحدة. |
| مراجعة الأداء السريعة | اختبار أي cBot مثبت على إعداد سوق قياسي. | يساعدك على تقييم أداء cBot قبل تشغيله على حساب حقيقي. |
| اختبار عكسي لقواعد ثابتة | التحقق من صحة تغييرات الخوارزمية عن طريق إطلاق اختبار عكسي محدد مسبقًا. | يضمن الاتساق في ظروف الاختبار عند تصحيح الأخطاء أو اختبار إصدارات الإستراتيجيات. |
| أداة الرؤى السريعة | عرض تعليقات العائد على الاستثمار والربح فورًا بعد اختبار cBots المثبتة. | يوفر الوقت مقارنة بإطلاق جلسات اختبار منفصلة. |
الملخص ¶
توفر هذه الإضافة واجهة مبسطة لاختيار cBot وتشغيل اختبار عكسي تاريخي باستخدام إعدادات محددة مسبقًا. تقوم بتشغيل الاختبار على رمز وإطار زمني مختارين، ثم تعرض مقاييس الأداء الرئيسية مثل العائد على الاستثمار وصافي الربح. يدعم الهيكل التحقق السريع من صحة الإستراتيجية وقابل للتكيف مع سيناريوهات التداول المختلفة.
لمزيد من تفاصيل التطوير، راجع وثائق الإضافة الخاصة بنا.