Bài viết này bổ sung cho danh sách mẫu mã chỉ báo đầy đủ của chúng tôi. Chúng tôi mở rộng một số khái niệm được đề cập trong các mẫu mã này và thảo luận về một số tính năng nâng cao mà bạn có thể triển khai khi tạo các chỉ báo mới.
Thuộc tính cloud
Có lẽ bạn đã từng thấy các đám mây trong suốt trên các biểu đồ giao dịch.
Bạn có thể thêm các đám mây vào đầu ra chỉ báo của mình bằng cách sử dụng thuộc tính lớp CloudAttribute như trong ví dụ dưới đây:
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}}
Hàm tạo CloudAttribute nhận hai tên đường đầu ra. Sau đó, nó tự động vẽ đám mây để khớp với khoảng trống giữa hai đầu ra này.
Bạn cũng có thể đặt độ mờ của đám mây bằng cách sử dụng thuộc tính Opacity. Để thiết lập màu sắc của đám mây, hãy sử dụng thuộc tính FirstColor. Theo mặc định, màu sắc của đám mây sẽ khớp với màu sắc của đường đầu tiên trong đầu ra chỉ báo.
Làm việc với màu sắc
Algo API bao gồm enumColor có thể được sử dụng để cấu hình màu sắc cho các đối tượng Chart, điều khiển biểu đồ và đầu ra.
Các giá trị của enumColor đại diện cho các màu thường được sử dụng. Bạn có thể sử dụng chúng mà không cần phải xử lý các mã màu thập lục phân hoặc ARGB.
Khi tùy chỉnh đầu ra, bạn có thể đặt màu sắc của chúng bằng cách sử dụng thuộc tính chuỗi LineColor. Như được hiển thị bên dưới, nó chấp nhận cả tên màu và mã màu thập lục phân.
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);
Màu sắc cũng có thể được coi là các tham số có thể tùy chỉnh. Để cho phép người dùng chọn màu tùy chỉnh (ví dụ: màu sắc của các đường được vẽ bởi một chỉ báo), hãy khai báo một tham số thuộc loại Color.
Trong ví dụ dưới đây, chúng ta tạo một chỉ báo đơn giản (cao trừ thấp) mà khi được khởi tạo, hiển thị văn bản trên biểu đồ giao dịch mà nó được gắn vào.
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);}}}
Các loại đầu ra
Có một số loại đầu ra khác nhau có sẵn cho các chỉ báo tùy chỉnh:
Line - một đường liên tục.
DiscontinuousLine - một đường không liên tục hữu ích cho các trường hợp mà chỉ báo của bạn không phải lúc nào cũng có giá trị tính toán.
Points - một điểm hoặc một chấm cho mỗi thanh.
Histogram - một chuỗi các thanh dọc. Khi sử dụng loại này, hãy đặt thuộc tính IsOverlay của chỉ báo của bạn thành false.
Để đặt loại đầu ra, hãy sử dụng thuộc tính PlotType như được minh họa dưới đây.
Nếu bạn thêm tham số này vào một chỉ báo hoặc cBot, bạn sẽ thấy một menu tương tác đa lựa chọn cho phép bạn chọn một trong các giá trị enum được chỉ định.
Làm việc với thời gian
Thời gian nền tảng và máy chủ
Bạn có thể lấy thời gian máy chủ hiện tại bằng cách truy cập thuộc tính Server.Time hoặc Server.TimeInUtc.
Sử dụng thuộc tính Application.UserTimeOffset để lấy múi giờ của nền tảng của người dùng. Điều này chủ yếu được sử dụng để chuyển đổi thời gian chỉ báo của bạn sang múi giờ của người dùng.
Thuộc tính Application.UserTimeOffset trả về một đối tượng TimeSpan đại diện cho độ lệch thời gian được người dùng đặt trong nền tảng cTrader của họ so với thời gian UTC.
Bạn cũng có thể chọn được thông báo khi người dùng thay đổi độ lệch thời gian nền tảng của họ. Để làm điều này, hãy sử dụng sự kiện Application.UserTimeOffsetChanged.
cTrader hỗ trợ các loại tham số ngày và giờ chuyên dụng cho phép bạn nhận các giá trị ngày và giờ được định kiểu mạnh làm đầu vào cho các thuật toán của bạn thay vì sử dụng loại tham số string.
Bằng cách sử dụng các loại tham số ngày và giờ mới, bạn có thể nhận được các giá trị trong múi giờ thuật toán của bạn với xác thực tối thiểu và tối đa tích hợp sẵn và hỗ trợ tối ưu hóa đầy đủ, giống như các loại tham số khác.
Để lấy một giá trị thời gian nhất định thông qua một tham số có thể tùy chỉnh, bạn có thể sử dụng các loại C# này: