Bỏ qua

Tham số tùy chỉnh trong thuật toán Python

Khi phát triển robot giao dịch Python, chỉ báo kỹ thuật hoặc plugin, bạn có thể cần thêm và cấu hình các tham số tùy chỉnh. Bài viết này giải thích cách khai báo và sử dụng các tham số tùy chỉnh trong thuật toán Python cho cTrader.

Ghi chú

Mô hình thực thi cho các thuật toán Python cTrader liên quan đến một công cụ .NET/C#, yêu cầu tất cả các tham số tùy chỉnh phải được khai báo trong các tệp .cs. Mỗi khi bạn tạo một thuật toán Python trong cTrader, một tệp .cs cho thuật toán đó được tạo tự động và lưu trữ trong thư mục liên quan.

Vị trí

Vị trí của tệp .cs cho một thuật toán Python phụ thuộc vào loại thuật toán, cho dù đó là cBot, chỉ báo hay plugin, cũng như tên của thuật toán.

  • Đối với cBot: Documents/cAlgo/Sources/Robots/{tên-cBot}/{tên-cBot}/
  • Đối với chỉ báo: Documents/cAlgo/Sources/Indicators/{tên-Chỉ-báo}/{tên-Chỉ-báo}/
  • Đối với plugin: Documents/cAlgo/Sources/Indicators/{tên-Plugin}/{tên-Plugin}/

Bạn có thể làm theo các hướng dẫn sau để định vị tệp .cs cho một thuật toán Python:

  1. Nhấp chuột phải vào thuật toán trong cTrader Windows hoặc Mac, sau đó chọn Hiển thị trong thư mục.

  2. Điều hướng qua {tên-của-thuật-toán}/{tên-của-thuật-toán}, sau đó xác định tệp .cs (tệp nguồn C#) từ danh sách các tệp.

Tệp .cs thường có cùng tên với thuật toán, với tất cả khoảng trắng được loại bỏ. Ví dụ, một thuật toán có tên Amazing Aroon cBot sẽ tạo ra một tệp AmazingArooncBot.cs.

Mẹo

Trong cùng thư mục, bạn có thể truy cập mã Python chính cho thuật toán của mình, được lưu trữ trong một tệp .py như Amazing Aroon cBot_main.py. Tệp Python tuân theo quy ước đặt tên đơn giản:

  • Đối với cBot: tên-cBot_main.py
  • Đối với chỉ báo: tên-Chỉ-báo_main.py
  • Đối với plugin: tên-Plugin_main.py

Nội dung

Mở tệp .cs trong bất kỳ trình soạn thảo văn bản hoặc mã nào, chẳng hạn như NotePad hoặc Visual Studio code và bạn sẽ thấy mã tương tự như sau:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
using cAlgo.API;

namespace cAlgo.Robots;

[Robot(AccessRights = AccessRights.None, AddIndicators = true)]
public partial class AmazingArooncBot : Robot
{
    [Parameter("Volume (Lots)", DefaultValue = 0.01)]
    public double VolumeInLots { get; set; }

    [Parameter("Stop Loss (Pips)", DefaultValue = 10, MaxValue = 100, MinValue = 1, Step = 1)]
    public double StopLossInPips { get; set; }

    [Parameter("Take Profit (Pips)", DefaultValue = 10, MaxValue = 100, MinValue = 1, Step = 1)]
    public double TakeProfitInPips { get; set; }

    [Parameter("Label", DefaultValue = "AmazingArooncBot")]
    public string Label { get; set; }

    [Parameter("Periods", DefaultValue = 25, Group = "Aroon", MinValue = 2)]
    public int Periods { get; set; }
}

Ghi chú

Bạn sẽ thấy một lớp trống nếu bạn tạo cBot Python của mình từ đầu mà không sử dụng mẫu.

Bất kỳ tham số nào được khai báo trong tệp .cs đều có thể được sử dụng trong tệp Python chính, chứa mã được hiển thị trong trình soạn thảo mã. Mã Python chính dưới đây minh họa việc sử dụng các tham số tùy chỉnh:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import clr

clr.AddReference("cAlgo.API")

# Import cAlgo API types
from cAlgo.API import *

# Import trading wrapper functions
from robot_wrapper import *

class AmazingArooncBot():
    def on_start(self):
        self.volumeInUnits = api.Symbol.QuantityToVolumeInUnits(api.VolumeInLots)
        self.aroon = api.Indicators.Aroon(api.Periods)

    def on_bar_closed(self):
        if self.aroon.Up.Last(0) > self.aroon.Down.Last(0) and self.aroon.Up.Last(1) < self.aroon.Down.Last(1):
            self.close_positions(TradeType.Sell)
            api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, self.volumeInUnits, api.Label, api.StopLossInPips, api.TakeProfitInPips)
        elif self.aroon.Up.Last(0) < self.aroon.Down.Last(0) and self.aroon.Up.Last(1) > self.aroon.Down.Last(1):
            self.close_positions(TradeType.Buy)
            api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, self.volumeInUnits, api.Label, api.StopLossInPips, api.TakeProfitInPips)

    def get_bot_positions(self):
        return api.Positions.FindAll(api.Label)

    def close_positions(self, tradeType):
        for position in self.get_bot_positions():
            if position.TradeType != tradeType:
                continue
            api.ClosePosition(position)

Ưu điểm

Ưu điểm chính của các tham số tùy chỉnh là chúng xuất hiện dưới dạng các trường có thể chỉnh sửa trong giao diện người dùng của tất cả các ứng dụng cTrader, bao gồm cTrader Windows, Mac, Web và Mobile. Các giá trị trong các trường này có thể được sửa đổi dễ dàng để phù hợp với bất kỳ nhu cầu hoặc hoạt động nào, mà không cần truy cập hoặc sửa đổi mã nguồn của thuật toán.

Trong cTrader Store, người bán thường sử dụng các tham số tùy chỉnh để đảm bảo rằng người mua các thuật toán có thể điều chỉnh các thuật toán để phù hợp với mục tiêu và quy trình làm việc của họ.

Image title