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] 즉 로봇 구성 페이지. 추가된 첫 번째 거래소 객체. 변수 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은 두 번째 (($.Relation_Exchange_onTick로 두 번째 거래소를 이미 연관시켰을 경우) 파라미터 p2 : 추가된 내용의 속성 이름, 이 경우 추가된 지표의 데이터는 상태 테이블에서 나타난다.

      변수 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으로 표시되며, 즉 운영하는 첫 번째 거래소를 나타냅니다. 두 번째 매개 변수: 표 상단에 표시되는 명령어. 세 번째 매개 변수: 동작의 수.

    예를 들어:img

    다른 명령어들은 동일한 방법을 사용합니다.

거래 논리는 임의로 작성되어 있습니다, 실제를 사용하지 마십시오!


더 많은

조양제가 의심할 때마다, 저는 항상 꿈의 문장에서 방향을 찾을 수 있습니다. 감사합니다.

작은 꿈하하, 도움이 되길 바랍니다 ~ 함께 발전하세요!