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

วิธีใช้อินดิเคเตอร์ใน cBots

ในบทความนี้และวิดีโอที่เกี่ยวข้อง เราอธิบายวิธีที่คุณสามารถใช้อินดิเคเตอร์ในตัวใน cBots ของคุณ การใช้อินดิเคเตอร์ใน cBot มักทำเพื่อวัตถุประสงค์ที่หลากหลาย โดยเฉพาะอย่างยิ่งเพื่อให้ cBots ตัดสินใจเทรดตามผลลัพธ์ของอินดิเคเตอร์ เพื่อสาธิตสิ่งนี้ เราจะพัฒนา กลยุทธ์การเทรดอัตโนมัติ อย่างง่ายโดยใช้ Relative Strength Index (RSI)

สร้าง cBot ใหม่

เพื่อสร้าง cBot ใหม่ ให้สลับไปที่แท็บ Algo และคลิก cBot ใหม่

เราจะเปลี่ยนชื่อ cBot ของเราเป็น "RSI cBot" นี่คือวิธีการทำงานของกลยุทธ์การเทรดอัตโนมัติของเรา

  • บอทจะเข้าสู่โพสิชันซื้อเมื่ออินดิเคเตอร์ RSI เคลื่อนที่ต่ำกว่าเกณฑ์ที่กำหนดไว้ล่วงหน้า
  • บอทจะเข้าสู่โพสิชันขายเมื่ออินดิเคเตอร์ RSI เคลื่อนที่สูงกว่าเกณฑ์ที่กำหนดไว้ล่วงหน้า

กำหนดและเริ่มต้นอินดิเคเตอร์

สิ่งแรกที่เราต้องทำคือกำหนดอินดิเคเตอร์ RSI ในคลาส cBot ของเรา เพื่อทำเช่นนั้น เราประกาศฟิลด์ใหม่

1
private RelativeStrengthIndicator rsi;

การใช้สมาชิกคลาสแบบส่วนตัว

เราสามารถทำให้ฟิลด์ rsi เป็นแบบส่วนตัวได้อย่างปลอดภัย เนื่องจากจะใช้เฉพาะใน cBot ของเราเท่านั้น

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

1
2
3
4
5
[Parameter("Source", Group = "RSI")]
public DataSeries Source { get; set; }

[Parameter("Periods", Group = "RSI", DefaultValue = 14)]
public int Periods { get; set; }

ตอนนี้เราได้เพิ่มพารามิเตอร์ของเราแล้ว เราพร้อมที่จะเริ่มต้นอินดิเคเตอร์

1
2
3
4
protected override void OnStart()
{
    rsi = Indicators.RelativeStrengthIndex(Source, Periods);
}

นำกลยุทธ์การเทรดมาใช้

เนื่องจากเราได้เริ่มต้นอินดิเคเตอร์แล้ว เราสามารถเรียกใช้และใช้งานในตรรกะการเทรดของเราได้ ในกรณีของอินดิเคเตอร์ RSI เราสามารถอ่านเอาต์พุตโดยใช้คอลเลกชัน Results

เพื่อทำเช่นนั้น เราจะใช้เมธอด OnBar() และใช้เงื่อนไขต่อไปนี้

  • หากค่า RSI ปัจจุบันต่ำกว่าเกณฑ์การซื้อ RSI ให้เปิดสถานะซื้อใหม่
  • หากค่า RSI ปัจจุบันสูงกว่าเกณฑ์การขาย RSI ให้เปิดสถานะขายใหม่

เนื่องจากเราอาศัยเกณฑ์ที่กำหนดไว้ล่วงหน้าในการดำเนินการตรรกะการเทรด เราจะเพิ่มพารามิเตอร์อีกสองตัวให้กับ cBot ของเรา

1
2
3
4
5
[Parameter("Buy Level", Group = "RSI", DefaultValue = 30)]
public int BuyLevel { get; set; }

[Parameter("Sell Level", Group = "RSI", DefaultValue = 70)]
public int SellLevel { get; set; }

ต่อไป เราจะใช้เงื่อนไขของเราในโค้ด cBot

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
protected override void OnBarClosed()
{
    if (rsi.Result.LastValue < BuyLevel)
    {
    // Enter buy position
    }
    else if (rsi.Result.LastValue > SellLevel)
    {
    // Enter sell position
    }
}

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

เราเริ่มต้นด้วยการเพิ่มพารามิเตอร์ cBot อีกหนึ่งตัวที่ช่วยให้คุณสามารถกำหนดปริมาณการเทรดได้

1
2
[Parameter("Quantity (Lots)", Group = "Volume", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
public double Quantity { get; set; }

หลังจากนั้น เราจะเพิ่มเมธอด Open() และ Close() สำหรับการเปิดสถานะใหม่และปิดสถานะทั้งหมดที่เปิดโดย cBot ในทิศทางที่กำหนด

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
private void Open(TradeType tradeType)
{
    var position = Positions.Find("SampleRSI", SymbolName, tradeType);
    var volumeInUnits = Symbol.QuantityToVolumeInUnits(Quantity);

    if (position == null)
        ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "RSI cBot");
}

private void Close(TradeType tradeType)
{
    foreach (var position in Positions.FindAll("SampleRSI", SymbolName, tradeType))
        ClosePosition(position);
}

เราสามารถใช้เมธอดเสริมของเราเพื่อทำให้กลยุทธ์การเทรดอัตโนมัติสมบูรณ์

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
protected override void OnTick()
{
    if (rsi.Result.LastValue < BuyLevel)
    {
        Close(TradeType.Sell);
        Open(TradeType.Buy);
    }
    else if (rsi.Result.LastValue > SellLevel)
    {
        Close(TradeType.Buy);
        Open(TradeType.Sell);
    }
}

Probar el cBot

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

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

Image title