Artikel ini melengkapi daftar sampel kode indikator yang ekstensif. Kami memperluas beberapa konsep yang disebutkan dalam sampel kode ini dan membahas beberapa fitur lanjutan yang dapat Anda implementasikan saat membuat indikator baru.
Atribut cloud
Anda mungkin pernah melihat awan transparan pada grafik trading.
Anda dapat menambahkan awan ke output indikator Anda dengan menggunakan atribut kelas CloudAttribute seperti yang ditunjukkan dalam contoh di bawah ini:
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}}
Konstruktor CloudAttribute mengambil dua nama garis output. Setelah itu, secara otomatis akan memplot awan untuk mencocokkan ruang di antara kedua output ini.
Anda juga dapat mengatur opasitas awan dengan menggunakan properti Opacity. Untuk mengatur warna awan, gunakan properti FirstColor. Secara default, warna awan akan cocok dengan warna garis pertama dalam output indikator.
Bekerja dengan warna
Algo API menyertakan enumColor yang dapat digunakan untuk mengonfigurasi warna untuk objek Chart, kontrol grafik, dan output.
Nilai-nilai enumColor mewakili warna-warna yang umum digunakan. Anda dapat menggunakannya tanpa harus berurusan dengan kode warna heksadesimal atau ARGB.
Saat menyesuaikan output, Anda dapat mengatur warnanya dengan menggunakan properti string LineColor. Seperti yang ditunjukkan di bawah ini, properti ini menerima baik nama warna maupun kode 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 dapat diperlakukan sebagai parameter yang dapat disesuaikan. Untuk memungkinkan pengguna memilih warna kustom (misalnya, warna garis yang digambar oleh indikator), deklarasikan parameter dengan tipe Color.
Dalam contoh di bawah ini, kami membuat indikator sederhana (high minus low) yang, saat diinisialisasi, menampilkan teks pada grafik trading tempat indikator tersebut 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);}}}
Tipe output
Ada beberapa tipe output berbeda yang tersedia untuk indikator kustom:
Line - garis kontinu.
DiscontinuousLine - garis tidak kontinu yang berguna untuk kasus di mana indikator Anda tidak selalu memiliki nilai perhitungan.
Points - titik atau dot untuk setiap bar.
Histogram - serangkaian bar vertikal. Saat menggunakan tipe ini, atur properti IsOverlay indikator Anda ke false.
Untuk mengatur tipe output, gunakan properti PlotType seperti yang ditunjukkan di bawah ini.
Tipe enum diperlukan untuk membuat parameter yang memiliki beberapa opsi yang telah ditentukan sebelumnya yang dapat dipilih oleh pengguna. Kami menggunakan tipe enum dalam contoh berikut:
Jika Anda menambahkan parameter ini ke indikator atau cBot, Anda akan melihat menu interaktif multi-opsi yang memungkinkan Anda memilih salah satu nilai enum yang ditentukan.
Bekerja dengan waktu
Waktu platform dan server
Anda dapat mendapatkan waktu server saat ini dengan mengakses properti Server.Time atau Server.TimeInUtc.
Properti Server.Time mewakili waktu saat ini dalam zona waktu indikator atau cBot Anda yang ditetapkan melalui properti TimeZone.
Waktu pembukaan bar
Gunakan koleksi Bars.OpenTime untuk mendapatkan waktu pembukaan bar. Zona waktu akan didasarkan pada zona waktu yang telah Anda tentukan dalam atribut kelas TimeZone.
Gunakan properti Application.UserTimeOffset untuk mendapatkan zona waktu platform pengguna. Ini terutama digunakan untuk mengonversi waktu indikator Anda ke zona waktu pengguna.
Properti Application.UserTimeOffset mengembalikan objek TimeSpan yang mewakili offset waktu yang diatur oleh pengguna di platform cTrader mereka dibandingkan dengan waktu UTC.
Anda juga dapat memilih untuk mendapatkan notifikasi ketika pengguna mengubah offset waktu platform mereka. Untuk melakukannya, gunakan event Application.UserTimeOffsetChanged.
cTrader mendukung tipe parameter tanggal dan waktu khusus yang memungkinkan Anda mendapatkan nilai tanggal dan waktu yang bertipe kuat sebagai input untuk algo Anda, alih-alih menggunakan tipe parameter string.
Dengan menggunakan tipe parameter tanggal dan waktu baru, Anda dapat memperoleh nilai dalam zona waktu algo Anda dengan validasi minimum dan maksimum bawaan dan dukungan optimisasi penuh, sama seperti tipe parameter lainnya.
Untuk mendapatkan nilai waktu tertentu melalui parameter yang dapat disesuaikan, Anda dapat menggunakan tipe C# berikut:
DateTime
DateOnly
TimeSpan
Di bawah ini adalah contoh bagaimana hal ini dapat dilakukan: