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

ฟังก์ชันความเหมาะสมที่กำหนดเองสำหรับการปรับให้เหมาะสมที่สุด

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

โปรดทราบว่าบทความนี้ไม่ครอบคลุมกระบวนการ การปรับให้เหมาะสมที่สุดของ cBot โดยใช้เกณฑ์ในตัว

กำหนดฟังก์ชันความเหมาะสมที่กำหนดเอง

ฟังก์ชันความเหมาะสมที่กำหนดเองเป็นเพียงการโอเวอร์ไรด์เมธอด GetFitness()

1
2
3
4
protected override double GetFitness(GetFitnessArgs args)
{

}

การโอเวอร์ไรด์ต้องยอมรับอาร์กิวเมนต์เดียวของประเภท GetFitness args เพื่อให้นับเป็นฟังก์ชันความเหมาะสมที่กำหนดเอง

เขียนฟังก์ชันความเหมาะสมที่กำหนดเอง

เนื่องจากเมธอด GetFitness() ต้องส่งคืนค่า double เนื้อหาของเมธอดควรมีการคำนวณที่ส่งผลลัพธ์เป็นค่าประเภทนี้

ตัวอย่างเช่น เราสามารถเขียนฟังก์ชันความเหมาะสมที่กำหนดเองอย่างง่ายที่ยกกำลังสองจำนวนรวมของการเทรดที่ชนะที่ทำโดย cBot แล้วหารค่านี้ด้วยมูลค่ารวมของการเทรดที่แพ้ ด้วยวิธีนี้ เราจะให้น้ำหนักมากขึ้นกับการเทรดที่ชนะและในแง่หนึ่ง อนุญาตให้ cBot ที่ปรับให้เหมาะสมที่สุดทำการเล่นที่มีความเสี่ยงบางอย่าง

นี่คือลักษณะของฟังก์ชันความเหมาะสมของเรา

1
2
3
4
protected override double GetFitness(GetFitnessArgs args)
{
    return Math.Pow(args.WinningTrades, 2) / args.LosingTrades;
}

ณ จุดนี้ เราสามารถเพิ่มการโอเวอร์ไรด์ให้กับ cBot ใดก็ได้ที่เราต้องการ จากนั้นบันทึกและสร้างมัน

ใช้ฟังก์ชันความเหมาะสมที่กำหนดเองในการปรับให้เหมาะสมที่สุด

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

ระหว่างการปรับให้เหมาะสมที่สุด คะแนนความเหมาะสมที่สูงขึ้นจะถูกจัดสรรให้กับการผ่านที่ cBot ได้เพิ่มอัตราส่วนระหว่างจำนวนการเทรดที่ชนะยกกำลังสองและจำนวนการเทรดที่แพ้ให้สูงสุด

แก้ไขฟังก์ชันความเหมาะสมที่กำหนดเอง

เรายังสามารถกลับไปที่ฟังก์ชันที่กำหนดเองของเราและแก้ไขดังนี้

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
protected override double GetFitness(GetFitnessArgs args)
{
    if (args.TotalTrades > 20)
    {
        return Math.Pow(args.WinningTrades, 2) / args.LosingTrades;
    }
    else
    {
        return double.MinValue;
    }
}

ฟังก์ชันนี้ยังคงใช้อัลกอริทึมก่อนหน้านี้ แต่จะใช้การคำนวณที่กำหนดเองเฉพาะเมื่อมีการวางการเทรดมากกว่า 20 ครั้งโดย cBot เท่านั้น ในกรณีอื่นๆ ฟังก์ชันจะส่งคืนค่า double ที่ต่ำที่สุดที่เป็นไปได้ ในทางทฤษฎี สิ่งนี้ควรปรับปรุงผลลัพธ์โดยลดความเป็นไปได้ของอคติทางสถิติ

หากเราสร้าง bot ใหม่และรันการปรับให้เหมาะสมที่สุดอีกครั้ง เราควรเห็นการผ่านหลายครั้งได้คะแนนความเหมาะสมต่ำมากเนื่องจากจำนวนการเทรดทั้งหมดที่น้อยที่ cBot วางไว้

สุดท้าย เราต้องการลด Drawdown อิควิตี้ให้น้อยที่สุดในขณะที่ยังคงส่งเสริมการเทรดที่กระตือรือร้น

1
2
3
4
5
6
7
8
if (args.TotalTrades > 20 && args.MaxEquityDrawdownPercentages < 50)
{
    return Math.Pow(args.WinningTrades, 2) / args.LosingTrades;
}
else
{
    return double.MinValue;
}

หากเรารันการปรับให้เหมาะสมที่สุดอีกครั้ง เราควรเห็นการผ่านที่ดีที่สุดที่เป็นไปได้ตามกลยุทธ์การเทรดของเรา

ฟังก์ชันความเหมาะสมที่กำหนดเองให้เครื่องมือที่ยอดเยี่ยมในการกำหนดค่าพารามิเตอร์ที่ดีที่สุดที่เป็นไปได้ที่เหมาะกับวิธีการเทรดที่เป็นเอกลักษณ์ของคุณ