Bu makale, kapsamlı gösterge kodu örnekleri listemizi tamamlar. Bu kod örneklerinde bahsedilen bazı kavramları genişletiyor ve yeni göstergeler oluştururken uygulayabileceğiniz çeşitli gelişmiş özellikleri tartışıyoruz.
Bulut özniteliği
Muhtemelen işlem grafiklerinde şeffaf bulutlar görmüşsünüzdür.
Aşağıdaki örnekte gösterildiği gibi CloudAttribute sınıf özniteliğini kullanarak gösterge çıktılarınıza bulutlar ekleyebilirsiniz:
usingcAlgo.API;usingcAlgo.API.Indicators;usingSystem;namespacecAlgo{/// <summary>/// This indicator shows how to make a built-in cTrader indicator multi time frame and how to use cloud attribute/// </summary>[Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None), Cloud("Top", "Bottom", Opacity = 0.2)]publicclassBollingerBandsMTFCloudSample:Indicator{privateBollingerBands_bollingerBands;privateBars_baseBars;[Parameter("Base TimeFrame", DefaultValue = "Daily")]publicTimeFrameBaseTimeFrame{get;set;}[Parameter("Source", DefaultValue = DataSeriesType.Close)]publicDataSeriesTypeDataSeriesType{get;set;}[Parameter("Periods", DefaultValue = 14, MinValue = 0)]publicintPeriods{get;set;}[Parameter("Standard Deviation", DefaultValue = 2, MinValue = 0)]publicdoubleStandardDeviation{get;set;}[Parameter("MA Type", DefaultValue = MovingAverageType.Simple)]publicMovingAverageTypeMaType{get;set;}[Output("Main", LineColor = "Yellow", PlotType = PlotType.Line, Thickness = 1)]publicIndicatorDataSeriesMain{get;set;}[Output("Top", LineColor = "Red", PlotType = PlotType.Line, Thickness = 1)]publicIndicatorDataSeriesTop{get;set;}[Output("Bottom", LineColor = "Red", PlotType = PlotType.Line, Thickness = 1)]publicIndicatorDataSeriesBottom{get;set;}protectedoverridevoidInitialize(){_baseBars=MarketData.GetBars(BaseTimeFrame);varbaseSeries=GetBaseSeries();_bollingerBands=Indicators.BollingerBands(baseSeries,Periods,StandardDeviation,MaType);}publicoverridevoidCalculate(intindex){varbaseIndex=_baseBars.OpenTimes.GetIndexByTime(Bars.OpenTimes[index]);Main[index]=_bollingerBands.Main[baseIndex];Top[index]=_bollingerBands.Top[baseIndex];Bottom[index]=_bollingerBands.Bottom[baseIndex];}privateDataSeriesGetBaseSeries(){switch(DataSeriesType){caseDataSeriesType.Open:return_baseBars.OpenPrices;caseDataSeriesType.High:return_baseBars.HighPrices;caseDataSeriesType.Low:return_baseBars.LowPrices;caseDataSeriesType.Close:return_baseBars.ClosePrices;default:thrownewArgumentOutOfRangeException("DataSeriesType");}}}publicenumDataSeriesType{Open,High,Low,Close}}
CloudAttribute kurucusu iki çıktı çizgisi adı alır. Daha sonra, bu iki çıktı arasındaki boşluğa uyacak şekilde bulutu otomatik olarak çizer.
Opacity özelliğini kullanarak bulutun opaklığını da ayarlayabilirsiniz. Bulut rengini ayarlamak için FirstColor özelliğini kullanın. Varsayılan olarak, bulutun rengi gösterge çıktısındaki ilk çizginin rengiyle eşleşecektir.
Renklerle çalışın
Algo API, Chart nesneleri, grafik kontrolleri ve çıktıları için renkleri yapılandırmak için kullanılabilecek Colorenum'unu içerir.
Colorenum'unun değerleri yaygın olarak kullanılan renkleri temsil eder. Bunları onaltılık veya ARGB renk kodlarıyla uğraşmak zorunda kalmadan kullanabilirsiniz.
Çıktıları özelleştirirken, LineColor dize özelliğini kullanarak renklerini ayarlayabilirsiniz. Aşağıda gösterildiği gibi, hem adlandırılmış renkleri hem de onaltılık renk kodlarını kabul eder.
1234
_=Chart.DrawStaticText("NamedColor","This is text using Color class color name properties",VerticalAlignment.Center,HorizontalAlignment.Center,Color.Red);_=Chart.DrawStaticText("HexadecimalColor","This is text using Hexadecimal color",VerticalAlignment.Bottom,HorizontalAlignment.Center,Color.FromHex("#FF5733"));_=Chart.DrawStaticText("ARGBColor","This is text using ARGB color",VerticalAlignment.Top,HorizontalAlignment.Center,Color.FromArgb(255,200,100,60));_=Chart.DrawStaticText("ParsedNameColor","This is text using color name by parsing it from string",VerticalAlignment.Center,HorizontalAlignment.Left,Color.FromName("Yellow"));
1 2 3 4 5 6 7 8 910111213
varstackPanel=newStackPanel{Orientation=Orientation.Vertical,HorizontalAlignment=HorizontalAlignment.Center,VerticalAlignment=VerticalAlignment.Center};stackPanel.AddChild(newTextBlock{Text="Red Color property",BackgroundColor=Color.Red});stackPanel.AddChild(newTextBlock{Text="Hexadecimal Color code",BackgroundColor=Color.FromHex("#FF5733")});stackPanel.AddChild(newTextBlock{Text="ARGB Color",BackgroundColor=Color.FromArgb(200,100,40,80)});stackPanel.AddChild(newTextBlock{Text="Color Name",BackgroundColor=Color.FromName("Green")});Chart.AddControl(stackPanel);
Renkler özelleştirilebilir parametreler olarak da ele alınabilir. Kullanıcıların özel renkler seçmesine (örneğin, bir gösterge tarafından çizilen çizgilerin renkleri) izin vermek için Color türünde bir parametre bildirin.
Kullanıcıların seçebileceği önceden tanımlanmış çeşitli seçeneklere sahip parametreler oluşturmak için enum türü gereklidir. Aşağıdaki örnekte enum türünü kullanıyoruz:
Bu parametreyi bir göstergeye veya cBot'a eklerseniz, belirtilen enum değerlerinden birini seçmenize olanak tanıyan çok seçenekli etkileşimli bir menü göreceksiniz.
Zamanla çalışma
Platform ve sunucu zamanı
Mevcut sunucu zamanını ya Server.Time ya da Server.TimeInUtc özelliklerine erişerek alabilirsiniz.
Server.Time özelliği, TimeZone özelliği aracılığıyla belirlenen göstergenizin veya cBot'unuzun saat dilimindeki mevcut zamanı temsil eder.
Çubuk açılış zamanı
Çubuk açılış zamanlarını almak için Bars.OpenTime koleksiyonunu kullanın. Saat dilimi, TimeZone sınıf özniteliğinde belirttiğiniz saat dilimine dayanacaktır.
Kullanıcının platformunun saat dilimini almak için Application.UserTimeOffset özelliğini kullanın. Bu, öncelikle gösterge zamanınızı kullanıcının saat dilimine dönüştürmek için kullanılır.
Application.UserTimeOffset özelliği, kullanıcının cTrader platformunda UTC zamanına kıyasla ayarladığı zaman ofsetini temsil eden bir TimeSpan nesnesi döndürür.
Bir kullanıcı platform zaman ofsetini değiştirdiğinde bildirim almayı da seçebilirsiniz. Bunu yapmak için Application.UserTimeOffsetChanged olayını kullanın.
cTrader, string parametre türünü kullanmak yerine algolarınız için giriş olarak güçlü türde tarih ve zaman değerleri almanızı sağlayan özel tarih ve zaman parametre türlerini destekler.
Yeni tarih ve zaman parametre türlerini kullanarak, diğer parametre türleri gibi yerleşik minimum ve maksimum doğrulama ve tam optimizasyon desteğiyle algo saat diliminizde değerler elde edebilirsiniz.
Özelleştirilebilir bir parametre aracılığıyla belirli bir zaman değeri almak için bu C# türlerini kullanabilirsiniz:
DateTime
DateOnly
TimeSpan
Bunun nasıl yapılabileceğine dair bir örnek aşağıdadır: