Ana içeriğe geç

Özel semboller

Özel sembol API'si, cTrader'da kendi sembollerinizi oluşturmanıza ve yönetmenize olanak tanır. Bu semboller, sentetik varlıkları, harici veri kümelerini, türetilmiş metrikleri veya tamamen çevrimdışı enstrümanları temsil edebilir. Her özel sembol, bir veya iki varlık kullanılarak tanımlanabilir ve zaman aralıkları, grafikler, göstergeler, geriye dönük test ve gerçek zamanlı güncellemelerle tam entegrasyonu destekler.

Özel semboller için temel türler ve yöntemler şunları içerir:

  • CustomSymbols.Add(name, baseSymbol) veya CustomSymbols.Add(name, baseAsset, quoteAsset) yeni bir özel sembol oluşturmak için.
  • CustomSymbol.BarsNeeded sembol için talep üzerine OHLC verileri sağlamak için.
  • CustomSymbol.UpdateQuote(bid, ask) sembole canlı fiyatlar beslemek için.
  • CustomBars.AppendBars(), UpdateLastBar() ve PrependBars() çubuk verilerini dinamik olarak yönetmek için. Her CustomBar, Time, Open, High, Low, Close ve Volume değerlerini saklar.

Ek olarak, geliştiriciler özel semboller için takas oranları, komisyonlar, kaldıraç kademeleri, duyarlılık, vadeli işlem ayarları ve hatta piyasa saatleri veya tatilleri tanımlayabilirler. Oluşturulduktan sonra, özel semboller tamamen etkileşimlidir ve grafiklerde görüntülenebilir veya cBot'larda, göstergelerde ve eklentilerde programatik olarak kullanılabilir.

İpucu

Harici verileri görselleştirmek, spreadleri veya korelasyonları simüle etmek, tescilli veri kümeleri üzerinde stratejileri test etmek veya birden fazla varlığı sentetik enstrümanlarda birleştirmek için özel semboller kullanın.

Özel sembol API nesneleri aşağıdakileri yapmak için kullanılabilir:

Özellik veya işlem Örnekler
Sentetik varlıkları simüle etme Bir spread sembolü oluşturun (örn. UKOIL - USOIL)
Net varlık veya para birimi sepetleri oluşturun
Çevrimdışı veri kümelerini görselleştirme Piyasalar için CSV verilerini yükle
Tarihsel faiz oranlarını veya ekonomik endeksleri çiz
API'lerden canlı grafik oluşturma Harici gerçek zamanlı fiyatları besle
Hesaplanan gerçeğe uygun değeri veya risk metriklerini akışla sağla
Özel veriler üzerinde strateji testi Temel veya alternatif veri kümeleri üzerinde geriye dönük test yap
Eski piyasa ortamlarını simüle et
Sentetik kotasyonlar oluşturma Mevcut sembollerden özel fiyatlar türet
Özel enstrümanlara kotasyonlar enjekte et
İşlem kısıtlamaları modellemesi Özel seanslar, tatiller, vadeli işlem vadesi, takas yapısı veya kaldıraç kademeleri uygula
Strateji metrikleri görselleştirme Strateji içi analiz için net varlık eğrisini, düşüşü veya sinyalleri fiyat serisi olarak çiz

Temel işlemler

Temel sembolle yeni bir özel sembol oluştur

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

Varlıklarla özel bir sembol oluştur (temel sembol yok)

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

Statik enstrüman özelliklerini tanımla

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;

Bir kotasyon akışı ata (canlı veya simüle edilmiş)

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

Sentetik veriler için çubuk isteğini ele al

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

Tick'te gerçek zamanlı çubuk ekle

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

Özel işlem seansı ekle

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

Vadeli işlem ayarlarını tanımla

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

Dinamik kaldıraç kademeleri ekle

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

Özel dönem oluştur ve ekle

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'den veri içe aktar

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

Özel bir sembolü kaldır

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

Pratik entegrasyon örnekleri

Zaman içinde temel verileri takip et

TÜFE, işsizlik oranı veya GSYİH gibi makroekonomik göstergeleri sentetik OHLC çubukları olarak görüntüle. Bu yaklaşım, yapılandırılmış ekonomik verileri kullanarak strateji bindirmesi, sapma analizi ve tarihsel desen takibini sağlar.

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

Ağırlıklı bir varlık sepeti oluştur

Birden fazla net varlığı, ağırlıklı bir portföyü yansıtan özel bir sembolde birleştirin. Bu kurulum, seçilen bileşenlerden oluşturulmuş sentetik bir net varlık endeksi üzerinde performansı izlemenize, göstergeler uygulamanıza ve stratejileri geriye dönük test etmenize olanak tanır.

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

Emtia fiyat farklarını takip edin

Altın ve gümüş arasındaki fiyat farkını (XAUUSD - XAGUSD) temsil eden özel bir sembol oluşturmayı düşünün. Bu özel sembol, spread bahsi stratejileri, ayrışma tespiti ve değerli metaller üzerinde piyasalar arası analiz için yardımcı olabilir.

Altın ve gümüş arasındaki fiyat hareketlerindeki farkı analiz ederek trader'lar göreceli gücü, potansiyel arbitraj fırsatlarını veya bir pozisyonu diğerine karşı hedging yapmayı belirleyebilirler.

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

Canlı bir FX spread sembolü yayınlayın

İki forex çiftinin fiyatlarını çıkararak gerçek zamanlı sentetik bir enstrüman oluşturun.
Bu özel sembol, spread'in doğrudan grafiklenmesini ve işlem görmesini sağlayarak ortalamaya dönüş stratejilerini, görsel takibi ve spread tabanlı hedging'i destekler.

 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
}