Ana içeriğe geç

cTrader algo'da parametre türleri

Bu makalede ve ilgili videosunda, cBot'larınızda ve göstergelerinizde özelleştirilebilir parametreleri nasıl bildirebileceğinizi ve kullanabileceğinizi göstereceğiz. Basit bir gösterge geliştirecek ve parametreleri cTrader kullanıcı arayüzünden nasıl yapılandıracağınızı göstereceğiz. Ayrıca bir cTrader cBot'unda veya göstergesinde ne tür parametreler kullanabileceğinizi açıklayacak ve kodunuzda nasıl bildirildiklerini ve kullanıldıklarını göstereceğiz.

Özelleştirilebilir parametreler

Özelleştirilebilir parametreler, bir algoritma eklerken, başlatırken veya kullanırken ayarlanabilen yapılandırılabilir değerlerdir. Kaynak kodunu değiştirmeden cBot'ların, göstergelerin ve eklentilerin davranışını özelleştirmenize olanak tanır.

cBot'larda, göstergelerde ve eklentilerde parametreleri kullanma

  • cBot'lar için zarar durdur ve kâr al seviyeleri gibi yürütmeyi etkileyen değişkenleri veya ayarları yapılandırabilirsiniz.
  • Göstergeler için dikkate alınan dönemler veya kullanılacak veri kaynağı gibi gösterge çıktılarını etkileyen değişkenleri yapılandırabilirsiniz.
  • Eklentiler için eklentinin arayüz veya harici hizmetlerle nasıl etkileşim kurduğunu belirleyen kullanıcı arayüzü seçenekleri veya API anahtarları gibi değişkenleri yapılandırabilirsiniz.

Daha önce açıklandığı gibi cTrader bu parametre türlerini destekler:

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

Not

Python algoritmaları, .cs dosyalarında bildirilen özelleştirilebilir parametreleri kullanır.

Parametreli basit bir gösterge oluşturma

Özel göstergelerde parametreleri nasıl kullanabileceğinizi göstermek için yeni bir gösterge oluşturacak ve adını Standard Deviation koyacağız.

Standard sapmayı hesaplamak için önce fiyatın hareketli ortalamasını hesaplamamız gerekir. Daha sonra hareketli ortalama dönemiyle başlayarak bir hareketli ortalama göstergesi için gerekli olan parametreleri bildireceğiz.

1
public int MaPeriod { get; set; }

Desteklenen türlerden birine sahip herhangi bir genel özellik, bir gösterge parametresi olabilir. MaPeriod özelliğimizi bir parametreye dönüştürmek için yapmamız gereken tek şey gerekli bildirimi eklemektir.

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

Parameter özniteliği, cTrader'a bu özelliği tanımlanan adı ("MA Period") kullanarak gösterge parametreleri panelinde bir parametre olarak sunması talimatını verir.

Aşağıda gösterildiği gibi Parameter özniteliği, parametrenin görüntülenen ad, varsayılan değer, bu parametrenin yerleştirileceği grup, maksimum ve minimum değerler ve yukarı ve aşağı oklar basıldığında parametrenin değişeceği adım (yalnızca sayısal değerler için) gibi bazı özelliklerini tanımlamanıza da olanak tanır.

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

Şimdi bir hareketli ortalama göstergesi için gerekli olan parametrelerin geri kalanını ekleyeceğiz. MaType parametresi, hareketli ortalama türünü belirlememize yardımcı olacaktır. Bu, cTrader kullanıcı arayüzünde açılır bir menü olarak görünecek bir enum'dur.

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

Source parametresi, kullanıcılara hareketli ortalama göstergemiz için veri kaynağını belirtme seçeneği sunacaktır. Bu parametre DataSeries türündedir.

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

Gerekli parametreler bildirildiğine göre hareketli ortalamamızı tanımlayacak ve başlatacağız.

1
2
3
4
5
6
private MovingAverage movingAverage;

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

Bu noktada standard sapmamız için hesaplamayı uygulamaya hazırız. Varsayılan kod şablonu, hesaplama sonuçlarını görüntülemek için kullanabileceğimiz Output özelliğini zaten içerir.

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

Son olarak, Calculate() yönteminde standard sapma hesaplamasını uygulayacağız.

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

Göstergemizi bir grafiğe eklersek tüm parametrelerimizi Örnek ekle penceresinde görmeliyiz.

Ek parametreler ekleme

Standard sapmamız tamamlandığında gösterge için görsel bir eşik görevi görecek bir yatay çizgi de ekleyebiliriz. Bu amaçla birkaç parametre daha eklememiz gerekecek.

İlki, çizgimizin gösterilip gösterilmeyeceğini belirleyecek bir boolean parametresi olacaktır.

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

#!c# LineLevel` parametresi, çizginin çizilmesi gereken fiyat seviyesini belirlememizi sağlayacak.

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

Ayrıca çizgi rengini seçmeye olanak tanıyan bir parametre ekleyeceğiz.

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

Gerekli tüm parametreler yerindeyken, göstergemizin eklendiği grafiğe çizgiyi çizmek için kod yazabiliriz.

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

Göstergeyi tekrar oluşturur ve yeni bir örnek eklersek, çizgiyi gizleyip/gösterebilir, yukarı veya aşağı taşıyabilir ve seçtiğimiz rengi çizgi rengi olarak seçebiliriz.

Aşağıdaki örnekte gösterildiği gibi, parametreler ayrıca göstergemizin yalnızca belirli bir zaman aralığı için grafiklere eklendiğinde gösterilmesini sağlamak için kullanılabilir.

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

Initialize() metodunda, göstergemizin eklendiği grafiğin zaman aralığını kontrol edeceğiz. Eğer TF parametresinin değerine eşit değilse, göstergenin görüntülenmesini engelleyeceğiz.

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

Bu kılavuzun parametreleri ve cTrader algoritmik işlem yapmada nasıl çalıştıklarını anlamada yardımcı olduğunu umuyoruz.