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 และกำไรสุทธิ โครงสร้างนี้สนับสนุนการตรวจสอบกลยุทธ์อย่างรวดเร็วและสามารถปรับใช้ได้ในสถานการณ์การเทรดที่หลากหลาย
สำหรับรายละเอียดการพัฒนาเพิ่มเติม โปรดดูที่เอกสารปลั๊กอิน ของเรา