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

ประเภทพารามิเตอร์ใน cTrader algo

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

พารามิเตอร์ที่ปรับแต่งได้

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

การใช้พารามิเตอร์ใน cBots, อินดิเคเตอร์และปลั๊กอิน

  • สำหรับ cBots คุณสามารถกำหนดค่าตัวแปรหรือการตั้งค่าที่ส่งผลต่อการดำเนินการ เช่น ระดับ Stop Loss และ Take Profit
  • สำหรับอินดิเคเตอร์ คุณสามารถกำหนดค่าตัวแปรที่ส่งผลต่อผลลัพธ์ของอินดิเคเตอร์ เช่น ช่วงเวลาที่พิจารณาหรือแหล่งข้อมูลที่จะใช้
  • สำหรับปลั๊กอิน คุณสามารถกำหนดค่าตัวแปร เช่น ตัวเลือก UI หรือคีย์ API ที่กำหนดว่าปลั๊กอินจะโต้ตอบกับอินเทอร์เฟซหรือบริการภายนอกอย่างไร

ตามที่ อธิบาย ไว้ก่อนหน้านี้ cTrader รองรับประเภทพารามิเตอร์เหล่านี้:

  • int
  • double
  • string
  • bool
  • DataSeries
  • TimeFrame
  • enum
  • Color
  • DateTime
  • DateOnly
  • TimeSpan
  • Symbol
  • Symbol[] (multi-symbol)
  • Enum[] (multi-enum)
  • TimeFrame[] (multi-period)

หมายเหตุ

อัลกอริทึม Python ใช้พารามิเตอร์ที่ปรับแต่งได้ที่ประกาศในไฟล์ .cs ของพวกเขา

สร้างอินดิเคเตอร์อย่างง่ายด้วยพารามิเตอร์

เพื่อสาธิตวิธีการใช้พารามิเตอร์ในอินดิเคเตอร์ที่กำหนดเอง เราจะสร้างอินดิเคเตอร์ใหม่และตั้งชื่อว่า Standard Deviation

ในการคำนวณส่วนเบี่ยงเบนมาตรฐาน เราจำเป็นต้องคำนวณค่าเฉลี่ยเคลื่อนที่ของราคาก่อน หลังจากนั้น เราจะประกาศพารามิเตอร์ที่จำเป็นสำหรับอินดิเคเตอร์ค่าเฉลี่ยเคลื่อนที่ โดยเริ่มจากช่วงเวลาของค่าเฉลี่ยเคลื่อนที่

1
public int MaPeriod { get; set; }

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

1
2
[Parameter("MA Period")]
public int MaPeriod { get; set; }

แอตทริบิวต์ Parameter สั่งให้ cTrader แสดงคุณสมบัตินี้เป็นพารามิเตอร์ในแผงพารามิเตอร์ของอินดิเคเตอร์โดยใช้ชื่อที่กำหนด ("MA Period")

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

1
2
[Parameter("SMA Period", DefaultValue = 14, Group = "MA", MaxValue = 100, MinValue = 1, Step = 1)]
public int MaPeriod { get; set; }

ตอนนี้เราจะเพิ่มพารามิเตอร์ที่เหลือที่จำเป็นสำหรับอินดิเคเตอร์ค่าเฉลี่ยเคลื่อนที่ พารามิเตอร์ MaType จะช่วยให้เรากำหนดประเภทของค่าเฉลี่ยเคลื่อนที่ มันเป็น enum ที่จะปรากฏเป็นเมนูแบบเลื่อนลงในอินเทอร์เฟซผู้ใช้ของ cTrader

1
2
[Parameter("MA Type", Group = "MA")]
public MovingAverageType MaType { get; set; }

พารามิเตอร์ Source จะให้ตัวเลือกแก่ผู้ใช้ในการระบุแหล่งข้อมูลสำหรับอินดิเคเตอร์ค่าเฉลี่ยเคลื่อนที่ของเรา พารามิเตอร์นี้เป็นประเภท DataSeries

1
2
[Parameter("Source", Group = "MA")]
public DataSeries Source { get; set; }

ตอนนี้พารามิเตอร์ที่จำเป็นได้ถูกประกาศแล้ว เราจะกำหนดและเริ่มต้นค่าเฉลี่ยเคลื่อนที่ของเรา

1
2
3
4
5
6
private MovingAverage movingAverage;

protected override void Initialize()
{
    movingAverage = Indicators.MovingAverage(Source, MaPeriod, MaType);
}

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

1
2
[Output("Result", LineColor = "Orange")]
public IndicatorDataSeries Result { get; set; }

สุดท้ายแต่ไม่ท้ายสุด เราจะดำเนินการคำนวณส่วนเบี่ยงเบนมาตรฐานในเมธอด Calculate()

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
public override void Calculate(int index)
{
    var average = movingAverage.Result[index];

    double sum = 0;

    for (var period = 0; period < MaPeriod; period++)
    {
        sum += Math.Pow(Source[index - period] - average, 2.0);
    }

    Result[index] = Math.Sqrt(sum / MaPeriod);
}

หากเราเพิ่มอินดิเคเตอร์ของเราลงในกราฟ เราควรเห็นพารามิเตอร์ทั้งหมดของเราในหน้าต่าง เพิ่มอินสแตนซ์

เพิ่มพารามิเตอร์เพิ่มเติม

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

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

1
2
[Parameter("Show Line", DefaultValue = true, Group = "Line")]
public bool ShowLine { get; set; }

พารามิเตอร์ LineLevel จะช่วยให้เรากำหนดระดับราคาที่ควรวาดเส้น

1
2
[Parameter("Line Level", DefaultValue = 0.001, Step = 0.001, Group = "Line")]
public double LineLevel { get; set; }

เราจะเพิ่มพารามิเตอร์ที่อนุญาตให้เลือกสีของเส้นด้วย

1
2
[Parameter("Line Color", DefaultValue = "Blue", Group = "Line")]
public Color LineColor { get; set; }

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

1
2
3
4
if (ShowLine)
{
    Chart.IndicatorAreas[0].DrawHorizontalLine("Line", LineLevel, LineColor);
}

หากเราสร้างอินดิเคเตอร์อีกครั้งและเพิ่มอินสแตนซ์ใหม่ เราจะสามารถซ่อน/แสดงเส้น เลื่อนขึ้นหรือลง และเลือกสีที่เราต้องการเป็นสีของเส้นได้

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

1
2
[Parameter("Timeframe")]
public TimeFrame TF { get; set; }

ในเมธอด Initialize() เราจะตรวจสอบกรอบเวลาของกราฟที่อินดิเคเตอร์ของเราถูกแนบ หากไม่เท่ากับค่าของพารามิเตอร์ TF เราจะป้องกันไม่ให้แสดงอินดิเคเตอร์

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
protected override void Initialize()
{
    if (TimeFrame != TF)
        return;

    movingAverage = Indicators.MovingAverage(Source, MaPeriod, MaType);

    if (ShowLine)
    {
        Chart.IndicatorAreas[0].DrawHorizontalLine("Line", LineLevel, LineColor);
    }
}

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