3.5 Strategie-Framework-Template

Schriftsteller:Kleine Träume, Erstellt: 2017-01-19 16:04:24, aktualisiert: 2017-10-11 10:27:27

3.5 Strategie-Framework-Template


Mit Hilfe der Strategie Framework-Template können einfache Trendstrategien mit nur wenig Code erstellt werden, und wenn eine bestimmte Programmierbasis vorhanden ist, können Sie auch Strategien mit einem Hedging-Typ schreiben.

img

  • Schritte zur Verwendung:

    • 1. Wenn Sie diese Vorlage im Strategie-Platz oben finden, kopieren Sie sie in das Control Center Ihres Kontos.

    • 2. Verwenden Sie bei der Erstellung von Strategien die Schablonen der Schablonen der Schablonen der Schablonen der Schablonen des Schablons der Schablonen, wie in der folgenden Abbildung:

      img

  • Das ist der Code für die Test-Problematik-Frames-Template (siehe vorhandene Schablonen auf der Schreibseite für die Test-Problematik):

    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();  // 不用传参数。                             // 启动模板
    }
    
  • Einführung in die Exportfunktion:

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

    In der Politik müssen diese Zustände definiert werden, sonst kann die Vorlage nicht erkannt werden.

    • 1, $.Relation_Exchange_onTick ((p1, p2)); Parameter p1: Das erste Exchange-Objekt, z. B. exchanges[0], das die Konfigurationsseite des Roboters enthält. Parameter p2 : Eine benutzerdefinierte Transaktionslogikfunktion, wie z. B. die Funktion onTick1 in diesem Beispiel, kann den Funktionsnamen übertragen.

    • 2, $.TaskCmd ((p1, p2)); Parameter p1: Befehl, der an die Vorlage geschickt wird, z. B.: TASK_OPEN_LONG // Multi-Layer-Befehl Parameter p2: Die Anweisungen TASK_IDLE, TASK_COVER können nicht übermittelt werden. Andere Anweisungen müssen einem Zahlenparameter folgen, nämlich p2, der die Anzahl der zu handelnde Anweisungen angibt. Der Aufruf erfordert return $.TaskCmd ((p1, p2); wird in der onTick-Funktion zurückgegeben.

    • 3, $.Trend ((); Keine Parameter

    • 4, $.AddData ((p1, p2, p3)); // Hinzufügen des Inhalts zum Ende der Tabelle an der Statusleiste. Parameter p1 : der Index der Tabelle, die hinzugefügt werden soll, 0 ist der erste und 1 ist der zweite ((vorausgesetzt, dass die zweite Börse bereits mit $.Relation_Exchange_onTick verknüpft ist) Parameter p2 : Eigenschaftsname des hinzugefügten Inhalts, in diesem Fall werden die Daten des hinzugefügten Indikators in den Status-Tabellen angezeigt.

      Parameter p3 : String, die Daten, die angezeigt werden sollen, in die Parameterposition p3 umwandelt.

  • Schauen Sie sich die Codeanalyse für die Transaktionslogik-Funktion onTick1 in diesem Beispiel an:

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

    img

    img

  • Interaktive Funktionen der Strategie-Framework-Template

    Da die Vorlage keine Funktionen für Interaktionssteuerelemente enthält, können Interaktionssteuerelemente nur mit Bezug auf die Schablonen-Schablonen-Strategien hinzugefügt werden.Schritte: 1, wenn man in der Strategie Interaktion einen String-Typ-Controller hinzufügt, wird der Name des Controllers mit JS_code geschrieben, wie hier:img

    2. Dann klicken Sie auf die grüne Nummer und klicken Sie auf Speichern.img

    3. Alle Befehle werden angezeigt, wenn die Strategie ausgeführt wird, und können direkt kopiert und an die Strategie angezeigt werden.img

    4. Das Kommandoformat ist CMD ((index, CMD_STR, amount) Der erste Parameter: der Index ist der Name der Börse, an der die Börse betrieben wird, und die Position des Indizes ist 0, was bedeutet, dass die erste Börse betrieben wird, und so weiter. Der zweite Parameter: Befehle, die in der Tabelle oben angezeigt werden. Der dritte Parameter: Anzahl der zu handhabenden Operationen.

    Ein Beispiel:img

    Die anderen Befehle werden mit der gleichen Methode verwendet.

Die Transaktionslogik ist einfach geschrieben, bitte nicht auf der Tischplatte!


Mehr

Regie und StimmungWenn ich Zweifel habe, finde ich immer eine Richtung in der Drehbuchbeschreibung.

Kleine TräumeWenn es Hilfe gibt, dann ist es gut - wir machen Fortschritte!