3.5 Modèle de cadre stratégique

Auteur:Le petit rêve, Créé: 2017-01-19 16:04:24, Mis à jour: 2017-10-11 10:27:27

3.5 Modèle de cadre stratégique


Les modèles de framework de stratégie permettent de construire des stratégies de type tendance simples avec peu de code, et de créer des stratégies de type couverture si une certaine base de programmation est disponible.

img

  • Les étapes:

    • Si vous trouvez ce modèle dans la place stratégique ci-dessus, vous pouvez le copier dans le centre de contrôle de votre compte.

    • 2° Réfléchissez à l'écriture de votre stratégie en utilisant le modèle de la plateforme de rédaction de votre stratégie, illustré ci-dessous:

      img

  • Coller le code de la police dans le modèle de cadre de la police de test (en cliquant sur le modèle de la police de cadre de la police de test dans le modèle de la page de la police):

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

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

    Dans la politique, ces états doivent être définis, sinon le modèle ne peut pas être identifié.

    • 1, $.Relation_Exchange_onTick ((p1, p2)); Paramètre p1 : le premier objet d'échange ajouté, par exemple exchanges[0], c'est-à-dire la page de configuration du robot. Paramètre p2 : les fonctions de logique de transaction personnalisées, telles que la fonction onTick1 dans l'exemple, peuvent être passées au nom de la fonction.

    • 2, $.TaskCmd ((p1, p2)); Paramètre p1: commandes envoyées à un modèle pour l'exécution, par exemple: TASK_OPEN_LONG // commandes de création de plusieurs ensembles Paramètre p2: les commandes TASK_IDLE, TASK_COVER peuvent être envoyées sans paramètre. D'autres commandes doivent suivre un paramètre numérique, p2, indiquant le nombre d'opérations à effectuer. L'appel nécessite le retour $.TaskCmd ((p1, p2); est retourné dans la fonction onTick.

    • Le site officiel de l'organisation est le site officiel de l'organisation. Pas de paramètres

    • 4, $.AddData ((p1, p2, p3)); // Ajout de contenu à la fin de la table dans la barre d'état. Paramètre p1 : l'index de la table à ajouter, 0 pour la première, 1 pour la deuxième (supposons que la seconde échange soit associée à $.Relation_Exchange_onTick) Paramètre p2 : nom de l'attribut du contenu ajouté, dans ce cas, les données de l'indicateur ajouté sont affichées dans les tableaux de la barre d'état.

      Paramètre p3 : chaîne, transforme les données que vous voulez afficher en chaîne et passe-les à la position du paramètre p3.

  • Voir l'analyse de code de la fonction onTick1 dans l'exemple de logique de transaction:

    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);               // 没有任何 触发,发送等待命令。
    }
    
  • Il s'agit de:

    img

    img

  • Fonctionnalités d'interaction des modèles du cadre stratégique

    Comme le modèle n'a pas de fonctionnalité d'ajout de contrôles interactifs, les contrôles interactifs ne peuvent être ajoutés qu'en référence à la stratégie du modèle de la stratégie de la stratégie de la stratégie de la stratégie de la stratégie de la stratégie de la stratégie de la stratégie de la stratégie de la stratégie de la stratégie de la stratégie de la stratégie de la stratégie de la stratégie de la stratégie de la stratégie de la stratégie de la stratégie de la stratégie.Les étapes: 1, lorsque vous ajoutez un contrôle de type chaîne dans l'interaction de stratégie, le nom du contrôle est écrit JS_code comme ci-dessous:img

    2, puis cliquez sur le signe vert, puis cliquez sur sauvegarder.img

    3° Toutes les commandes affichées lors de l'exécution de la politique peuvent être copiées directement et envoyées à la politique.img

    4, le format de commande est CMD ((index, CMD_STR, amount) Le premier paramètre: l'index indique l'échange sur lequel l'opération est effectuée, l'index est placé à 0, ce qui signifie que l'opération est effectuée sur le premier échange, etc. Le deuxième paramètre: les commandes affichées en haut du formulaire. Le troisième paramètre: le nombre d'opérations à effectuer.

    Par exemple:img

    Les autres commandes utilisent la même méthode.

La logique de transaction est écrite de façon aléatoire, ne la mettez pas sur le disque!.


Plus de

Le rythmeChaque fois que j'ai des doutes, j'arrive à trouver une direction dans le récapitulatif des rêves.

Le petit rêveJ'espère que vous avez aidé à faire avancer les choses.