انتقل إلى المحتوى

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 وتشغيل اختبار عكسي تاريخي باستخدام إعدادات محددة مسبقًا. تقوم بتشغيل الاختبار على رمز وإطار زمني مختارين، ثم تعرض مقاييس الأداء الرئيسية مثل العائد على الاستثمار وصافي الربح. يدعم الهيكل التحقق السريع من صحة الإستراتيجية وقابل للتكيف مع سيناريوهات التداول المختلفة.

لمزيد من تفاصيل التطوير، راجع وثائق الإضافة الخاصة بنا.