3.5 Mẫu khuôn khổ chiến lược

Tác giả:Giấc mơ nhỏ, Tạo: 2017-01-19 16:04:24, Cập nhật: 2017-10-11 10:27:27

3.5 Mẫu khuôn khổ chiến lược


Sử dụng các mẫu khuôn khổ chiến lược, bạn có thể xây dựng các chiến lược xu hướng đơn giản chỉ với một ít mã, và nếu có một nền tảng lập trình nhất định, bạn cũng có thể viết các chiến lược loại rủi ro.

img

  • Cách sử dụng:

    • 1, Nếu bạn tìm thấy mẫu này ở quảng trường chiến lược ở trên, hãy sao chép vào trung tâm điều khiển tài khoản của bạn.

    • 2, Đánh giá khi viết chính sách.

      img

  • Đặt mã chính sách của mẫu khuôn khổ chính sách thử nghiệm (đã được viết trên trang chính sách):

    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();  // 不用传参数。                             // 启动模板
    }
    
  • Hướng dẫn về hàm xuất:

    • Chỉ thị:
    TASK_IDLE = 0;          // 空闲状态命令
    TASK_OPEN_LONG = 1;     // 建多仓命令
    TASK_OPEN_SHORT = 2;    // 建空仓命令
    TASK_ADD = 3;           // 加仓命令
    TASK_ST = 4;            // 止损命令
    TASK_COVER = 5;         // 平仓命令
    

    Trong chính sách, các trạng thái này phải được xác định, nếu không mẫu sẽ không thể nhận ra.

    • 1, $.Relation_Exchange_onTick ((p1, p2)); Parameter p1 : đối tượng giao dịch, ví dụ như exchanges[0] i.e. trang cấu hình robot. Đối tượng giao dịch đầu tiên được thêm vào. Parameter p2: Các hàm logic giao dịch tùy chỉnh như hàm onTick1 trong ví dụ, có thể truyền tên hàm.

    • 2, $.TaskCmd ((p1, p2)); Parameter p1 : Gửi lệnh thực hiện template, ví dụ: TASK_OPEN_LONG // tạo lệnh nhiều kho Các lệnh khác cần phải theo một tham số số, p2, cho biết số lượng cần thực hiện. Gọi đòi hỏi 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 vào thanh trạng thái. Các tham số p1 : chỉ mục của bảng để thêm, 0 là đầu tiên, 1 là thứ hai ((giả sử bạn đã liên kết với sàn giao dịch thứ hai bằng $.Relation_Exchange_onTick) Parameter 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.

      Phương thức p3: String, chuyển đổi dữ liệu bạn muốn hiển thị thành một chuỗi truyền vào p3 vị trí của tham số này.

  • Hãy xem phân tích mã của hàm onTick1 trong ví dụ Logic giao dịch:

    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);               // 没有任何 触发,发送等待命令。
    }
    
  • Chạy cho thấy:

    img

    img

  • Khả năng tương tác của mẫu framework chiến lược

    Bởi vì mẫu không thêm chức năng điều khiển tương tác, điều khiển tương tác chỉ có thể được thêm trên các chính sách của mẫu trong khuôn khổ.Các bước: 1, trong giao tiếp chính sách thêm một điều khiển kiểu chuỗi, điều khiển tên được viết là JS_code như sau:img

    2, sau đó nhấp vào thêm màu xanh lá cây, nhấp vào lưu.img

    3, Khi chính sách đang chạy, tất cả các lệnh được hiển thị và có thể được sao chép trực tiếp, gửi lệnh cho chính sách.img

    4, định dạng lệnh là CMD ((index, CMD_STR, amount) Các tham số đầu tiên: chỉ số là chỉ thị giao dịch nào, vị trí của chỉ số viết 0, nghĩa là đại diện cho giao dịch đầu tiên, và như vậy. Các tham số thứ hai: lệnh hiển thị ở đầu biểu mẫu. Điều thứ ba: Số lượng các thao tác cần thực hiện.

    Ví dụ:img

    Các lệnh khác sử dụng phương pháp tương tự.

Những lời đề nghị của bạn sẽ được hoan nghênh!


Thêm nữa

Phong cách âm nhạcMỗi khi tôi nghi ngờ, tôi luôn tìm được hướng dẫn trong bài viết tổng hợp của giấc mơ, cảm ơn.

Giấc mơ nhỏXin hãy cùng nhau tiến lên.