資源の読み込みに... 荷物...

3.5 戦略フレームワークのテンプレート

作者: リン・ハーン発明者 量化 - 微かな夢, 作成日: 2017-01-19 16:04:24, 更新日: 2017-10-11 10:27:27

3.5 戦略フレームワークのテンプレート


戦略フレームワークのテンプレートを使用して,ほんの少しのコードで単純な傾向型戦略を構築し,特定のプログラミング基盤があれば,ヘッジ型戦略も書ける.

img

  • ステップ:

    • 1、上図の戦略広場で見つけられるこのテンプレート,自分のアカウントのコントロールセンターにコピーします.

    • 2, 策略を書くときに参照する 策略フレームワークのテンプレートの 図は以下のとおり:

      img

  • 策略フレームワークテンプレートのテンプレートのコードを貼る (すでに策略ページに作成されているテンプレートのテンプレートのテンプレートの選択をクリックします):

    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;         // 平仓命令
    

    策略では,これらの状態が定義されなければならない.そうでなければ,テンプレートは認識できない.

    • 1、 $.Relation_Exchange_onTick ((p1, p2)); リンクをクリックする 参数 p1 : 取引所オブジェクト,例えば exchanges[0] i.e. ロボット設定ページ 追加された最初の取引所オブジェクト. パラグメント p2:例の onTick1 のようなカスタムトランザクションロジック関数は,関数名を入力できます.

    • 2、 $.TaskCmd ((p1, p2)); パラグメント p1 : テンプレートに実行される命令を送信します.例えば: TASK_OPEN_LONG // 複数のハッシュを構成するコマンド パラグメント p2: TASK_IDLE,TASK_COVER コマンドを送信するときにパラグメントを送信できない.他のコマンドは,数値パラグメント p2 に従う必要があります. 呼び出しには return $.TaskCmd ((p1, p2); を onTick 函数で返す.

    • 3、 $.トレンド (((); パラメータなし

    • 4、 $.AddData ((p1, p2, p3); // 状態バーに表の末尾に追加する 内容、 パラグメント p1 :追加する表のインデックス,0が最初の1が2番目の (($.Relation_Exchange_onTickで2番目の取引所に関連付けられている場合) パラグメント p2 : 添加された内容の属性名,この例では,添加された指標のデータが状態表で表示される。 (MAとMACD)

      参数 p3 : 文字列,表示したいデータを文字列に変換し,p3 の参数位置に転送します.

  • 取引論理の例の 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);               // 没有任何 触发,发送等待命令。
    }
    
  • ランニングは表示:

    img

    img

  • 戦略フレームワークのテンプレートのインタラクティブ機能

    テンプレートにはインタラクティブコントロールの機能が追加されていないため,インタラクティブコントロールは,引用するキットポリシーフレームワークのテンプレートキットのポリシーにのみ追加できます.ステップ: 1, 策略インタラクションに文字列型のコントロールを追加すると,コントロールの名前は JS_code と表示されます.img

    2、緑色の付加数字をクリックして保存をクリックします.img

    3. 実行中のすべてのコマンドが表示され,直接コピーしてポリシーに命令を送ることができます.img

    4, コマンド形式はCMD ((index, CMD_STR, amount) 最初のパラメータ:インデックスは,どの取引所を操作するか指し示し,インデックス位置は0で表示される.つまり,最初の取引所を操作することを指し示し,このように推移する. 2番目のパラメータ:表の先頭に表示されるコマンド. 3番目のパラメータは,操作する数のことです.

    例えば:img

    他のコマンドは同じ方法で使います.

取引の論理は随意に書かれているので,実用化しないでください.


もっと

調陽疑問を抱くたびに,私は夢の文献で方向性を見出すことができました.

発明者 量化 - 微かな夢ありがとう! ありがとう! ありがとう! ありがとう! ありがとう! ありがとう!