Sử dụng mẫu khung chính sách, bạn có thể xây dựng các chiến lược kiểu xu hướng đơn giản chỉ với một ít mã, và nếu bạn có một nền tảng lập trình, bạn có thể viết các loại chiến lược phòng ngừa.
1 Tìm mẫu này tại quảng trường chiến lược, như hình trên, và sao chép nó vào trung tâm kiểm soát tài khoản của bạn.
2/ Khi viết chính sách, hãy tham khảo các mẫu của khung chính sách như sau:
var TASK_IDLE = 0; // 空闲状态命令
var TASK_OPEN_LONG = 1; // 建多仓命令
var TASK_OPEN_SHORT = 2; // 建空仓命令
var TASK_ADD = 3; // 加仓命令
var TASK_ST = 4; // 止损命令
var TASK_COVER = 5; // 平仓命令
function onTick1() { // 趋势系统1: 均线 具体买卖逻辑实现
// MA
var records = _C(exchanges[0].GetRecords);
if(records.length < 11){
return $.TaskCmd(TASK_IDLE);
}
var ema_fast = TA.MA(records, 7);
var ema_slow = TA.MA(records, 10);
var data = "fast[-2]:" + ema_fast[ema_fast.length - 2] + " slow[-2]" + ema_slow[ema_slow.length - 2] + " fast[-1]:" + ema_fast[ema_fast.length - 1] + " slow[-1]:" + ema_slow[ema_slow.length - 1];
$.AddData(0, "MA", data);
if (ema_fast[ema_fast.length - 1] < ema_slow[ema_slow.length - 1] && ema_fast[ema_fast.length - 2] > ema_slow[ema_slow.length - 2]) {
return $.TaskCmd(TASK_COVER);
}else if(ema_fast[ema_fast.length - 1] > ema_slow[ema_slow.length - 1] && ema_fast[ema_fast.length - 2] < ema_slow[ema_slow.length - 2]){
return $.TaskCmd(TASK_OPEN_LONG, 0.5);
}
return $.TaskCmd(TASK_IDLE);
}
function onTick2() { // 趋势系统2:MACD 具体买卖逻辑实现
// MACD
var records = _C(exchanges[1].GetRecords);
if(records.length < 15){
return $.TaskCmd(TASK_IDLE);
}
var macd = TA.MACD(records);
var dif = macd[0];
var dea = macd[1];
var data = "dif[-2]:" + dif[dif.length - 2] + " dea[-2]" + dea[dea.length - 2] + " dif[-1]:" + dif[dif.length - 1] + " dea[-1]:" + dea[dea.length - 1];
$.AddData(1, "MACD", data);
if (dif[dif.length - 1] > dea[dea.length - 1] && dif[dif.length - 2] < dea[dea.length - 2]) {
return $.TaskCmd(TASK_COVER);
}else if(dif[dif.length - 1] < dea[dea.length - 1] && dif[dif.length - 2] > dea[dea.length - 2]){
return $.TaskCmd(TASK_OPEN_LONG, 0.8);
}
return $.TaskCmd(TASK_IDLE);
}
function main() {
$.Relation_Exchange_onTick(exchanges[0], onTick1); // 把 添加的第一个交易所 关联 趋势系统1 即 均线MA
$.Relation_Exchange_onTick(exchanges[1], onTick2); // 把 添加的第二个交易所 关联 趋势系统2 即 MACD
$.Trend(); // 不用传参数。 // 启动模板
}
TASK_IDLE = 0; // 空闲状态命令
TASK_OPEN_LONG = 1; // 建多仓命令
TASK_OPEN_SHORT = 2; // 建空仓命令
TASK_ADD = 3; // 加仓命令
TASK_ST = 4; // 止损命令
TASK_COVER = 5; // 平仓命令
Các trạng thái này phải được xác định trong chính sách, nếu không thì mẫu sẽ không thể nhận ra.
1、 $.Relation_Exchange_onTick(p1, p2); Tham số p1: đối tượng trao đổi, ví dụ như exchanges[0] là đối tượng giao dịch đầu tiên được thêm vào trang cấu hình robot. Đối số p2: Các hàm logic giao dịch tùy chỉnh như hàm onTick1 trong ví dụ, có thể được truyền vào tên hàm.
2、 \(.TaskCmd(p1, p2); Parameter p1: lệnh được gửi đến mẫu để thực hiện, ví dụ: TASK_OPEN_LONG // xây dựng lệnh đa kho Thuật ngữ p2: Khi gửi lệnh TASK_IDLE, TASK_COVER, bạn có thể không truyền tham số. Các lệnh khác cần phải đi kèm với một tham số số p2 để biểu thị số lượng hoạt động. Gọi cần return \).TaskCmd(p1, p2); trả về trong hàm onTick.
3、 $.Trend(); Không tham số
4 \(.AddData ((p1, p2, p3); // Thêm nội dung vào cuối bảng trạng thái Parameter p1 : chỉ số của bảng để thêm, 0 là đầu tiên, 1 là thứ hai ((giả sử rằng \).Relation_Exchange_onTick đã liên kết giao dịch thứ hai) Tham số p2: Tên thuộc tính của nội dung được thêm vào, trong trường hợp này, dữ liệu của chỉ số được thêm vào được hiển thị trong bảng trạng thái.
Thuyết tố p3: String, chuyển dữ liệu mà bạn muốn hiển thị thành String truyền vào p3 vị trí tham số này.
function onTick1() { // 趋势系统1: 均线 具体买卖逻辑实现
// MA
var records = _C(exchanges[0].GetRecords); // 用跟 onTick1 函数 绑定的交易所 exchanges[0] 对象 获取该交易所的K线数据。
if(records.length < 11){ // 判断K线数据是否足够长度
return $.TaskCmd(TASK_IDLE); // K线数据长度不足时,发送等待命令。程序则不执行下面的代码。
}
var ema_fast = TA.MA(records, 7); // 根据长度足够的K线数据计算 周期为7 的均线数据 即: 快线
var ema_slow = TA.MA(records, 10); // 计算 慢线
var data = "fast[-2]:" + ema_fast[ema_fast.length - 2] + " slow[-2]" + ema_slow[ema_slow.length - 2] + " fast[-1]:" + ema_fast[ema_fast.length - 1] + " slow[-1]:" + ema_slow[ema_slow.length - 1];
// 处理数据 组合为 字符串 data
$.AddData(0, "MA", data); // 向状态栏表格 添加数据显示
if (ema_fast[ema_fast.length - 1] < ema_slow[ema_slow.length - 1] && ema_fast[ema_fast.length - 2] > ema_slow[ema_slow.length - 2]) { // 平仓触发判断
return $.TaskCmd(TASK_COVER); // 发送平仓命令
}else if(ema_fast[ema_fast.length - 1] > ema_slow[ema_slow.length - 1] && ema_fast[ema_fast.length - 2] < ema_slow[ema_slow.length - 2]){ // 开仓触发判断
return $.TaskCmd(TASK_OPEN_LONG, 0.5); // 发送开多仓命令
}
return $.TaskCmd(TASK_IDLE); // 没有任何 触发,发送等待命令。
}
Vì mẫu không có tính năng thêm các điều khiển tương tác, điều khiển tương tác chỉ có thể được thêm vào các chính sách tham khảo các ngăn xếp chính sách khung mẫu, và việc thêm vào cũng dễ dàng hơn.
Bước 3:
1, thêm một điều khiển kiểu chuỗi vào tương tác chính sách, tên điều khiển sẽ được viết là JS_code như sau:
Sau đó, nhấp vào dấu thêm màu xanh lá cây, nhấp vào Save.
3/ Khi chiến lược đang chạy, tất cả các lệnh đều được hiển thị và có thể được sao chép trực tiếp để phát lệnh cho chiến lược.
4 , định dạng lệnh là CMD ((index, CMD_STR, amount) Parameter đầu tiên: index là giao dịch nào được điều hành, vị trí của index được viết là 0, nghĩa là giao dịch đầu tiên được điều hành, v.v. Parameter thứ hai: lệnh hiển thị ở đầu bảng. Parameter thứ ba: Số lượng hoạt động.
Ví dụ:
Các lệnh khác cũng được sử dụng như nhau.
Nếu BUG đề xuất thì xin chào mừng!