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

สัญลักษณ์ที่กำหนดเอง

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

ประเภทและวิธีการหลักสำหรับสัญลักษณ์ที่กำหนดเองรวมถึง:

  • CustomSymbols.Add(name, baseSymbol) หรือ CustomSymbols.Add(name, baseAsset, quoteAsset) เพื่อสร้างสัญลักษณ์ที่กำหนดเองใหม่
  • CustomSymbol.BarsNeeded เพื่อจัดหาข้อมูล OHLC สำหรับสัญลักษณ์ตามความต้องการ
  • CustomSymbol.UpdateQuote(bid, ask) เพื่อป้อนราคาสดให้กับสัญลักษณ์
  • CustomBars.AppendBars(), UpdateLastBar() และ PrependBars() เพื่อจัดการข้อมูลแท่งเทียนแบบไดนามิก CustomBar แต่ละอันเก็บ Time, Open, High, Low, Close และ Volume

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

เคล็ดลับ

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

วัตถุ API ของสัญลักษณ์ที่กำหนดเองสามารถใช้เพื่อทำสิ่งต่อไปนี้:

ฟีเจอร์หรือการดำเนินการ ตัวอย่าง
จำลองสินทรัพย์สังเคราะห์ สร้างสัญลักษณ์สเปรด (เช่น UKOIL - USOIL)
สร้างตะกร้าหุ้นหรือสกุลเงิน
แสดงชุดข้อมูลออฟไลน์ โหลดข้อมูล CSV สำหรับตลาด
พล็อตอัตราดอกเบี้ยในอดีตหรือดัชนีทางเศรษฐกิจ
สร้างแผนภูมิสดจาก API ป้อนราคาเรียลไทม์จากภายนอก
สตรีมมูลค่ายุติธรรมที่คำนวณหรือเมตริกความเสี่ยง
ทดสอบกลยุทธ์บนข้อมูลที่กำหนดเอง Backtest บนชุดข้อมูลพื้นฐานหรือข้อมูลทางเลือก
จำลองสภาพแวดล้อมตลาดในอดีต
การสร้างราคาเสนอซื้อขายสังเคราะห์ สร้างราคาที่กำหนดเองจากสัญลักษณ์ที่มีอยู่
ใส่ราคาเสนอซื้อขายลงในเครื่องมือที่กำหนดเอง
การจำลองข้อจำกัดในการเทรด ใช้เซสชันที่กำหนดเอง วันหยุด การหมดอายุของฟิวเจอร์ส โครงสร้างสว็อป หรือระดับเลเวอเรจ
การแสดงผลเมตริกของกลยุทธ์ พล็อตเส้นอิควิตี้ การถดถอย หรือสัญญาณเป็นชุดราคาสำหรับการวิเคราะห์ในกลยุทธ์

การดำเนินการพื้นฐาน

สร้างสัญลักษณ์ที่กำหนดเองใหม่ด้วยสัญลักษณ์พื้นฐาน

1
2
3
4
5
var baseSymbol = Symbols.GetSymbol("EURUSD");

var customSymbol = CustomSymbols.Add("MyCustomSymbol1", baseSymbol);
customSymbol.Description = "Synthetic EURUSD Tracker";
customSymbol.UpdateQuote(baseSymbol.Bid, baseSymbol.Ask);

สร้างสัญลักษณ์ที่กำหนดเองด้วยสินทรัพย์ (ไม่มีสัญลักษณ์พื้นฐาน)

1
2
3
4
5
var baseAsset = Assets.GetAsset("XAU");
var quoteAsset = Assets.GetAsset("USD");

var customSymbol = CustomSymbols.Add("GoldIndex", baseAsset, quoteAsset);
customSymbol.UpdateQuote(1923.5, 1923.8);

กำหนดคุณสมบัติเครื่องมือแบบคงที่

1
2
3
4
5
6
customSymbol.LotSize = 100000;
customSymbol.PipDigits = 2;
customSymbol.TickDigits = 3;
customSymbol.Commission = 3.5;
customSymbol.SwapLong = -0.2;
customSymbol.SwapShort = 0.1;

กำหนดฟีดราคาเสนอซื้อขาย (แบบสดหรือจำลอง)

1
2
var tracking = Symbols.GetSymbol("GBPUSD");
tracking.Tick += e => customSymbol.UpdateQuote(e.Symbol.Bid, e.Symbol.Ask);

จัดการคำขอแท่งเทียนสำหรับข้อมูลสังเคราะห์

1
2
3
4
5
6
customSymbol.BarsNeeded = args =>
{
    var baseBars = MarketData.GetBars(args.CustomBars.TimeFrame, "EURUSD");
    var newBars = baseBars.Select(b => new CustomBar(b.OpenTime, b.Open, b.High, b.Low, b.Close, b.TickVolume));
    args.CustomBars.AppendBars(newBars);
};

เพิ่มแท่งเทียนแบบเรียลไทม์ตามการเคลื่อนไหวของราคา

1
2
3
4
5
tracking.Tick += _ =>
{
    var last = MarketData.GetBars(TimeFrame.Minute, tracking.Name).LastBar;
    customSymbol.CustomBars.UpdateLastBar(last.Open, last.High, last.Low, last.Close, last.TickVolume);
};

เพิ่มเซสชันการเทรดที่กำหนดเอง

1
2
3
4
customSymbol.MarketHours.Sessions.Add(new CustomSymbolTradingSession(
    DayOfWeek.Monday, DayOfWeek.Friday,
    new TimeSpan(8, 0, 0), new TimeSpan(16, 30, 0)
));

กำหนดการตั้งค่าฟิวเจอร์ส

1
2
3
4
5
customSymbol.FuturesSettings = new CustomSymbolFuturesSettings(
    DateTime.UtcNow.AddDays(20),
    DateTime.UtcNow.AddDays(30),
    0.15 // maintenance margin
);

เพิ่มระดับเลเวอเรจแบบไดนามิก

1
2
customSymbol.DynamicLeverage.Add(new CustomSymbolLeverageTier(100000, 100));
customSymbol.DynamicLeverage.Add(new CustomSymbolLeverageTier(500000, 50));

สร้างและเพิ่ม กรอบเวลาที่กำหนดเอง

1
2
3
4
5
6
7
var customTF = TimeFrameManager.Custom.Add("MyCustomH1");

customTF.BarsNeeded = args =>
{
    var hourly = MarketData.GetBars(TimeFrame.Hour, args.CustomBars.Symbol.Name);
    args.CustomBars.AppendBars(hourly.Select(b => new CustomBar(b.OpenTime, b.Open, b.High, b.Low, b.Close, b.TickVolume)));
};

นำเข้าข้อมูลจาก CSV

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
var lines = File.ReadAllLines("data.csv");

var bars = lines.Skip(1).Select(line =>
{
    var parts = line.Split(',');
    return new CustomBar(DateTime.Parse(parts[0]), 
                         double.Parse(parts[1]), double.Parse(parts[2]), 
                         double.Parse(parts[3]), double.Parse(parts[4]), 
                         int.Parse(parts[5]));
});

customSymbol.BarsNeeded = args => args.CustomBars.AppendBars(bars);

ลบสัญลักษณ์ที่กำหนดเอง

1
2
var cs = CustomSymbols.Get("MyCustomSymbol1");
CustomSymbols.Remove(cs);

ตัวอย่างการบูรณาการในทางปฏิบัติ

ติดตามข้อมูลพื้นฐานตลอดเวลา

แสดงตัวชี้วัดทางเศรษฐกิจมหภาค เช่น CPI อัตราการว่างงาน หรือ GDP เป็นแท่งเทียน OHLC สังเคราะห์ วิธีนี้ช่วยให้สามารถซ้อนทับกลยุทธ์ วิเคราะห์การแยกตัว และติดตามรูปแบบในอดีตโดยใช้ข้อมูลเศรษฐกิจที่มีโครงสร้าง

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
var macroSymbol = CustomSymbols.Add("US_MacroIndex", Assets.GetAsset("USD"), Assets.GetAsset("USD"));
macroSymbol.BarsNeeded = args =>
{
    var csvData = LoadCustomCsv("us_macro.csv"); // contains OpenTime, Open, High, Low, Close, Volume
    args.CustomBars.AppendBars(csvData.Select(row => new CustomBar(
        DateTime.Parse(row[0]),
        double.Parse(row[1]),
        double.Parse(row[2]),
        double.Parse(row[3]),
        double.Parse(row[4]),
        int.Parse(row[5])
    )));
};

สร้างตะกร้าสินทรัพย์ถ่วงน้ำหนัก

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
var customIndex = CustomSymbols.Add("MyAssetBasket", Assets.GetAsset("USD"), Assets.GetAsset("USD"));
customIndex.BarsNeeded = args =>
{
    var eurusdBars = MarketData.GetBars(TimeFrame.Daily, "EURUSD");
    var gbpusdBars = MarketData.GetBars(TimeFrame.Daily, "GBPUSD");
    var usdjpyBars = MarketData.GetBars(TimeFrame.Daily, "USDJPY");

    var indexBars = Enumerable.Range(0, Math.Min(eurusdBars.Count, Math.Min(gbpusdBars.Count, usdjpyBars.Count)))
        .Select(i =>
        {
            var time = eurusdBars[i].OpenTime;
            var weightedClose = eurusdBars[i].Close * 0.4 + gbpusdBars[i].Close * 0.35 + usdjpyBars[i].Close * 0.25;

            return new CustomBar(time, weightedClose, weightedClose, weightedClose, weightedClose, 0);
        });

    args.CustomBars.AppendBars(indexBars);
};

ติดตามส่วนต่างราคาสินค้าโภคภัณฑ์

พิจารณาสร้างสัญลักษณ์ที่กำหนดเองที่แสดงส่วนต่างราคาระหว่างทองคำและเงิน (XAUUSD - XAGUSD) สัญลักษณ์ที่กำหนดเองนี้อาจช่วยในกลยุทธ์การเทรดส่วนต่าง การตรวจจับการแยกตัว และการวิเคราะห์ระหว่างตลาดของโลหะมีค่า

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
var spreadSymbol = CustomSymbols.Add("Gold_Silver_Spread", Assets.GetAsset("USD"), Assets.GetAsset("USD"));
spreadSymbol.BarsNeeded = args =>
{
    var gold = MarketData.GetBars(TimeFrame.Hour, "XAUUSD");
    var silver = MarketData.GetBars(TimeFrame.Hour, "XAGUSD");

    var spread = gold.Zip(silver, (g, s) => new CustomBar(
        g.OpenTime,
        g.Close - s.Close,
        g.Close - s.Close,
        g.Close - s.Close,
        g.Close - s.Close,
        g.TickVolume + s.TickVolume
    ));

    args.CustomBars.AppendBars(spread);
};

สตรีมสัญลักษณ์ส่วนต่าง FX แบบสด

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
private CustomSymbol _eurGbpSpread;
private Symbol _eurusd, _gbpusd;

protected override void OnStart()
{
    _eurusd = Symbols.GetSymbol("EURUSD");
    _gbpusd = Symbols.GetSymbol("GBPUSD");

    _eurGbpSpread = CustomSymbols.Add("EUR‑GBP Spread",
                                      _eurusd.QuoteAsset,  // both legs already trade in USD
                                      _eurusd.QuoteAsset);

    // propagate tick updates
    _eurusd.Tick  += OnLegTick;
    _gbpusd.Tick  += OnLegTick;
}

private void OnLegTick(SymbolTickEventArgs _)
{
    var mid = _eurusd.Bid - _gbpusd.Bid;        // naïve spread
    _eurGbpSpread.UpdateQuote(mid, mid + 0.00001); // 0.1 pip synthetic spread
}