Bỏ qua

Ký hiệu tùy chỉnh

API ký hiệu tùy chỉnh cho phép bạn tạo và quản lý các ký hiệu của riêng mình trong cTrader. Các ký hiệu này có thể đại diện cho tài sản tổng hợp, bộ dữ liệu bên ngoài, số liệu phái sinh hoặc công cụ hoàn toàn ngoại tuyến. Mỗi ký hiệu tùy chỉnh có thể được xác định bằng cách sử dụng một hoặc hai tài sản và hỗ trợ tích hợp đầy đủ với khung thời gian, biểu đồ, chỉ báo, backtest và cập nhật thời gian thực.

Các loại và phương thức chính cho ký hiệu tùy chỉnh bao gồm:

  • CustomSymbols.Add(name, baseSymbol) hoặc CustomSymbols.Add(name, baseAsset, quoteAsset) để tạo một ký hiệu tùy chỉnh mới.
  • CustomSymbol.BarsNeeded để cung cấp dữ liệu OHLC cho ký hiệu theo yêu cầu.
  • CustomSymbol.UpdateQuote(bid, ask) để cung cấp giá trực tiếp cho ký hiệu.
  • CustomBars.AppendBars(), UpdateLastBar()PrependBars() để quản lý dữ liệu nến động. Mỗi CustomBar lưu trữ Time, Open, High, Low, CloseVolume.

Ngoài ra, các nhà phát triển có thể xác định tỷ giá hoán đổi, hoa hồng, cấp đòn bẩy, tâm lý, cài đặt hợp đồng tương lai và thậm chí cả giờ thị trường hoặc ngày nghỉ cho các ký hiệu tùy chỉnh. Sau khi được tạo, các ký hiệu tùy chỉnh có thể tương tác đầy đủ và có thể được xem trong biểu đồ hoặc được sử dụng theo chương trình trong cBot, chỉ báo và plugin.

Mẹo

Sử dụng ký hiệu tùy chỉnh để trực quan hóa dữ liệu bên ngoài, mô phỏng chênh lệch hoặc tương quan, kiểm tra chiến lược trên bộ dữ liệu độc quyền hoặc kết hợp nhiều tài sản thành công cụ tổng hợp.

Các đối tượng API ký hiệu tùy chỉnh có thể được sử dụng để thực hiện những điều sau:

Tính năng hoặc hoạt động Ví dụ
Mô phỏng tài sản tổng hợp Xây dựng ký hiệu chênh lệch (ví dụ: UKOIL - USOIL)
Tạo rổ cổ phiếu hoặc tiền tệ
Trực quan hóa bộ dữ liệu ngoại tuyến Tải dữ liệu CSV cho thị trường
Vẽ biểu đồ lãi suất lịch sử hoặc chỉ số kinh tế
Biểu đồ trực tiếp từ API Cung cấp giá thời gian thực từ bên ngoài
Truyền giá trị hợp lý được tính toán hoặc số liệu rủi ro
Kiểm tra chiến lược trên dữ liệu tùy chỉnh Backtest trên bộ dữ liệu cơ bản hoặc thay thế
Mô phỏng môi trường thị trường cũ
Tạo báo giá tổng hợp Lấy giá tùy chỉnh từ các ký hiệu hiện có
Đưa báo giá vào các công cụ tùy chỉnh
Mô hình hóa các ràng buộc giao dịch Áp dụng phiên tùy chỉnh, ngày nghỉ, hết hạn hợp đồng tương lai, cấu trúc hoán đổi hoặc cấp đòn bẩy
Trực quan hóa số liệu chiến lược Vẽ biểu đồ đường vốn tức thời, rút vốn hoặc tín hiệu dưới dạng chuỗi giá để phân tích trong chiến lược

Các thao tác cơ bản

Tạo một ký hiệu tùy chỉnh mới với ký hiệu cơ sở

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);

Tạo một ký hiệu tùy chỉnh với tài sản (không có ký hiệu cơ sở)

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);

Xác định các thuộc tính công cụ tĩnh

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;

Gán nguồn cấp báo giá (trực tiếp hoặc mô phỏng)

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

Xử lý yêu cầu nến cho dữ liệu tổng hợp

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);
};

Thêm nến thời gian thực khi có tick

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);
};

Thêm phiên giao dịch tùy chỉnh

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

Xác định cài đặt hợp đồng tương lai

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

Thêm cấp đòn bẩy động

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

Tạo và thêm khoảng thời gian tùy chỉnh

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)));
};

Nhập dữ liệu từ 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);

Xóa một ký hiệu tùy chỉnh

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

Ví dụ tích hợp thực tế

Theo dõi dữ liệu cơ bản theo thời gian

Hiển thị các chỉ số kinh tế vĩ mô như CPI, tỷ lệ thất nghiệp hoặc GDP dưới dạng các thanh OHLC tổng hợp. Cách tiếp cận này cho phép xếp chồng chiến lược, phân tích phân kỳ và theo dõi mẫu lịch sử bằng cách sử dụng dữ liệu kinh tế có cấu trúc.

 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])
    )));
};

Tạo rổ tài sản có trọng số

Kết hợp nhiều cổ phiếu thành một biểu tượng tùy chỉnh phản ánh danh mục đầu tư có trọng số. Thiết lập này cho phép bạn theo dõi hiệu suất, áp dụng các chỉ báo và backtest chiến lược trên chỉ số cổ phiếu tổng hợp được xây dựng từ các thành phần đã chọn.

 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);
};

Theo dõi chênh lệch giá hàng hóa

Hãy cân nhắc việc tạo một biểu tượng tùy chỉnh đại diện cho chênh lệch giá giữa vàng và bạc (XAUUSD - XAGUSD). Biểu tượng tùy chỉnh này có thể hỗ trợ các chiến lược giao dịch chênh lệch, phát hiện phân kỳ và phân tích liên thị trường đối với kim loại quý.

Bằng cách phân tích sự khác biệt trong biến động giá giữa vàng và bạc, các nhà giao dịch có thể xác định sức mạnh tương đối, cơ hội kinh doanh chênh lệch tiềm năng hoặc phòng ngừa rủi ro một vị thế so với vị thế khác.

 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);
};

Truyền trực tiếp biểu tượng chênh lệch FX

Tạo một công cụ tổng hợp thời gian thực bằng cách trừ giá của hai cặp tiền tệ.
Biểu tượng tùy chỉnh này cho phép lập biểu đồ và giao dịch chênh lệch trực tiếp, hỗ trợ các chiến lược hồi quy trung bình, theo dõi trực quan và phòng ngừa rủi ro dựa trên chênh lệch.

 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
}