Langkau tajuk talian

Simbol tersuai

API simbol tersuai membolehkan anda mencipta dan mengurus simbol anda sendiri dalam cTrader. Simbol ini boleh mewakili aset sintetik, set data luaran, metrik terbitan atau instrumen luar talian sepenuhnya. Setiap simbol tersuai boleh ditakrifkan menggunakan satu atau dua aset dan menyokong integrasi penuh dengan tempoh masa, pemplotan carta, penunjuk, ujian belakang dan kemas kini masa nyata.

Jenis dan kaedah utama untuk simbol tersuai termasuk:

  • CustomSymbols.Add(name, baseSymbol) atau CustomSymbols.Add(name, baseAsset, quoteAsset) untuk mencipta simbol tersuai baharu.
  • CustomSymbol.BarsNeeded untuk membekalkan data OHLC untuk simbol mengikut permintaan.
  • CustomSymbol.UpdateQuote(bid, ask) untuk memberi harga langsung kepada simbol.
  • CustomBars.AppendBars(), UpdateLastBar() dan PrependBars() untuk mengurus data bar secara dinamik. Setiap CustomBar menyimpan Time, Open, High, Low, Close dan Volume.

Selain itu, pembangun boleh menentukan kadar swap, komisen, peringkat leveraj, sentimen, tetapan niaga hadapan dan bahkan waktu pasaran atau cuti untuk simbol tersuai. Sebaik sahaja dicipta, simbol tersuai boleh berinteraksi sepenuhnya dan boleh dilihat dalam carta atau digunakan secara programatik dalam cBot, penunjuk dan plugin.

Petua

Gunakan simbol tersuai untuk menggambarkan data luaran, mensimulasikan spread atau korelasi, menguji strategi pada set data proprietari atau menggabungkan pelbagai aset menjadi instrumen sintetik.

Objek API simbol tersuai boleh digunakan untuk melakukan perkara berikut:

Ciri atau operasi Contoh
Mensimulasikan aset sintetik Bina simbol spread (contohnya UKOIL - USOIL)
Cipta bakul ekuiti atau mata wang
Menggambarkan set data luar talian Muat data CSV untuk pasaran
Plot kadar faedah atau indeks ekonomi sejarah
Pemplotan carta langsung dari API Suapkan harga masa nyata luaran
Alirkan nilai saksama atau metrik risiko yang dikira
Pengujian strategi pada data tersuai Ujian belakang pada set data asas atau alternatif
Simulasikan persekitaran pasaran lama
Menjana sebut harga sintetik Terbitkan harga tersuai daripada simbol sedia ada
Suntik sebut harga ke dalam instrumen tersuai
Pemodelan kekangan dagangan Gunakan sesi tersuai, cuti, tamat tempoh niaga hadapan, struktur swap atau peringkat leveraj
Penggambaran metrik strategi Plot keluk ekuiti, penurunan atau isyarat sebagai siri harga untuk analisis dalam strategi

Operasi asas

Cipta simbol tersuai baharu dengan simbol asas

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

Cipta simbol tersuai dengan aset (tiada simbol asas)

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

Tentukan sifat instrumen statik

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;

Tetapkan suapan sebut harga (langsung atau simulasi)

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

Kendalikan permintaan bar untuk data sintetik

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

Tambah bar masa nyata pada tik

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

Tambah sesi dagangan tersuai

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

Tentukan tetapan niaga hadapan

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

Tambah peringkat leveraj dinamik

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

Cipta dan tambah tempoh tersuai

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

Import data dari 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);

Alih keluar simbol tersuai

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

Contoh integrasi praktikal

Jejak data asas dari masa ke masa

Paparkan petunjuk makroekonomi seperti CPI, kadar pengangguran atau KDNK sebagai bar OHLC sintetik. Pendekatan ini membolehkan penindihan strategi, analisis perbezaan, dan penjejakan corak sejarah menggunakan data ekonomi berstruktur.

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

Cipta bakul aset berwajaran

Gabungkan pelbagai ekuiti ke dalam simbol tersuai yang mencerminkan portfolio berwajaran. Persediaan ini membolehkan anda menjejak prestasi, menggunakan petunjuk dan menguji strategi pada indeks ekuiti sintetik yang dibina daripada komponen terpilih.

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

Jejak perbezaan harga komoditi

Pertimbangkan untuk mencipta simbol tersuai yang mewakili perbezaan harga antara emas dan perak (XAUUSD - XAGUSD). Simbol tersuai ini boleh membantu dengan strategi dagangan spread, pengesanan perbezaan dan analisis antara pasaran pada logam berharga.

Dengan menganalisis perbezaan dalam pergerakan harga antara emas dan perak, pedagang boleh mengenal pasti kekuatan relatif, peluang arbitraj yang berpotensi atau melindung nilai satu posisi terhadap yang lain.

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

Strim simbol spread FX langsung

Cipta instrumen sintetik masa nyata dengan menolak harga dua pasangan forex.
Simbol tersuai ini membolehkan pembuatan carta dan dagangan spread secara langsung, menyokong strategi pembalikan min, penjejakan visual dan perlindungan nilai berasaskan spread.

 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
}