3.5 Templat Rangka Kerja Strategi

Penulis:Mimpi kecil, Dicipta: 2017-01-19 16:04:24, Dikemas kini: 2017-10-11 10:27:27

3.5 Templat Rangka Kerja Strategi


Dengan menggunakan templat kerangka strategi, anda boleh membina strategi trend sederhana dengan hanya sedikit kod, dan jika anda mempunyai asas pengaturcaraan, anda juga boleh menulis strategi jenis lindung nilai.

img

  • Langkah Penggunaan:

    • 1. Jika anda dapat mencari templat ini di Dataran Dasar di atas, tiru ke Pusat Kawalan akaun anda.

    • 2. Menggunakan rujukan semasa menulis dasar.

      img

  • Tempelkan kod dasar pada templat templat kerangka dasar untuk ujian (klik pada templat templat yang telah ditulis pada halaman dasar untuk memilih templat templat kerangka dasar):

    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();  // 不用传参数。                             // 启动模板
    }
    
  • Fungsi Pengeksport:

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

    Dalam dasar, keadaan ini mesti ditakrifkan, jika tidak, templat tidak dapat dikenali.

    • 1, $.Relation_Exchange_onTick ((p1, p2)); Parameter p1: Objek bursa, seperti exchanges[0] iaitu halaman konfigurasi bot Objek bursa pertama yang ditambahkan. Parameter p2: Fungsi logik urus niaga yang disesuaikan seperti fungsi onTick1 dalam contoh, boleh dihantar dengan nama fungsi.

    • 2, $.TaskCmd ((p1, p2); Parameter p1 : menghantar arahan yang akan dilaksanakan pada templat, seperti: TASK_OPEN_LONG // membina perintah pelbagai gudang Parameter p2: Perintah TASK_IDLE, TASK_COVER boleh dihantar tanpa parameter. Perintah lain perlu mengikuti parameter kuantiti iaitu p2, yang menunjukkan jumlah yang akan dilakukan. Panggilan memerlukan return $.TaskCmd ((p1, p2); dikembalikan dalam fungsi onTick.

    • 3, $.Trend ((); Tiada parameter

    • 4. $.AddData ((p1, p2, p3); // Ditambah pada hujung jadual pada bar status. Parameter p1 : indeks jadual yang akan ditambahkan, 0 untuk yang pertama, 1 untuk yang kedua ((asalkan pertukaran kedua telah dikaitkan dengan $.Relation_Exchange_onTick) Parameter p2 : Nama sifat yang ditambahkan, dalam kes ini, data yang ditambahkan untuk penunjuk ditunjukkan dalam jadual status. (MA dan MACD)

      Parameter p3 : String, mengubah data yang ingin dipaparkan menjadi strings yang dihantar ke p3

  • Lihat analisis kod untuk logik urus niaga pada contoh fungsi onTick1:

    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);               // 没有任何 触发,发送等待命令。
    }
    
  • Berjalan menunjukkan:

    img

    img

  • Fungsi interaktif templat kerangka strategi

    Oleh kerana templat tidak mempunyai keupayaan untuk menambah kawalan interaksi, kawalan interaksi hanya boleh ditambahkan dengan merujuk kepada strategi templat templat kerangka kerja.Langkah: 1, Untuk menambah kawalan jenis string dalam interaksi dasar, nama kawalan akan ditulis sebagai JS_code seperti berikut:img

    2, kemudian klik nombor tambahan hijau, klik Simpan.img

    3. Semua arahan yang dipaparkan semasa menjalankan dasar boleh disalin terus dan dihantar kepada dasar.img

    4, format arahan adalah CMD ((index, CMD_STR, amount) Parameter pertama: indeks menunjukkan mana bursa yang beroperasi, kedudukan indeks ditulis 0, iaitu mewakili Bursa pertama yang beroperasi, dan sebagainya. Parameter kedua: perintah yang dipaparkan di bahagian atas borang. Parameter ketiga: Jumlah operasi yang perlu dilakukan.

    Contohnya:img

    Perintah lain menggunakan kaedah yang sama.

Logika transaksi ditulis secara serba boleh, jangan main-main!


Lebih lanjut

Ritual Yang YangSetiap kali saya mempunyai keraguan, saya selalu dapat mencari panduan dalam teks impian, terima kasih

Mimpi kecil^_^ Hahahaha, boleh membantu ~ maju bersama-sama!