Bỏ qua

Cách tạo cBot cho cTrader trong 5 phút

Trong bài viết này và video tương ứng, chúng tôi sẽ mô tả cách nhanh chóng để tạo một cBot trong cTrader Algo. cBot mà chúng ta sẽ tạo sẽ triển khai một chiến lược giao dịch đơn giản gọi là Three white soldiers và three black crows. Bạn có thể tìm hiểu thêm về chiến lược này trong cơ sở kiến thức của chúng tôi.

Trước khi làm theo hướng dẫn của chúng tôi, hãy đảm bảo bạn đã tải xuống và cài đặt ứng dụng cTrader Windows hoặc Mac từ trang web chính thức. Khởi chạy nó và điều hướng đến phần cTrader Algo. Bạn có thể tìm thấy nó trong bảng điều khiển bên trái. Nhấp vào tab Algo, và phần cTrader Algo sẽ xuất hiện.

Thêm cBot mới

Nhấp vào nút New trong cTrader Algo để bắt đầu tạo một cBot mới. Nhập tên, chọn ngôn ngữ lập trình giữa C# và Python và tiếp tục cho đến khi trình chỉnh sửa mã mở ra.

Thêm cài đặt cBot

Trước khi chúng ta bắt đầu triển khai chiến lược giao dịch, chúng ta sẽ xem xét các tham số và phương thức cơ bản của cBot. Bạn cũng có thể tham khảo tài liệu của chúng tôi để làm quen với chức năng của các tham số và phương thức khác nhau.

  • Tham số cBot – cho phép bạn định nghĩa các thuộc tính có thể cấu hình như khối lượng giao dịch hoặc khoảng cách cắt lỗ/chốt lời.

  • Phương thức cBot – xác định cách cBot của bạn hoạt động khi các sự kiện cụ thể xảy ra. Có bốn sự kiện chính bạn cần xử lý khi phát triển một cTrader cBot, và mỗi sự kiện được quản lý bởi một phương thức tương ứng do cTrader cung cấp. Các phương thức này là OnStart(), OnTick(), OnBar(), OnStop() của C# và on_start(), on_tick(), on_bar_closed(), on_stop() của Python. Lưu ý rằng phương thức OnBar() của C# và on_bar_closed() của Python không được bao gồm trong mẫu mã mặc định.

Bảng sau đây định nghĩa chi tiết bốn phương thức này.

C# Python Mục đích
OnStart() on_start() Được kích hoạt khi một phiên bản cBot bắt đầu hoạt động. Nó được sử dụng để khởi tạo bất kỳ biến nào bạn dự định sử dụng trong cBot của mình như chỉ báo, bộ đếm, trình xử lý sự kiện hoặc bộ hẹn giờ.
OnTick() on_tick() Được kích hoạt trên mỗi tick (cập nhật giá) trên biểu đồ giao dịch mà phiên bản cBot đang chạy. Thường được sử dụng cho logic vào lệnh hoặc thoát lệnh nhanh dựa trên dữ liệu thời gian thực. Bên trong phương thức này, bạn có thể lập trình các điều kiện vào lệnh và thoát lệnh tùy chỉnh cũng như bất kỳ chức năng phụ trợ nào khác mà bạn cần chạy khi một tick mới đến.
OnBar() on_bar_closed() Được kích hoạt khi đóng mỗi nến. Bên trong phương thức này, bạn có thể lập trình các điều kiện vào lệnh và thoát lệnh tùy chỉnh hoặc bất kỳ chức năng nào khác cần chạy khi mỗi nến mới được hình thành.
OnStop() on_stop() Được gọi khi cBot dừng lại. Được sử dụng để thực hiện các thao tác cuối cùng như đóng vị thế, lưu trạng thái và nhiều hơn nữa

Thêm logic giao dịch

Bây giờ chúng ta sẽ thêm mã cho chiến lược giao dịch của mình. cBot của chúng ta nên mở một vị thế mua khi ba nến xanh được hình thành trên biểu đồ và một vị thế bán khi có ba nến đỏ liên tiếp.

Đầu tiên, chúng ta cần xác định các tham số của cBot. Các tham số này sẽ có thể tùy chỉnh hoàn toàn từ giao diện người dùng cTrader. Chúng ta sẽ xác định ba tham số trong cBot của mình.

  1. Khối lượng của mỗi giao dịch.
  2. Cắt lỗ tính bằng pip.
  3. Chốt lời tính bằng pip.

Dán mã sau vào trình soạn thảo mã của bạn ngay bên dưới dấu ngoặc nhọn sau khai báo lớp (public class NewcBot : Robot)

1
2
3
4
5
6
7
8
[Parameter(DefaultValue = 1000)]
public double Volume { get; set; }
        
[Parameter(DefaultValue = 10)]
public double TakeProfit { get; set; }
        
[Parameter(DefaultValue = 10)]
public double StopLoss { get; set; }

Ghi chú

Python cBots 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.

1
2
3
4
5
6
7
8
[Parameter(DefaultValue = 1000)]
public double Volume { get; set; }
        
[Parameter(DefaultValue = 10)]
public double TakeProfit { get; set; }
        
[Parameter(DefaultValue = 10)]
public double StopLoss { get; set; }

Bây giờ chúng ta cần triển khai logic đằng sau chiến lược giao dịch của mình. Dán mã sau vào phương thức OnBar() hoặc on_bar_closed() của bạn. Hãy nhớ rằng phương thức này được gọi mỗi khi một nến mới được hình thành.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
//Three White Soldiers
if(Bars.ClosePrices.Last(1) > Bars.OpenPrices.Last(1) 
&& Bars.ClosePrices.Last(2) > Bars.OpenPrices.Last(2)  
&& Bars.ClosePrices.Last(3) > Bars.OpenPrices.Last(3))
{
    ExecuteMarketOrder(TradeType.Buy, SymbolName, Volume, "", StopLoss, TakeProfit);
}
            
//Three Black Crows
if(Bars.ClosePrices.Last(1) < Bars.OpenPrices.Last(1) 
&& Bars.ClosePrices.Last(2) < Bars.OpenPrices.Last(2)  
&& Bars.ClosePrices.Last(3) < Bars.OpenPrices.Last(3))
{
    ExecuteMarketOrder(TradeType.Sell, SymbolName, Volume, "", StopLoss, TakeProfit);
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Three White Soldiers
if (close.Last(1) > open_.Last(1) and
    close.Last(2) > open_.Last(2) and
    close.Last(3) > open_.Last(3)):
    api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, api.Volume, "", api.StopLoss, api.TakeProfit)

# Three Black Crows
elif (close.Last(1) < open_.Last(1) and
      close.Last(2) < open_.Last(2) and
      close.Last(3) < open_.Last(3)):
    api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, api.Volume, "", api.StopLoss, api.TakeProfit)

Bây giờ chúng ta sẽ xem xét mã kỹ hơn. cTrader cung cấp quyền truy cập vào các nến lịch sử của biểu đồ, cho phép chúng ta kiểm tra xem ba nến cuối cùng có phải tất cả đều xanh hoặc tất cả đều đỏ hay không. Trong phương thức OnBar() của C# và on_bar_closed() của Python ở trên, đầu tiên chúng ta kiểm tra xem ba thanh cuối cùng có phải là tất cả màu xanh lá cây hay không. Sau đó, chúng ta đánh giá xem những nến này có phải tất cả đều đỏ không.

Nếu một trong hai điều kiện là đúng, chúng ta đặt một lệnh thị trường bằng phương thức ExecuteMarketOrder(). Nó nhận một số đầu vào (đối số), với những đầu vào quan trọng nhất là hướng giao dịch, cặp tiền tệ, khối lượng giao dịch, cắt lỗ và chốt lời.

Trong trường hợp của chúng ta, hướng lệnh (TradeType.Buy, TradeType.Sell) được xác định bởi các điều kiện của chiến lược giao dịch. Tên ký hiệu được lấy trực tiếp từ biểu đồ mà cBot của chúng ta đang chạy SymbolName. Khối lượng giao dịch, mức cắt lỗ và mức chốt lời (C#'s Volume, StopLoss, TakeProfit và Python's VolumeInLots, StopLossInPips, TakeProfitInPips) đều được lấy từ các tham số cBot mà chúng ta đã xác định.

Xây dựng và chạy cBot

Bây giờ chúng ta cần kiểm tra xem cBot của mình có được xây dựng thành công hay không. Theo mặc định, cửa sổ kết quả xây dựng nằm ngay bên dưới trình soạn thảo mã. Nếu bạn không thấy nó, hãy nhấp vào nút Layout ở thanh trên cùng của giao diện người dùng cTrader và chọn Build Result. Phím tắt cho hành động này là Ctrl + W

Sau đó, nhấp vào nút Build nằm ở thanh trên cùng của giao diện người dùng cTrader. Ngoài ra, bạn có thể nhấp chuột phải vào cBot của mình và nhấp vào Build trong menu mới xuất hiện, hoặc chỉ cần nhấn Ctrl + B.

Image title

Nếu việc xây dựng thành công, bạn sẽ thấy một thông báo màu xanh lá cây trong khu vực Build Result ở dưới cùng của trình soạn thảo mã.

Image title

Ngược lại, nếu có vấn đề với mã của bạn, bạn sẽ thấy một thông báo màu đỏ và bản tóm tắt chi tiết về tất cả các lỗi xây dựng.

Image title

Sau khi cBot của bạn đã được xây dựng thành công, bạn có thể bắt đầu sử dụng nó. Tất cả những gì bạn cần làm là thêm một phiên bản trên biểu đồ giao dịch. Để làm điều này, chỉ cần nhấp vào biểu tượng + ở bên phải tên cBot của bạn. Bạn sẽ thấy danh sách tất cả các cặp tiền tệ mà bạn có thể chạy cBot của mình.

Image title

Chúng ta sẽ chọn EURUSD. Sau khi bạn chọn một cặp tiền tệ, một phiên bản cBot mới sẽ được thêm vào. Bạn sẽ thấy một mục mới trong danh sách cBot với tên cặp tiền tệ và khung thời gian bạn muốn giao dịch.

Bạn cũng nên thấy các tham số bạn đã mã hóa trong tab Parameters ngay bên dưới biểu đồ giao dịch.

Image title

Bạn có thể thay đổi các tham số này theo ý muốn hoặc chỉ cần để chúng ở giá trị mặc định.

Ngoài ra, bạn sẽ thấy một nút Play ở phía trên của biểu đồ EURUSD.

Image title

Để khởi chạy phiên bản của bạn, hãy nhấn nút này. Ngoài ra, một bản sao của nút này cũng nằm ở bên phải phiên bản của bạn trong danh sách cBot ở bên trái. Một trong hai nút này sẽ khởi động cBot.

Sau khi nhấp vào một trong hai nút, bạn sẽ thấy nó chuyển sang màu cam, có nghĩa là một phiên bản của cBot của chúng ta hiện đang hoạt động. Trong tab Log, bạn cũng sẽ thấy một dòng mới cho biết rằng cBot hiện đã bắt đầu.

Backtest cBot

cBot của chúng ta có thể mất một thời gian dài để mở một vị thế trên biểu đồ giao dịch thực. Chúng ta sẽ chạy một backtest nhanh để xem nó hoạt động trên dữ liệu lịch sử. Để làm điều này, hãy mở tab Backtest.

Image title

Sử dụng thanh trượt lịch gần phía trên cùng của màn hình để chọn phạm vi ngày mà bạn muốn sử dụng cho backtesting. Bật cờ Visual mode để theo dõi kết quả backtesting khi chúng xảy ra.

Chúng ta sẽ di chuyển thanh trượt lùi lại một tháng. Nhấp vào nút Play để khởi chạy cBot trên dữ liệu lịch sử đã chọn.

Sau đó, bạn sẽ có thể thấy các vị thế mới được mở và/hoặc đóng trong tab ngay bên dưới biểu đồ giao dịch và bên phải phần Parameters. Cụ thể, sau khi phát hiện một trong hai mẫu mà chúng ta đã mã hóa, cBot sẽ đặt lệnh mua hoặc bán.

Chạy backtest là một cách hữu ích để phân tích xem cBot của bạn có hoạt động chính xác hay không.

Tóm tắt

Chúng tôi hy vọng rằng bài viết này đã hữu ích trong việc chứng minh cách bạn có thể tạo một robot giao dịch tự động bằng cTrader.

Image title