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

วิธีสร้างอินดิเคเตอร์ที่กำหนดเองใน cTrader

ในบทความนี้และวิดีโอที่เกี่ยวข้อง เราจะพูดถึงวิธีการสร้างอินดิเคเตอร์ที่กำหนดเองใหม่ใน cTrader เราจะสร้าง Simple Moving Average indicator และแสดงวิธีการปรับแต่งพารามิเตอร์ของอินดิเคเตอร์ได้อย่างรวดเร็ว

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

เพิ่มอินดิเคเตอร์ที่กำหนดเองใหม่

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

ต่อไป เปลี่ยนชื่อของอินดิเคเตอร์จากชื่อเริ่มต้น ในการทำเช่นนั้น คลิกขวาที่มันและคลิก Rename หรือเลือกมันและกด F2 เราจะพิมพ์ Simple moving average เป็นชื่อใหม่ของอินดิเคเตอร์ของเรา เมื่อเสร็จแล้ว ให้กด Enter ณ จุดนี้ เราพร้อมที่จะเริ่มเขียนโค้ดสำหรับตรรกะและสูตรของอินดิเคเตอร์ที่กำหนดเอง

ดูโครงสร้างของอินดิเคเตอร์

ก่อนที่เราจะเริ่ม เราจะดูโครงสร้างโค้ดของอินดิเคเตอร์ที่แสดงในหน้าต่าง code editor อย่างรวดเร็ว โครงสร้างนี้รวมถึงการตั้งค่าพารามิเตอร์เริ่มต้นและวิธีการคำนวณและแสดงอินดิเคเตอร์บนแผนภูมิ

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

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

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

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

1
2
3
4
5
[Parameter(DefaultValue = "Hello world!")]
public string Message { get; set; }

[Output("Main")]
public IndicatorDataSeries Result { get; set; }

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

ชื่อเมธอด คำจำกัดความ
Initialize() เมธอดเหตุการณ์นี้ถูกเรียกเมื่ออินดิเคเตอร์ถูกแนบกับแผนภูมิ ใช้เพื่อเริ่มต้นตัวแปรใดๆ ที่คุณวางแผนจะใช้ในอินดิเคเตอร์ของคุณ คุณยังสามารถกำหนดและอ้างอิงอินดิเคเตอร์เพิ่มเติมเพื่อสร้างอินดิเคเตอร์เดียวโดยใช้สูตรจากอินดิเคเตอร์อื่นๆ
OnCalculate() เมธอดนี้ถูกเรียกในแต่ละ tick ของข้อมูลที่เข้ามา ภายในเมธอดนี้ คุณสามารถเขียนตรรกะที่จะประมวลผลข้อมูลที่เข้ามาเพื่อคำนวณเส้นที่พล็อตต่อไปที่อินดิเคเตอร์ควรแสดง
OnExcepion() เมธอดนี้ถูกเรียกหากอินดิเคเตอร์ของคุณพบข้อผิดพลาด คุณสามารถใช้มันเพื่อกำหนดว่าอินดิเคเตอร์ของคุณควรทำอะไรเมื่อจับข้อผิดพลาด โปรดทราบว่าเมธอดนี้ไม่มีอยู่ในเทมเพลตโค้ดอินดิเคเตอร์เริ่มต้น

เขียนโค้ดอินดิเคเตอร์

ตอนนี้เราจะดำเนินการเพิ่มโค้ดที่กำหนดเองให้กับ Simple Moving Average indicator ของเรา อินดิเคเตอร์ของเราจะแสดงบนแผนภูมิการเทรดเป็น overlay เหนือประเภทแผนภูมิปัจจุบัน

ก่อนอื่น เราต้องประกาศแอตทริบิวต์คลาสของอินดิเคเตอร์ตามที่ได้กล่าวไว้ก่อนหน้า เราจะเพิ่มการตั้งค่าแอตทริบิวต์ต่อไปนี้ให้กับอินดิเคเตอร์

1
[Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AutoRescale = false, AccessRights = AccessRights.None)] 

คุณสามารถตีความโค้ดด้านบนได้ดังนี้:

  • IsOverlay = true - อินดิเคเตอร์จะพล็อตบนแผนภูมิเหนือแท่งเทียน, แท่งช่วง, อิฐ Renko หรือองค์ประกอบอื่นๆ ขึ้นอยู่กับประเภทแผนภูมิที่เลือก
  • TimeZone = TimeZones.UTC - อินดิเคเตอร์จะใช้เวลาสากลเชิงพิกัดซึ่งเป็นค่าเริ่มต้นสำหรับอินดิเคเตอร์ทั้งหมด การเปลี่ยนค่าของแอตทริบิวต์นี้แนะนำเฉพาะในกรณีที่อินดิเคเตอร์ของคุณใช้คุณลักษณะวันที่และเวลาในการคำนวณ
  • AutoRescale = false - แอตทริบิวต์นี้กำหนดว่าอินดิเคเตอร์ควรปรับขนาดแผนภูมิที่แนบมาโดยอัตโนมัติหรือไม่ เนื่องจากค่าของแอตทริบิวต์นี้เท่ากับ false อินดิเคเตอร์ของเราจะไม่ปรับขนาดแผนภูมิ
  • AccessRights = AccessRights.None - อินดิเคเตอร์จะไม่ได้รับอนุญาตให้เข้าถึงอินเทอร์เน็ตหรือจัดการไฟล์บนเครื่องท้องถิ่น

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

  • แหล่งข้อมูลสำหรับสูตรของอินดิเคเตอร์
  • ช่วงเวลาที่ใช้ในสูตร
  • เส้นผลลัพธ์ของอินดิเคเตอร์ที่พล็อต

เพิ่มโค้ดต่อไปนี้ลงในอินดิเคเตอร์

1
2
3
4
5
6
7
8
[Parameter("Source")]
public DataSeries Source { get; set; }

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

[Output("Main", LineColor = "Turquoise")]
public IndicatorDataSeries Result { get; set; }

เราจะตั้งค่า 14 เป็นค่าเริ่มต้นของพารามิเตอร์ Periods และ turquoise เป็นสีเส้นเริ่มต้น อย่างไรก็ตาม คุณสามารถตั้งค่าพารามิเตอร์เหล่านี้เป็นค่าเริ่มต้นเกือบทุกค่าที่ cTrader รองรับ

ตอนนี้เราสามารถเพิ่มโค้ดที่จะพล็อตผลลัพธ์ของอินดิเคเตอร์บนแผนภูมิโดยใช้เมธอดเหตุการณ์ Calculate()

1
2
3
4
5
6
7
8
9
public override void Calculate(int index)
{
    var sum = 0.0;

    for (var i = index - Periods + 1; i <= index; i++)
    sum += Source[i];

    Result[index] = sum / Periods;
}

โค้ดนี้กำหนดผลลัพธ์ของการคำนวณอินดิเคเตอร์ให้กับพารามิเตอร์ Result ที่เราได้กำหนดไว้ก่อนหน้า

สร้างและทดสอบอินดิเคเตอร์

ทันทีที่เราเขียนโค้ดอินดิเคเตอร์เสร็จสิ้น เราสามารถคลิกปุ่ม Build ที่อยู่บนแถบด้านบนสุดของ UI cTrader หรือคลิกขวาที่อินดิเคเตอร์ของคุณและเลือก Build ในเมนูที่ปรากฏขึ้นใหม่ หรือกด Ctrl + B

หากการ build สำเร็จ คุณจะเห็นข้อความสีเขียวในพื้นที่ Build result ที่ด้านล่างของตัวแก้ไขโค้ด

Image title

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

Image title

หลังจากสร้างอินดิเคเตอร์สำเร็จแล้ว เราสามารถดำเนินการสร้างอินสแตนซ์ได้ วิธีที่ง่ายที่สุดคือคลิกขวาที่อินดิเคเตอร์และเลือกตัวเลือก Add an instance

Image title

สิ่งนี้จะสร้าง อินสแตนซ์อินดิเคเตอร์ใหม่ สำหรับกราฟ h1 ของ EURUSD อย่างไรก็ตาม คุณสามารถเปลี่ยนประเภทกราฟ ช่วงเวลา และสัญลักษณ์ได้โดยคลิกที่อินสแตนซ์และเปิดเมนูที่เกี่ยวข้อง

แท็บ Parameter ที่ปรากฏขึ้นใหม่ควรแสดงพารามิเตอร์ที่ปรับแต่งได้สามอย่างที่เราได้เขียนโค้ดไว้ก่อนหน้านี้ คุณสามารถปล่อยไว้ตามเดิมหรือเปลี่ยนค่าของพวกเขาได้โดยตรงใน UI cTrader

กราฟการเทรดควรแสดงผลลัพธ์ของอินดิเคเตอร์แล้ว ในกรณีของเรา นี่จะเป็นเส้นสีเทอร์ควอยซ์ที่แสดงค่าเฉลี่ยเคลื่อนที่แบบง่าย

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

หมายเหตุ

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

เพิ่มอินดิเคเตอร์ลงในกราฟสด

ตอนนี้เราจะสลับไปที่แท็บ Trade ใน cTrader เพื่อแนบอินดิเคเตอร์ที่กำหนดเองของเราลงในกราฟสด เปิดกราฟสำหรับสัญลักษณ์ที่คุณต้องการวิเคราะห์

ในเมนูด้านบน คลิกไอคอน Indicators เพื่อเปิดส่วนใหม่

หลังจากนั้น เลือก Custom และในเมนูที่ปรากฏขึ้นใหม่ เลือกอินดิเคเตอร์ที่กำหนดเองที่เราได้สร้างขึ้น (Simple moving average)

คุณจะเห็นหน้าต่างใหม่ที่อนุญาตให้คุณปรับแต่งพารามิเตอร์ของอินดิเคเตอร์ หลังจากเลือกค่าที่คุณต้องการ คลิก OK เพื่อเพิ่มอินดิเคเตอร์ลงในกราฟสำหรับสัญลักษณ์ที่เลือก

เพื่อกลับไปยังหน้าต่างการตั้งค่าอินดิเคเตอร์ คลิกขวาที่ผลลัพธ์ของอินดิเคเตอร์ ในกรณีของเรา เราสามารถคลิกขวาที่เส้นสีเทอร์ควอยซ์ หรือคลิกไอคอน Properties ที่ปรากฏขึ้นเมื่อคุณเลื่อนเมาส์ไปเหนือชื่ออินดิเคเตอร์บนกราฟ

หน้าต่างการตั้งค่าอินดิเคเตอร์จะปรากฏขึ้น และคุณจะสามารถเปลี่ยนสีของเส้นที่พล็อตได้ รวมถึงความหนาของเส้น

Image title