Cách quản lý cBot và chỉ báo bằng thuật toán VIDEO
Chức năng thuật toán quản lý thuật toán khác cho phép nhà giao dịch thêm cBot và chỉ báo vào biểu đồ bằng mã. Với khả năng này, họ có thể lập kế hoạch và phát triển các chiến lược giao dịch hiệu quả, thực hiện điều chỉnh động, thực thi nhiều chiến lược và áp dụng kiểm soát rủi ro tự động.
Trong bài viết này và video tương ứng, chúng tôi sẽ hướng dẫn bạn cách tạo và làm việc với cBot quản lý các thuật toán khác.
Thêm chỉ báo bằng cBot Trong ứng dụng Algo , mở tab cBot . Tìm kiếm và chọn mẫu Sample Trend cBot , sử dụng các đường trung bình di chuyển.
Xác định hai chỉ báo.
ChartIndicator _indicator1 ;
ChartIndicator _indicator2 ;
Thêm hai chỉ báo vào biểu đồ.
_indicator1 = Chart . Indicators . Add ( "Simple Moving Average" , SourceSeries , FastPeriods , MAType );
_indicator2 = Chart . Indicators . Add ( "Simple Moving Average" , SourceSeries , SlowPeriods , MAType );
Giao diện của chỉ báo có thể được tùy chỉnh thông qua cài đặt đường đầu ra của nó. Các tùy chọn có thể tùy chỉnh bao gồm màu sắc, độ dày và kiểu đường.
Chúng ta sẽ làm cho đường của chỉ báo đầu tiên có màu đỏ và dày.
_indicator1 . Lines [ 0 ]. Color = Color . Red ;
_indicator1 . Lines [ 0 ]. Thickness = 3 ;
Thao tác tương tự có thể được áp dụng để xóa chỉ báo khỏi biểu đồ bất cứ lúc nào. Chúng ta sẽ làm cho các thay đổi có hiệu lực khi nến thay đổi.
protected override void OnBarClosed ()
{
Chart . Indicators . Remove ( _indicator1 );
Chart . Indicators . Remove ( _indicator2 );
}
Bạn có thể sao chép toàn bộ mã bên dưới:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 using cAlgo.API ;
using cAlgo.API.Indicators ;
namespace cAlgo
{
[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None, AddIndicators = true)]
public class SampleTrendcBot : Robot
{
[Parameter("Quantity (Lots)", Group = "Volume", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
public double Quantity { get ; set ; }
[Parameter("MA Type", Group = "Moving Average")]
public MovingAverageType MAType { get ; set ; }
[Parameter("Source", Group = "Moving Average")]
public DataSeries SourceSeries { get ; set ; }
[Parameter("Slow Periods", Group = "Moving Average", DefaultValue = 10)]
public int SlowPeriods { get ; set ; }
[Parameter("Fast Periods", Group = "Moving Average", DefaultValue = 5)]
public int FastPeriods { get ; set ; }
private MovingAverage slowMa ;
private MovingAverage fastMa ;
private const string label = "Sample Trend cBot" ;
ChartIndicator _indicator1 ;
ChartIndicator _indicator2 ;
protected override void OnStart ()
{
fastMa = Indicators . MovingAverage ( SourceSeries , FastPeriods , MAType );
slowMa = Indicators . MovingAverage ( SourceSeries , SlowPeriods , MAType );
_indicator1 = Chart . Indicators . Add ( "Simple Moving Average" , SourceSeries , FastPeriods , MAType );
_indicator2 = Chart . Indicators . Add ( "Simple Moving Average" , SourceSeries , SlowPeriods , MAType );
_indicator1 . Lines [ 0 ]. Color = Color . Red ;
_indicator1 . Lines [ 0 ]. Thickness = 3 ;
}
protected override void OnBarClosed ()
{
Chart . Indicators . Remove ( _indicator1 );
Chart . Indicators . Remove ( _indicator2 );
}
protected override void OnTick ()
{
var longPosition = Positions . Find ( label , SymbolName , TradeType . Buy );
var shortPosition = Positions . Find ( label , SymbolName , TradeType . Sell );
var currentSlowMa = slowMa . Result . Last ( 0 );
var currentFastMa = fastMa . Result . Last ( 0 );
var previousSlowMa = slowMa . Result . Last ( 1 );
var previousFastMa = fastMa . Result . Last ( 1 );
if ( previousSlowMa > previousFastMa && currentSlowMa <= currentFastMa && longPosition == null )
{
if ( shortPosition != null )
ClosePosition ( shortPosition );
ExecuteMarketOrder ( TradeType . Buy , SymbolName , VolumeInUnits , label );
}
else if ( previousSlowMa < previousFastMa && currentSlowMa >= currentFastMa && shortPosition == null )
{
if ( longPosition != null )
ClosePosition ( longPosition );
ExecuteMarketOrder ( TradeType . Sell , SymbolName , VolumeInUnits , label );
}
}
private double VolumeInUnits
{
get { return Symbol . QuantityToVolumeInUnits ( Quantity ); }
}
}
}
Để xây dựng cBot, sử dụng phím tắt Ctrl + B hoặc nhấp vào Build .
Chuyển đến ứng dụng Giao dịch . Chọn biểu đồ EURUSD , nhấp vào biểu tượng cBot , tìm kiếm và chọn Sample Trend cBot .
Khi cửa sổ Thêm phiên bản xuất hiện, nhấp vào Áp dụng và sau đó khởi chạy cBot.
Bạn sẽ thấy hai đường trung bình di chuyển được sử dụng để giao dịch đã được thêm vào biểu đồ.
Khởi chạy cBot bằng cBot khác Chúng tôi sẽ trình bày cách quản lý một cBot thông qua một cBot khác. Lần này, chúng ta sẽ tạo một cBot trống mới từ đầu.
Chuyển đến ứng dụng Algo và nhấp vào nút Mới dưới tab cBot . Chọn tùy chọn Trống , nhập tên như Add cBots và sau đó nhấp vào Tạo .
Chúng ta bắt đầu bằng cách xác định hai đối tượng robot biểu đồ.
ChartRobot _robot1 ;
ChartRobot _robot2 ;
Sau đó, chúng ta thêm những robot đó vào biểu đồ trong phương thức OnStart().
_robot1 = Chart . Robots . Add ( "Sample Trend cBot" , 0.01 , MovingAverageType . Simple , Bars . ClosePrices , 10 , 5 );
_robot2 = Chart . Robots . Add ( "Sample Trend cBot" , 0.01 , MovingAverageType . Simple , Bars . ClosePrices , 12 , 7 );
Chúng ta cũng có thể thêm một trình xử lý sự kiện để in một thông báo mỗi khi cBot được khởi chạy.
Chart . Robots . RobotStarted += ChartRobots_RobotStarted ;
private void ChartRobots_RobotStarted ( ChartRobotStartedEventArgs obj )
{
Print ( "Robot Started" );
}
Viết một số logic bên trong phương thức OnBarClosed() để khởi chạy robot đầu tiên khi nến thay đổi, dừng nó và sau đó khởi chạy robot thứ hai vào nến tiếp theo.
1
2
3
4
5
6
7
8
9
10
11
12
13 protected override void OnBarClosed ()
{
if ( _robot1 . State == RobotState . Stopped )
{
_robot1 . Start ();
_robot2 . Stop ();
}
else if ( _robot1 . State == RobotState . Running )
{
_robot1 . Stop ();
_robot2 . Start ();
}
}
Bạn có thể sao chép toàn bộ mã bên dưới:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 using System ;
using cAlgo.API ;
using cAlgo.API.Collections ;
using cAlgo.API.Indicators ;
using cAlgo.API.Internals ;
namespace cAlgo.Robots
{
[Robot(AccessRights = AccessRights.None, AddIndicators = true)]
public class AddcBots : Robot
{
ChartRobot _robot1 ;
ChartRobot _robot2 ;
protected override void OnStart ()
{
_robot1 = Chart . Robots . Add ( "Sample Trend cBot" , 0.01 , MovingAverageType . Simple , Bars . ClosePrices , 10 , 5 );
_robot2 = Chart . Robots . Add ( "Sample Trend cBot" , 0.01 , MovingAverageType . Simple , Bars . ClosePrices , 12 , 7 );
Chart . Robots . RobotStarted += ChartRobots_RobotStarted ;
}
private void ChartRobots_RobotStarted ( ChartRobotStartedEventArgs obj )
{
Print ( "Robot Started" );
}
protected override void OnBarClosed ()
{
if ( _robot1 . State == RobotState . Stopped )
{
_robot1 . Start ();
_robot2 . Stop ();
}
else if ( _robot1 . State == RobotState . Running )
{
_robot2 . Start ();
_robot1 . Stop ();
}
}
protected override void OnStop ()
{
// Handle cBot stop here
}
}
}
Sau khi bạn xây dựng cBot, quay lại ứng dụng Giao dịch , tìm kiếm và chọn Add cBots và sau đó khởi chạy cBot.
Khi hộp thoại Yêu cầu cấp quyền xuất hiện, nhấp vào Cho phép .
Hai phiên bản của Sample Trend cBot sẽ xuất hiện trên biểu đồ.
Đợi nến đầu tiên hoàn thành và bạn sẽ thấy phiên bản đầu tiên của Sample Trend cBot tự động khởi chạy.
Ở nến tiếp theo, bạn sẽ thấy phiên bản thứ hai của Sample Trend cBot tự động khởi chạy.
Bạn có thể quan sát cách cBot thực thi logic của chúng ta và quản lý hai cBot khác dựa trên các điều kiện thay đổi.
Sửa đổi tham số cBot trong quá trình thực thi Bạn có thể cần thay đổi các tham số của cBot trong khi nó đang chạy. Ví dụ, bạn quyết định nhanh chóng cập nhật mã ngay lập tức sau khi nhận được tin tức tài chính hoặc cập nhật quan trọng.
Thay vì dừng và khởi động lại cBot của chúng ta, hãy sửa đổi ngay lập tức tham số SlowPeriods cho cBot đầu tiên.
else if ( _robot1 . State == RobotState . Running )
{
_robot1 . Stop ();
_robot1 . Parameters [ "SlowPeriods" ]. Value = ( int ) _robot2 . Parameters [ "SlowPeriods" ]. Value + 1 ;
_robot1 . Start ();
}
Bây giờ, chúng ta sẽ xây dựng lại cBot.
Bạn có thể sao chép toàn bộ mã bên dưới:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 using System ;
using cAlgo.API ;
using cAlgo.API.Collections ;
using cAlgo.API.Indicators ;
using cAlgo.API.Internals ;
namespace cAlgo.Robots
{
[Robot(AccessRights = AccessRights.None, AddIndicators = true)]
public class AddcBots : Robot
{
ChartRobot _robot1 ;
ChartRobot _robot2 ;
protected override void OnStart ()
{
_robot1 = Chart . Robots . Add ( "Sample Trend cBot" , 0.01 , MovingAverageType . Simple , Bars . ClosePrices , 10 , 5 );
_robot2 = Chart . Robots . Add ( "Sample Trend cBot" , 0.01 , MovingAverageType . Simple , Bars . ClosePrices , 12 , 7 );
Chart . Robots . RobotStarted += ChartRobots_RobotStarted ;
}
private void ChartRobots_RobotStarted ( ChartRobotStartedEventArgs obj )
{
Print ( "Robot Started" );
}
protected override void OnBarClosed ()
{
if ( _robot1 . State == RobotState . Stopped )
{
_robot1 . Start ();
_robot2 . Stop ();
}
else if ( _robot1 . State == RobotState . Running )
{
_robot1 . Stop ();
_robot1 . Parameters [ "SlowPeriods" ]. Value = ( int ) _robot2 . Parameters [ "SlowPeriods" ]. Value + 1 ;
_robot1 . Start ();
}
}
protected override void OnStop ()
{
// Handle cBot stop here
}
}
}
Chuyển đến ứng dụng Giao dịch và khởi chạy cBot để xem giá trị chỉ báo thay đổi như thế nào trên mỗi nến.
Tóm tắt Chúng tôi hy vọng bài viết này đã giúp bạn hiểu cách sử dụng thuật toán để khởi chạy, kiểm soát và quản lý các thuật toán khác.