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

ความทนทานต่อข้อผิดพลาด

คำว่า "ความทนทานต่อข้อผิดพลาด" หมายถึงความสามารถของระบบอัตโนมัติในการทำงานต่อไปเมื่อเผชิญกับความล้มเหลว สำหรับอัลกอริทึม cTrader ความทนทานต่อข้อผิดพลาดหมายความว่ากระบวนการที่โฮสต์ cBot ปลั๊กอิน และตัวบ่งชี้สามารถทำงานต่อไปได้แม้เมื่อเผชิญกับข้อผิดพลาด

บทความนี้อธิบายวิธีการทำงานของความทนทานต่อข้อผิดพลาดและอธิบายประโยชน์หลักที่ฟีเจอร์นี้มอบให้กับนักเทรดที่ใช้ Algo

ความทนทานต่อข้อผิดพลาดในหนึ่งนาที!

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

กฎความทนทานต่อข้อผิดพลาด

โดยสรุป ความทนทานต่อข้อผิดพลาดทำให้แน่ใจว่าอัลกอทั้งหมดปฏิบัติตามกฎที่ระบุไว้ด้านล่าง:

  • เมื่อพบข้อยกเว้น อัลกอต้องทำงานต่อไป
  • ข้อยกเว้นทุกอย่างที่เกิดขึ้นในขณะที่อัลกอกำลังทำงานต้องถูกบันทึกไว้
  • ผู้ใช้ต้องมีโอกาสในการแนะนำกฎที่กำหนดเองซึ่งกำหนดวิธีที่อัลกอจัดการกับข้อยกเว้นต่างๆ

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

เมธอด OnException()

ภายใต้กฎความทนทานต่อข้อผิดพลาด อัลกอต้องละเว้นข้อยกเว้น อย่างไรก็ตาม คุณยังสามารถปรับแต่งวิธีที่อัลกอของคุณตอบสนองต่อข้อยกเว้นบางอย่าง หรือเขียนทับพฤติกรรมความทนทานต่อข้อผิดพลาดเริ่มต้นทั้งหมดได้

เพื่อทำเช่นนั้น ให้ใช้เมธอด OnException() มันทำหน้าที่เป็นตัวจัดการเฉพาะสำหรับข้อยกเว้นที่ไม่ได้จัดการ ลายเซ็นเริ่มต้นของมันเป็นดังนี้:

1
2
3
4
protected virtual void OnException(Exception exception)
{
    /// Introduce your custom exception handling logic here.
}

พิจารณาตัวอย่างต่อไปนี้ซึ่งเมธอด OnException() ถูกใช้เพื่อเปลี่ยนวิธีที่ cBot ตอบสนองต่อข้อยกเว้น NullReferenceException

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class SampleExceptionBot : Robot
    {
        private const string label = "Sample Exception Bot";
        protected override void OnStart()
        {
                var shortPosition = Positions.Find(label, SymbolName, TradeType.Sell);
                ClosePosition(shortPosition);
        }

        protected override void OnException(Exception exception)
        {
            if (exception is NullReferenceException)
            {
                MessageBox.Show("The position does not exist", "Error!");
            }
        }
    }
}

เพื่อโยนข้อยกเว้น NullReferenceException เราทำให้ cBot ของเราปิดสถานะขายที่อาจไม่มีอยู่ เมื่อพบข้อยกเว้นที่ระบุ cBot ของเราควรแสดง MessageBox ที่แสดงข้อความอธิบาย เพื่อให้เราสามารถตอบสนองต่อข้อยกเว้นนี้ได้อย่างรวดเร็วและปรับพฤติกรรมของ cBot ของเรา

โปรดทราบว่าตัวจัดการ OnException() ไม่ได้มีไว้เพื่อจัดการข้อยกเว้นที่เกิดขึ้นในขณะที่เมธอดนี้กำลังถูกเรียกใช้ อย่างไรก็ตาม ข้อยกเว้นดังกล่าวยังคงถูกบันทึกไว้ในบันทึกเหตุการณ์

ประโยชน์ของความทนทานต่อข้อผิดพลาด

ความทนทานต่อข้อผิดพลาดเป็นแง่มุมที่สำคัญของวิธีการทำงานของการเทรดด้วยอัลกอใน cTrader โดยให้ประโยชน์ดังต่อไปนี้

  • ความทนทานต่อข้อผิดพลาดช่วยเพิ่มความน่าเชื่อถือของอัลกอและเปิดโอกาสใหม่ๆ ในการปรับปรุงวิธีที่คุณเข้าถึงการเทรดอัตโนมัติ
  • เนื่องจากอัลกอสามารถแสดงข้อยกเว้นที่พบในบันทึกเหตุการณ์ คุณสามารถระบุเงื่อนไขที่อัลกอพบข้อผิดพลาดเฉพาะได้อย่างง่ายดาย
  • โดยการอนุญาตให้จัดการเหตุการณ์ข้อยกเว้น เมธอด OnException() สามารถใช้เพื่อปรับปรุงพฤติกรรมของอัลกอของคุณและเพิ่มความน่าเชื่อถือของพวกมัน

จัดการการหยุดทำงาน

ตามที่กล่าวไว้ก่อนหน้านี้ ข้อผิดพลาดหลายอย่างสามารถทำให้กระบวนการทั้งหมดหยุดทำงานได้ ข้อผิดพลาดเหล่านั้นมีดังนี้:

  • ข้อยกเว้น OutOfMemoryException
  • ข้อยกเว้น StackOverflowException
  • ข้อยกเว้นที่ไม่ได้จัดการใดๆ ที่เกิดขึ้นในเธรดแยก
  • ข้อผิดพลาดอื่นๆ ที่อาจทำให้กระบวนการที่อัลกอกำลังทำงานอยู่หยุดทำงาน

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

ในทางตรงกันข้าม เมื่อกระบวนการที่โฮสต์อินสแตนซ์ของ cBot หยุดทำงาน มันจะเริ่มต้นใหม่โดยอัตโนมัติ (โดยข้อยกเว้นจะถูกบันทึกไว้ในบันทึก)

หลายอินสแตนซ์ในกระบวนการเดียว

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

สรุป

ความทนทานต่อข้อผิดพลาดให้โอกาสที่มีค่าหลายอย่างในการทำให้อัลกอมีความเสถียรและมีประสิทธิภาพมากขึ้น ตัวจัดการ OnException() ให้การควบคุมเพิ่มเติมในการกำหนดวิธีที่อัลกอของคุณตอบสนองต่อข้อยกเว้น