Bỏ qua

Các loại tham số trong cTrader algo

Trong bài viết này và video tương ứng, chúng tôi sẽ trình bày cách bạn có thể khai báo và sử dụng các tham số có thể tùy chỉnh trong cBot và chỉ báo của mình. Chúng tôi sẽ phát triển một chỉ báo đơn giản và chỉ cho bạn cách cấu hình các tham số từ giao diện người dùng cTrader. Chúng tôi cũng sẽ giải thích những loại tham số nào bạn có thể sử dụng trong cBot hoặc chỉ báo cTrader và minh họa cách chúng được khai báo và sử dụng trong mã của bạn.

Các tham số có thể tùy chỉnh

Các tham số có thể tùy chỉnh là các giá trị có thể cấu hình được khi thêm, bắt đầu hoặc sử dụng một thuật toán. Chúng cho phép bạn và những người dùng khác tùy chỉnh hành vi của cBot, chỉ báo và plugin mà không cần sửa đổi mã nguồn.

Sử dụng tham số trong cBot, chỉ báo và plugin

  • Đối với cBot, bạn có thể cấu hình các biến hoặc cài đặt ảnh hưởng đến việc thực thi, chẳng hạn như mức cắt lỗ và chốt lời.
  • Đối với chỉ báo, bạn có thể cấu hình các biến ảnh hưởng đến đầu ra của chỉ báo, chẳng hạn như các khoảng thời gian được xem xét hoặc nguồn dữ liệu được sử dụng.
  • Đối với plugin, bạn có thể cấu hình các biến, chẳng hạn như tùy chọn giao diện người dùng hoặc khóa API, xác định cách plugin tương tác với giao diện hoặc các dịch vụ bên ngoài.

Như đã giải thích trước đây, cTrader hỗ trợ các loại tham số sau:

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

Ghi chú

Các thuật toán Python sử dụng các tham số có thể tùy chỉnh được khai báo trong các tệp .cs của chúng.

Tạo một chỉ báo đơn giản với tham số

Để minh họa cách bạn có thể sử dụng tham số trong chỉ báo tùy chỉnh, chúng ta sẽ tạo một chỉ báo mới và đặt tên là Standard Deviation.

Để tính độ lệch chuẩn, trước tiên chúng ta cần tính trung bình di động của giá. Sau đó, chúng ta sẽ khai báo các tham số cần thiết cho chỉ báo trung bình di động, bắt đầu với khoảng thời gian trung bình di động.

1
public int MaPeriod { get; set; }

Bất kỳ thuộc tính công khai nào có một trong các loại được hỗ trợ đều có thể trở thành tham số chỉ báo. Để biến thuộc tính MaPeriod của chúng ta thành một tham số, tất cả những gì chúng ta cần làm là thêm khai báo cần thiết.

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

Thuộc tính Parameter hướng dẫn cTrader hiển thị thuộc tính này như một tham số trong bảng tham số chỉ báo bằng cách sử dụng tên đã định nghĩa ("MA Period").

Như được hiển thị bên dưới, thuộc tính Parameter cũng cho phép bạn định nghĩa một số thuộc tính của tham số như tên hiển thị, giá trị mặc định, nhóm mà tham số này sẽ được đặt vào, giá trị tối đa và tối thiểu, cũng như bước mà tham số sẽ thay đổi khi nhấn các mũi tên lên và xuống (chỉ dành cho các giá trị số).

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

Bây giờ chúng ta sẽ thêm các tham số còn lại cần thiết cho chỉ báo trung bình di động. Tham số MaType sẽ giúp chúng ta xác định loại trung bình di động. Đây là một enum sẽ xuất hiện dưới dạng menu thả xuống trong giao diện người dùng cTrader.

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

Tham số Source sẽ cho phép người dùng chỉ định nguồn dữ liệu cho chỉ báo trung bình di động của chúng ta. Tham số này thuộc loại DataSeries.

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

Bây giờ các tham số cần thiết đã được khai báo, chúng ta sẽ định nghĩa và khởi tạo trung bình di động của mình.

1
2
3
4
5
6
private MovingAverage movingAverage;

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

Tại thời điểm này, chúng ta đã sẵn sàng thực hiện tính toán cho độ lệch chuẩn của mình. Mẫu mã mặc định đã chứa thuộc tính Output mà chúng ta có thể sử dụng để hiển thị kết quả tính toán.

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

Cuối cùng nhưng không kém phần quan trọng, chúng ta sẽ thực hiện tính toán độ lệch chuẩn trong phương thức Calculate().

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

Nếu chúng ta thêm chỉ báo của mình vào biểu đồ, chúng ta sẽ thấy tất cả các tham số của mình trong cửa sổ Add instance.

Thêm tham số bổ sung

Với độ lệch chuẩn đã hoàn thành, chúng ta cũng có thể thêm một đường ngang sẽ đóng vai trò như một ngưỡng trực quan cho chỉ báo. Để phục vụ mục đích này, chúng ta sẽ cần thêm một số tham số nữa.

Tham số đầu tiên sẽ là một tham số boolean xác định xem đường của chúng ta có được hiển thị hay không.

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

Tham số LineLevel sẽ cho phép chúng ta xác định mức giá mà đường sẽ được vẽ.

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

Chúng ta cũng sẽ thêm một tham số cho phép chọn màu đường.

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

Với tất cả các tham số cần thiết đã có sẵn, chúng ta có thể viết mã để vẽ đường trên biểu đồ mà chỉ báo của chúng ta được gắn vào.

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

Nếu chúng ta xây dựng lại chỉ báo và thêm một phiên bản mới, chúng ta sẽ có thể ẩn/hiện đường, di chuyển nó lên hoặc xuống và chọn màu sắc tùy ý làm màu đường.

Như được hiển thị trong ví dụ dưới đây, tham số cũng có thể được sử dụng để đảm bảo rằng chỉ báo của chúng ta chỉ được hiển thị khi được thêm vào biểu đồ cho một khung thời gian cụ thể.

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

Trong phương thức Initialize(), chúng ta sẽ kiểm tra khung thời gian của biểu đồ mà chỉ báo của chúng ta được gắn vào. Nếu nó không bằng giá trị của tham số TF, chúng ta sẽ ngăn chỉ báo được hiển thị.

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

Chúng tôi hy vọng rằng hướng dẫn này đã hữu ích trong việc hiểu về tham số và cách chúng hoạt động trong giao dịch thuật toán cTrader.