ข้ามไปที่เนื้อหา

BacktestingInPlugins Sample

ภาพรวม

ปลั๊กอิน BacktestingInPlugins Sample ช่วยให้สามารถทดสอบกลยุทธ์ย้อนหลังได้โดยตรงจากอินเทอร์เฟซแพลตฟอร์ม cTrader โดยใช้ฟังก์ชันหลักดังต่อไปนี้:

  • สร้างโครงสร้างแผงที่มีเมนูแบบดรอปดาวน์ ปุ่มดำเนินการ และฟิลด์แสดงผลลัพธ์
  • แสดงรายการ cBots ที่ติดตั้งทั้งหมดในเมนูดรอปดาวน์เพื่อให้เลือกได้ง่าย
  • ดำเนินการ backtest บนสัญลักษณ์ที่ตั้งค่าโดยใช้ข้อมูลย้อนหลังเมื่อถูกเรียกใช้
  • แสดงผลตอบแทนจากการลงทุน (ROI) และกำไรสุทธิจากผลลัพธ์การ backtest

ปลั๊กอินนี้ทำงานในแผงที่กำหนดเองภายในแผงสัญลักษณ์ที่ใช้งานอยู่และยังคงทำงานอยู่ขณะที่ 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;
        }
    }
}

ตัวเลือกการปรับแต่ง

ปลั๊กอินนี้ให้อินเทอร์เฟซโดยตรงสำหรับการเริ่มต้น backtest และดูผลลัพธ์พื้นฐาน ตารางด้านล่างสรุปส่วนประกอบหลักและหน้าที่ของมัน:

พารามิเตอร์ คำอธิบาย ค่าที่เป็นไปได้
_grid กำหนดเลย์เอาต์สำหรับอินเทอร์เฟซของปลั๊กอิน (3, 1), (2, 2), เป็นต้น
_startBacktestingButton ปรับแต่งรูปลักษณ์และป้ายของปุ่มเริ่มต้น Start Backtesting, Color.Green, new CornerRadius(5)
_cBotsComboBox.AddItem เติม ComboBox ด้วย cBots จากรีจิสทรี robottype.name
_resultsTextBlock.Text แสดงข้อความระหว่างวงจร backtest Select a cBot..., Backtesting in progress..., Backtesting results summary, เป็นต้น
CBotsComboBox_SelectedItemChanged อัปเดต cBot ที่เลือกสำหรับการทดสอบ obj.selecteditem
StartTimeUtc วันที่และเวลาเริ่มต้น backtest ใน UTC new datetime(2023, 6, 1)
EndTimeUtc วันที่และเวลาสิ้นสุด backtest ใน UTC datetime.utcnow
DataMode กำหนดว่าอะไรเป็นตัวแทนของการเคลื่อนไหวของแต่ละจุดข้อมูล (1 นาที, 1 ชั่วโมง หรือ 1 วัน) backtestingdatamode.m1
Balance ยอดคงเหลือเริ่มต้นของบัญชีเสมือน 10000, 20000, เป็นต้น
Backtesting.Start กำหนดสัญลักษณ์และกรอบเวลาที่จะทำ backtest eurusd, timeframe.hour
Backtesting_Completed ดึงและแสดงผลการทดสอบใน UI resultsnode[main][roi], resultsnode[main][netprofit], เป็นต้น

หมายเหตุ

ตรวจสอบให้แน่ใจว่าได้ติดตั้ง cBot อย่างน้อยหนึ่งตัวใน cTrader เพื่อให้ dropdown เติมข้อมูลได้อย่างถูกต้อง

กรณีการใช้งาน

ปลั๊กอินนี้มีวิธีในการรันการทดสอบกลยุทธ์ทางประวัติศาสตร์ในแผงสัญลักษณ์ที่ใช้งานอยู่ มันทำให้การเลือกและทดสอบ cBot ง่ายขึ้น ทำให้เหมาะสำหรับการประเมินกลยุทธ์ ด้านล่างนี้คือกรณีการใช้งานจริงที่แสดงให้เห็นว่าปลั๊กอินอาจถูกนำไปใช้กับสถานการณ์การเทรดจริงได้อย่างไร

กรณีการใช้งาน สถานการณ์ คุณค่า
การเปรียบเทียบกลยุทธ์ รัน backtest บน cBot หลายตัวโดยใช้เงื่อนไขการทดสอบที่เหมือนกัน ช่วยให้สามารถเปรียบเทียบประสิทธิภาพโดยตรงภายในเซสชันเดียว
การตรวจสอบประสิทธิภาพอย่างรวดเร็ว ทดสอบ cBot ที่ติดตั้งใดๆ บนการตั้งค่าตลาดมาตรฐาน ช่วยให้คุณประเมินประสิทธิภาพของ cBot ก่อนที่จะรันมันบนบัญชีจริง
การ backtest ด้วยกฎที่กำหนด ตรวจสอบการเปลี่ยนแปลงของอัลกอริทึมโดยการเปิดการ backtest ที่กำหนดไว้ล่วงหน้า ช่วยให้มั่นใจในความสม่ำเสมอของเงื่อนไขการทดสอบเมื่อทำการดีบักหรือทดสอบเวอร์ชันของกลยุทธ์
เครื่องมือสำหรับการรับข้อมูลเชิงลึกอย่างรวดเร็ว ดูผลตอบแทนจากการลงทุน (ROI) และผลตอบรับกำไรทันทีหลังจากทดสอบ cBot ที่ติดตั้ง ช่วยประหยัดเวลาเมื่อเทียบกับการเปิดเซสชันการทดสอบแยกต่างหาก

สรุป

ปลั๊กอินนี้ให้อินเทอร์เฟซที่เรียบง่ายสำหรับการเลือก cBot และการทำ backtesting โดยใช้การตั้งค่าที่กำหนดไว้ล่วงหน้า มันจะทำการทดสอบบนสัญลักษณ์และกรอบเวลาที่เลือก จากนั้นแสดงตัวชี้วัดประสิทธิภาพหลัก เช่น ROI และกำไรสุทธิ โครงสร้างนี้สนับสนุนการตรวจสอบกลยุทธ์อย่างรวดเร็วและสามารถปรับใช้ได้ในสถานการณ์การเทรดที่หลากหลาย

สำหรับรายละเอียดการพัฒนาเพิ่มเติม โปรดดูที่เอกสารปลั๊กอิน ของเรา