Artikel ini melengkapi senarai contoh kod indikator yang luas kami. Kami mengembangkan beberapa konsep yang disebut dalam contoh kod ini dan membincangkan beberapa ciri lanjutan yang boleh anda laksanakan semasa mencipta indikator baharu.
Atribut awan
Anda mungkin pernah melihat awan lutsinar pada carta dagangan.
Anda boleh menambah awan pada output indikator anda dengan menggunakan atribut kelas CloudAttribute seperti yang ditunjukkan dalam contoh di bawah:
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}}
Pembina CloudAttribute mengambil dua nama garis output. Selepas itu, ia secara automatik memplot awan untuk sepadan dengan ruang antara kedua-dua output ini.
Anda juga boleh menetapkan kelegapan awan dengan menggunakan sifat Opacity. Untuk menetapkan warna awan, gunakan sifat FirstColor. Secara lalai, warna awan akan sepadan dengan warna garis pertama dalam output indikator.
Bekerja dengan warna
API Algo merangkumi enumColor yang boleh digunakan untuk mengkonfigurasi warna untuk objek Chart, kawalan carta dan output.
Nilai enumColor mewakili warna yang biasa digunakan. Anda boleh menggunakannya tanpa perlu berurusan dengan kod warna heksadesimal atau ARGB.
Apabila menyesuaikan output, anda boleh menetapkan warnanya dengan menggunakan sifat rentetan LineColor. Seperti yang ditunjukkan di bawah, ia menerima kedua-dua warna bernama dan kod warna heksadesimal.
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);
Warna juga boleh dianggap sebagai parameter yang boleh disesuaikan. Untuk membolehkan pengguna memilih warna tersuai (contohnya, warna garis yang dilukis oleh indikator), isytiharkan parameter jenis Color.
Dalam contoh di bawah, kita mencipta indikator mudah (tinggi tolak rendah) yang, apabila diinisialisasikan, memaparkan teks pada carta dagangan yang dilampirkan.
1 2 3 4 5 6 7 8 910111213141516171819
usingcAlgo.API;usingcAlgo.API.Indicators;usingcAlgo.API.Collections;usingcAlgo.API.Internals;namespacecAlgo{[Indicator(IsOverlay = false, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]publicclassHighMinusLowColor:Indicator{[Parameter("Text Color", DefaultValue="#f54242")]publicColorTextColor{get;set;}publicoverridevoidInitialize(){varstaticText=Chart.DrawStaticText("static","This text shows how color parameters work",VerticalAlignment.Center,HorizontalAlignment.Center,TextColor);}}}
Jenis output
Terdapat beberapa jenis output yang berbeza tersedia untuk indikator tersuai:
Line - garis berterusan.
DiscontinuousLine - garis tidak berterusan yang berguna untuk kes di mana indikator anda tidak sentiasa mempunyai nilai pengiraan.
Points - titik atau bintik untuk setiap bar.
Histogram - siri bar menegak. Apabila menggunakan jenis ini, tetapkan sifat IsOverlay indikator anda kepada false.
Untuk menetapkan jenis output, gunakan sifat PlotType seperti yang ditunjukkan di bawah.
Jenis enum diperlukan untuk mencipta parameter yang mempunyai beberapa pilihan yang telah ditetapkan yang boleh dipilih oleh pengguna. Kami menggunakan jenis enum dalam contoh berikut:
Jika anda menambah parameter ini kepada indikator atau cBot, anda akan melihat menu interaktif pelbagai pilihan yang membolehkan anda memilih salah satu nilai enum yang dinyatakan.
Bekerja dengan masa
Masa platform dan pelayan
Anda boleh mendapatkan masa pelayan semasa dengan mengakses sama ada sifat Server.Time atau Server.TimeInUtc.
Sifat Server.Time mewakili masa semasa dalam zon masa indikator atau cBot anda yang ditetapkan melalui sifat TimeZone.
Masa pembukaan bar
Gunakan koleksi Bars.OpenTime untuk mendapatkan masa pembukaan bar. Zon masa akan berdasarkan zon masa yang anda telah nyatakan dalam atribut kelas TimeZone.
Gunakan sifat Application.UserTimeOffset untuk mendapatkan zon masa platform pengguna. Ini terutamanya digunakan untuk menukar masa indikator anda kepada zon masa pengguna.
Sifat Application.UserTimeOffset mengembalikan objek TimeSpan yang mewakili ofset masa yang ditetapkan oleh pengguna dalam platform cTrader mereka berbanding dengan masa UTC.
Anda juga boleh memilih untuk dimaklumkan apabila pengguna menukar ofset masa platform mereka. Untuk berbuat demikian, gunakan acara Application.UserTimeOffsetChanged.
cTrader menyokong jenis parameter tarikh dan masa khusus yang membolehkan anda mendapatkan nilai tarikh dan masa yang kuat sebagai input untuk algo anda dan bukannya menggunakan jenis parameter string.
Dengan menggunakan jenis parameter tarikh dan masa baharu, anda boleh mendapatkan nilai dalam zon masa algo anda dengan pengesahan minimum dan maksimum terbina dalam dan sokongan pengoptimuman penuh, sama seperti jenis parameter lain.
Untuk mendapatkan nilai masa tertentu melalui parameter yang boleh disesuaikan, anda boleh menggunakan jenis C# ini:
DateTime
DateOnly
TimeSpan
Di bawah adalah contoh bagaimana ini boleh dilakukan: