Thường xuyên, các chiến lược tự động cần xem xét thông tin từ các khung thời gian khác nhau trước khi đưa ra quyết định giao dịch. May mắn thay, cTrader cung cấp nhiều công cụ cho phép các thuật toán dễ dàng truy cập dữ liệu từ nhiều khung thời gian. Trong video này và bài viết tương ứng, chúng tôi sẽ giải thích cách bạn có thể sử dụng các công cụ này để tạo ra một cBot hiệu quả.
Khai báo tham số cBot
Chúng ta sẽ bắt đầu bằng cách khai báo các tham số cần thiết cho một đường trung bình di động. Chúng ta sẽ cần chu kỳ, khung thời gian và loại trung bình di động.
12345678
[Parameter("MA 1 Period", DefaultValue = 14, Group = "Moving Averages")]publicintMA1Period{get;set;}[Parameter("MA 1 Timeframe", DefaultValue = "Hour", Group = "Moving Averages")]publicTimeFrameMA1Timeframe{get;set;}[Parameter("MA 1 Type", Group = "Moving Averages")]publicMovingAverageTypeMA1Type{get;set;}
Sau đó, chúng ta có thể định nghĩa đường trung bình di động.
1
privateMovingAverage_ma1;
Chúng ta có thể khởi tạo đường trung bình di động trong phương thức OnStart(). Chúng ta sẽ sử dụng phương thức MarketData.GetBars() để lấy các nến của đường trung bình di động đầu tiên và truyền chúng vào hàm tạo chỉ báo. Phương thức GetBars() hữu ích để lấy dữ liệu nến cho bất kỳ khung thời gian và ký hiệu nào bạn cần.
Parameter("MA 1 Period",DefaultValue=14,Group="Moving Averages")]publicintMA1Period{get;set;}[Parameter("MA 1 Timeframe", DefaultValue = "Hour", Group = "Moving Averages")]publicTimeFrameMA1Timeframe{get;set;}[Parameter("MA 1 Type", Group = "Moving Averages")]publicMovingAverageTypeMA1Type{get;set;}[Parameter("MA 2 Period", DefaultValue = 14, Group = "Moving Averages")]publicintMA2Period{get;set;}[Parameter("MA 2 Timeframe", DefaultValue = "Hour2", Group = "Moving Averages")]publicTimeFrameMA2Timeframe{get;set;}[Parameter("MA 2 Type", Group = "Moving Averages")]publicMovingAverageTypeMA2Type{get;set;}[Parameter("MA 3 Period", DefaultValue = 14, Group = "Moving Averages")]publicintMA3Period{get;set;}[Parameter("MA 3 Timeframe", DefaultValue = "Hour4", Group = "Moving Averages")]publicTimeFrameMA3Timeframe{get;set;}[Parameter("MA 3 Type", Group = "Moving Averages")]publicMovingAverageTypeMA3Type{get;set;}privateMovingAverage_ma1;privateMovingAverage_ma2;privateMovingAverage_ma3;protectedoverridevoidOnStart(){_ma1=Indicators.MovingAverage(MarketData.GetBars(MA1Timeframe).ClosePrices,MA1Period,MA1Type);_ma2=Indicators.MovingAverage(MarketData.GetBars(MA2Timeframe).ClosePrices,MA2Period,MA2Type);_ma3=Indicators.MovingAverage(MarketData.GetBars(MA3Timeframe).ClosePrices,MA3Period,MA3Type);}
Triển khai logic giao dịch
Tại thời điểm này, chúng ta có thể triển khai logic giao dịch. Chiến lược của chúng ta sẽ giữ vị thế mua khi tất cả các đường trung bình di động đang tăng và vị thế bán khi các đường trung bình di động đang giảm. Đây là mã cho tất cả logic phía mua.
Cuối cùng, chúng ta nên backtest cBot mới của mình. Chúng ta có thể thấy rằng cBot mở vị thế khi các đường trung bình di động được đồng bộ hóa theo cùng một hướng và tránh thị trường khi mỗi chỉ báo chỉ ra một hướng khác nhau.