3.5 Plantilla de marco de estrategias

El autor:Un sueño pequeño., Creado: 2017-01-19 16:04:24, Actualizado: 2017-10-11 10:27:27

3.5 Plantilla de marco de estrategias


Se pueden construir estrategias de tipo tendencia simple con muy poco código usando el modelo del marco de estrategias, y también se pueden escribir estrategias de tipo cobertura si se tiene una base de programación.

img

  • Los pasos a seguir:

    • 1, si se encuentra en la Plaza de la Estrategia, copia la plantilla en el centro de control de tu cuenta.

    • 2, cuando se escribe una política, se debe hacer referencia a la barra de la plantilla del marco de la política de la barra, como se muestra a continuación:

      img

  • Pegar el código de la plantilla de la plantilla del marco de la política de prueba de guiones (se ha seleccionado la plantilla de la plantilla del marco de la política de guiones en la página de la plantilla de la página de la política):

    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();  // 不用传参数。                             // 启动模板
    }
    
  • Las funciones de exportación:

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

    En la política, estos estados deben definirse, de lo contrario, la plantilla no puede ser reconocida.

    • 1, $.Relación_Exchange_onTick ((p1, p2)); Parámetro p1: Objeto de intercambio, por ejemplo, exchanges[0] es decir, la página de configuración del robot. El primer objeto de intercambio agregado. Parámetros p2: las funciones lógicas de transacción personalizadas, como la función onTick1 en el ejemplo, pueden transmitir el nombre de la función.

    • 2, $.TaskCmd ((p1, p2)); Parámetro p1: enviar a la plantilla una orden para ejecutarla, por ejemplo: TASK_OPEN_LONG // crear una orden multilingüe Parámetros p2 : Cuando se envía el comando TASK_IDLE, TASK_COVER puede no transmitir parámetros. Otros comandos requieren seguir un parámetro numérico, p2, que indica el número de operaciones. La llamada requiere return $.TaskCmd ((p1, p2); se devuelve en la función onTick.

    • En la actualidad, la mayoría de los usuarios de Twitter están en línea. Sin parámetros

    • 4, $.AddData ((p1, p2, p3)); // añade contenido al final de la tabla en el bar de estado. Parámetro p1 : índice de la tabla a agregar, 0 es el primero, 1 es el segundo ((suponiendo que el segundo intercambio ya esté asociado con $.Relation_Exchange_onTick) Parámetro p2 : nombre de la propiedad de contenido añadido, en este caso, los datos de los indicadores añadidos se muestran en la tabla de tablas de estado.

      Parámetro p3 : String, que convierte los datos que se quieren mostrar en una transmisión de la cadena a p3.

  • Veamos el análisis del código de la función onTick1 en el ejemplo de la lógica de transacción:

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

    img

    img

  • Funciones interactivas de las plantillas del marco estratégico

    Debido a que la plantilla no añade funciones de control interactivo, el control interactivo sólo se puede añadir en la política de la plantilla de la política de referencia de la política de la estructura de la plantilla, la adición también es relativamente sencilla.Los pasos: 1, cuando se agrega un control de tipo de cadena en la interacción de la política, el nombre del control se escribe JS_code como se muestra:img

    2, y luego haga clic en el número verde, y haga clic en Guardar.img

    3. Todas las instrucciones se muestran cuando se ejecuta la política y se pueden copiar directamente y enviar instrucciones a la política.img

    4, el formato del comando es CMD ((index, CMD_STR, amount) El primer parámetro: el índice indica el intercambio en el que se opera, la posición del índice se escribe 0, es decir, representa el primer intercambio en el que se opera, y así sucesivamente. El segundo parámetro: el comando que aparece en la cabecera del formulario. El tercer parámetro: el número de operaciones que se deben realizar.

    Por ejemplo:img

    Los otros comandos usan el mismo método.

¡La lógica de transacción está escrita de forma casual, no lo hagas!


Más.

La leyenda de los ritmosSiempre que tengo dudas, siempre encuentro la dirección en el texto del sueño, gracias

Un sueño pequeño.¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡