Die Ressourcen sind geladen. Beförderung...

FMZ-API-Anweisungen

Schriftsteller:Null, Erstellt: 2020-04-20 10:19:00, Aktualisiert: 2023-04-12 14:44:56

xchangeList()

GetExchangeList()gibt die Liste der unterstützten Austauschstellen und die erforderlichen Konfigurationsinformationen zurück.

  • Parameter Keine

  • Rücklaufwert

    {
        "code": 0,
        "data": {
            "result": {
                "exchanges": [{
                    "website": "https://www.huobi.pro/",
                    "name": "Huobi",
                    "priority": 1,
                    "meta": "[{"desc": "Access Key", "required": true, "type": "string", "name": "AccessKey", "label": "Access Key"}, {"encrypt": true, "name": "SecretKey", "required": true, "label": "Secret Key", "type": "password", "desc": "Secret Key"}]",
                    "eid": "Huobi",
                    "logo": "huobi.png",
                    "id": 1
                }, {
                    "website": "https://www.kex.com/",
                    "name": "KEX",
                    "priority": -99,
                    "meta": "[{"desc": "Access Key", "required": true, "type": "string", "name": "AccessKey", "label": "Access Key"}, {"encrypt": true, "name": "SecretKey", "required": true, "label": "Secret Key", "type": "password", "desc": "Secret Key"}, {"encrypt": true, "required": true, "type": "password", "name": "Password", "label": "Trading Password"}]",
                    "eid": "KEX",
                    "logo": "",
                    "id": 43
                }, 
    
                 ...
          
                ]
            },
            "error": null
        }
    }
    

DeleteNode (nicht)

DeleteNode(Nid)Löscht den Dockerknoten (IDistNid) entspricht derAPI KEYauf Anfrage des Kontos der FMZ Quant Trading Plattform.

  • ParameterNidist des ganzen Typs, nämlich der DockerID.

  • Rückgabewert

    {
        "code":0,
        "data":{
            "result":true,
            "error":null
        }
    }
    

DeleteRobot(...)

DeleteRobot(RobotId, DeleteLogs)Löscht den Roboter mit der angegebenen ID (Roboter)ID: RobotId) entspricht derAPI KEYim Antrag unter dem FMZ Quant-Konto.

  • ParameterRobotIdist des ganzen Typs, nämlich der RoboterIDwird gestrichen.DeleteLogsist von Boole-Typ;DeleteLogsdie Entscheidung zu treffen, ob das Protokoll gelöscht wird oder nicht;trueAngabe, dass das Protokoll gelöscht wird.

  • Rückgabewert

    // Return value after successful deletion
    {
        "code": 0,
        "data": {
            "result": 0,
            "error": null
        }
    }
    

GetStrategyList (siehe unten)

GetStrategyList()Erhält die Strategieinformationen, die derAPI KEYauf Anfrage des Kontos der FMZ Quant Trading Plattform.

  • Parameter Keine

  • Rücklaufwert

    {
        "code": 0,
        "data": {
            "result": {
                "strategies": [{
                    "category": 0,
                    "username": "yifidslei",
                    "is_owner": true,
                    "name": "fmz simulation market test strategy",
                    "language": 0,
                    "hasToken": false,
                    "args": "[]",
                    "is_buy": false,
                    "public": 0,
                    "last_modified": "2018-01-18 12:36:03",
                    "date": "2018-01-17 09:19:32",
                    "forked": 0,
                    "id": 63372
                }, {
                    "category": 20,
                    "username": "bifndslez",
                    "is_owner": true,
                    "name": "Line drawing library",
                    "language": 0,
                    "hasToken": false,
                    "args": "[]",
                    "is_buy": false,
                    "public": 0,
                    "last_modified": "2017-05-08 09:44:18",
                    "date": "2017-04-19 10:38:14",
                    "forked": 0,
                    "id": 39677
                },
                
                ...
                ],
                "all": 20
            },
            "error": null
        }
    }
    

NewRobot ((Einstellungen))

NewRobot(Settings)Erstellt einen neuen Bot nach den Parameter-Einstellungen, die demAPI KEYin der Anforderung des FMZ Quant-Kontos.

  • ParameterSettingsist vonJSONObjekttyp.Settingsist einJSONObjekt, das vom Bot konfiguriert wurde.

    DieSettingsDie Beschreibung ist wie folgt zu erklären:

    Settings = {
        "name": "hedge test",
        /*
        Strategy parameters; the order does not have to be in correspondence with the parameter order, but the name must be the same as the parameter name 
        Note: the second element in the parameter array ["MAType", 0, 75882] is an array including three elements, in which the first one "MAType" is the parameter on the pattern referred by the bot-binding strategy, and the second one "0" is the specific value set by the parameter "MAType", and the third one "75882" is the pattern ID containing the parameter "MAType"
        */
        "args": [["Interval", 500], ["MAType", 0, 75882]],
        // Strategy ID, which can be obtained by "GetStrategyList" method
        "strategy": 25189,                      
        // K-line period parameter; "60" indicates 60 seconds
        "period": 60,                           
        // it can be specified to run on which docker; no writing of the attribute will lead to automatic assignment 
        "node" : 52924,                         
        // custom field
        "appid": "member2",
        // Specify a bot group
        "group": 1122,
        "exchanges": [
            // ZB; "pid" can be obtained by "GetPlatformList" method 
            {"pid": 15445, "pair": "ETH_BTC"},     
            // OKEX
            {"pid": 13802, "pair": "BCH_BTC"},     
            // In addition to the exchanges configured by the FMZ dashboard (pid identification), you can also set exchange configuration information that has not been configured to operate the bot 
            {"eid": "OKEX", "pair": "ETH_BTC", "meta" :{"AccessKey": "xxx", "SecretKey": "yyy"}},
            {"eid": "Huobi", "pair": "BCH_BTC", "meta" :{"AccessKey": "xxx", "SecretKey": "yyy"}}
        ]
    }
    

    Anmerkung: Wenn Sie die sensiblen Informationen verwenden, wie zum Beispiel die PlattformAPI KEY, einschließlich"meta":{"AccessKey":"xxx","SecretKey":"yyy"}in der Konfiguration voneidDie Daten werden direkt an das Docker-Programm gesendet, so dass diese Informationen jedes Mal konfiguriert werden müssen, wenn der Bot erstellt oder neu gestartet wird.

    Um den Bot neu zu starten, der das Plugin verwendet, um die Plattform zu unterstützen,SettingsSie sollten die folgenden Einstellungen für dieexchangesEigenschaft:

    {"eid": "Exchange", "label" : "testXXX", "pair": "ETH_BTC", "meta" :{"AccessKey": "123", "SecretKey": "1234", "Front" : "http://127.0.0.1:6666/XXX"}}
    

    labelDas Attribut ist ein Etikett für das Exchange-Objekt, auf das das aktuelle allgemeine Protokoll zugreift, zu setzen, das durch dieexchange.GetLabel()die Rolle der Kommission in der Strategie.

  • Prüfstrategie:

    • StrategieparameterInterval

    • JavaScriptStrategiecode

      function main(){
          Log(exchange.GetAccount())
          Log(exchange.GetTicker())
          Log(exchange.GetDepth())
          Log("Interval:", Interval)
      }
      
  • Rücklaufwert

    // Create the bot successfully 
    {
        "code": 0,
        "data": {
            "result": 74260,
            "error": null
        }
    }
    

PluginRun ((Einstellungen)

PluginRun(Settings)verwendet die erweiterte API zum AnrufenDebugging-Tool function.

  • ParameterSettingsist einJSONObjekt, nämlich die Einstellungen im Debugger (Settingsenthält den im Attribut geschriebenen Testcodesource).

  • PrüfcodePythonBeispiel:

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    import time
    import md5
    import urllib
    import json
    
    # API KEY has been blurred; you can use your own API KEY to test
    accessKey = 'f77XXXXXXXXXXXXXXX757'              
    # API KEY has been blurred; you can use your own API KEY to test
    secretKey = 'd8XXXXXXXXXXXXXXXX41ca97ea15'       
    
    def api(method, *args):
        d = {
            'version': '1.0',
            'access_key': accessKey,
            'method': method,
            'args': json.dumps(list(args)),
            'nonce': int(time.time() * 1000),
            }
        d['sign'] = md5.md5('%s|%s|%s|%d|%s' % (d['version'], d['method'], d['args'], d['nonce'], secretKey)).hexdigest()
        return json.loads(urllib.urlopen('https://www.fmz.com/api/v1', urllib.urlencode(d)).read())
    
    code = '''
    function main() {
        Log(exchange.GetTicker())
        exchange.SetTimeout(2000);
        return exchanges[0].GetTicker()
    }
    '''
    
    settings = { 
        # K-line period parameter "60" indicates 60 seconds
        "period": 60,                                 
        "source": code, 
        # The docker ID can specify which docker to run the bot on; if the value is -1, it means automatic assignment 
        "node" : 54913,                               
        "exchanges": [
            {"eid": "OKEX", "pair": "ETH_BTC", "meta" :{"AccessKey": "123abc", "SecretKey": "123abc"}},
            {"eid": "Huobi", "pair": "BCH_BTC", "meta" :{"AccessKey": "123abc", "SecretKey": "123abc"}}
        ]
    }
    
    print api("PluginRun", settings)
    

    Anmerkung:{"eid": "OKEX", "pair": "ETH_BTC", "meta" :{"AccessKey": "123abc", "SecretKey": "123abc"}} {"eid": "Huobi", "pair": "BCH_BTC", "meta" :{"AccessKey": "123abc", "SecretKey": "123abc"}}Für dieexchangesAttribut in derEinstellungen, muss das Attribut nur auf 1 gesetzt werden, wenn diePluginRunSie werden nicht angezeigt, wenn Sie zwei Exchange-Objekte in derEinstellungen, aber ein Fehler wird bei Zugriff auf das zweite Austauschobjekt im Code gemeldet.

  • Rücklaufwertapi("PluginRun", settings)zurückgegebene Ergebnisse:

    {
        u'code': 0, 
        u'data': {
            u'result': u'{"logs":[{"PlatformId":"","OrderId":"0","LogType":5,"Price":0,"Amount":0,"Extra":"{\\"Info\\":{\\"date\\":\\"1523715057\\",\\"ticker\\":{\\"high\\":\\"0.06400845\\",\\"vol\\":\\"117648.31546800\\",\\"last\\":\\"0.06204514\\",\\"low\\":\\"0.06178666\\",\\"buy\\":\\"0.06200001\\",\\"sell\\":\\"0.06208728\\"}},\\"High\\":0.06400845,\\"Low\\":0.06178666,\\"Sell\\":0.06208728,\\"Buy\\":0.06200001,\\"Last\\":0.06204514,\\"Volume\\":117648.315468,\\"OpenInterest\\":0,\\"Time\\":1523715057726}","Instrument":"","Direction":"","Time":1523715057726}],"result":"{\\"Info\\":{\\"date\\":\\"1523715057\\",\\"ticker\\":{\\"vol\\":\\"117648.31546800\\",\\"last\\":\\"0.06204514\\",\\"low\\":\\"0.06178666\\",\\"buy\\":\\"0.06200001\\",\\"sell\\":\\"0.06208728\\",\\"high\\":\\"0.06400845\\"}},\\"High\\":0.06400845,\\"Low\\":0.06178666,\\"Sell\\":0.06208728,\\"Buy\\":0.06200001,\\"Last\\":0.06204514,\\"Volume\\":117648.315468,\\"OpenInterest\\":0,\\"Time\\":1523715057774}"}\n', 
            u'error': None
        }
    }
    

GetRobotLogs(...)

GetRobotLogs(robotId, logMinId, logMaxId, logOffset, logLimit, profitMinId, profitMaxId, profitOffset, profitLimit, chartMinId, chartMaxId, chartOffset, chartLimit, chartUpdateBaseId, chartUpdateDate, summaryLimit)erhält die Roboterprotokollinformationen (RoboterID: robotId), die demAPI KEYin der Anforderung des FMZ Quant-Kontos.

  • Parameter

    Name der Parameter Typ Anmerkungen
    RobotId ganzzahl Bot-ID

    Tabelle ProtokollAbfragt die Logdaten der Datenbanktabelle:

    Name der Parameter Typ Anmerkungen
    LogMinId ganzzahl Mindest-ID des Protokolls
    LogMaxId ganzzahl Maximale Kennzahl des Protokolls
    LogOffset ganzzahl Nachdem der Bereich durch logMinId und logMaxId bestimmt wurde, wird der LogOffset-Offset (wie viele Datensätze übersprungen werden) als Ausgangsposition für die Erfassung von Daten verwendet
    LogLimit ganzzahl Nach Bestimmung der Ausgangsposition wird die Anzahl der ausgewählten Datensätze

    Tabelle GewinnAbfragt die Gewinndaten der Datenbanktabelle:

    Name der Parameter Typ Anmerkungen
    Gewinn ganzzahl Mindest-ID des Datensatzes
    GewinnmaxId ganzzahl Höchstzahl der Datensätze
    GewinnAusgleich ganzzahl Der Versatz (wie viele Aufzeichnungen übersprungen werden) beginnt als Ausgangsposition verwendet werden
    Gewinngrenze ganzzahl Nach Bestimmung der Ausgangsposition wird die Anzahl der ausgewählten Datensätze

    Tabelle SchaubildAbfragt die Diagrammdaten der Datenbanktabelle:

    Name der Parameter Typ Anmerkungen
    Abbildung ganzzahl Mindest-ID des Datensatzes
    Karte MaxId ganzzahl Höchstzahl der Datensätze
    Abbildung: ganzzahl Ausgleich
    Bildgrenze ganzzahl Anzahl der zu erhaltenden Aufzeichnungen
    ChartUpdateBaseId ganzzahl Abfrage der aktualisierten Basis-ID
    BildUpdateDatum ganzzahl Datensatz aktualisiert den Zeitstempel, der die Datensätze, die größer als dieser Zeitstempel sind, herausfiltert

    ZusammenfassungAbfragt die Daten der Statusleiste:

    Es abfragt die Statusleiste-Daten des Bots. Der Parameter-Typ ist eine ganze Zahl. Die Einstellung auf 0 bedeutet, dass die Statusleiste-Informationen nicht abfragen müssen, und die Einstellung auf eine nicht-Null-Zahl zeigt die Anzahl der Bytes der Statusleiste-Informationen an, die abfragt werden sollen (die Schnittstelle begrenzt nicht die Datenmenge, so dass Sie eine größere Angabe angeben könnensummaryLimitDie Daten der Statusleiste werden in den zurückgegebenen Daten gespeichert.summary.

    PythonBeispiel:

    api('GetRobotLogs', 63024, 0, 0, 7, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)    # For the specific code, please refer to the above content: 4. Simple examples, which will not be repeated here; here only write the call and pass of "GetRobotLogs"
    
  • Rücklaufwert zurückgegebene Daten:

    {
        "code": 0,
        "data": {
            "result": {
                "status": 1,
                "updateTime": 1527049990197,
                "wd": 0,
                // The first data structure in logs is the log records in the strategy log table in the bot database
                "logs": [{            
                    "Max": 3984,
                    "Arr": [
                        [3977, 3, "Futures_OKCoin", "", 0, 0, "Sell(688.9, 2): 20016", 1526954372591, "", ""],
                        [3976, 5, "", "", 0, 0, "OKCoin:this_week too many positions, long: 2", 1526954372410, "", ""]
                    ],
                    "Total": 1503,
                    "Min": 2482
                }, {                  
                    // The second data structure in logs is the log records in the strategy log table in the bot database
                    "Max": 0,
                    "Arr": [],
                    "Total": 0,
                    "Min": 0
                }, {                  
                    // The third data structure in logs is the log records in the strategy log table in the bot database
                    "Max": 0,
                    "Arr": [],
                    "Total": 0,
                    "Min": 0
                }],
                "chart": "",
                "refresh": 1527049988000,
                "summary": "...", 
                "chartTime ": 0, 
                "node_id ": 50755, 
                "online ": true
            }, 
            "error ": null
        }
    }
    
  • Strategieprotokolltabelle in der Datenbank

    DieArrBeschreibung des Attributwerts in den oben zurückgegebenen Ergebnisdaten:

    "Arr": [
        [3977, 3, "Futures_OKCoin", "", 0, 0, "Sell(688.9, 2): 20016", 1526954372591, "", ""],
        [3976, 5, "", "", 0, 0, "OKCoin:this_week too many positions, long: 2", 1526954372410, "", ""]
    ],
    
    Identifizierung LogTyp Eid Auftrag Preis Betrag Zusätzlich Datum Vertrag Typ Richtung
    3977 3 Futures_OKCoin "" 0 0 Verkauf ((688,9, 2): 20016 1526954372591 "" ""
    3976 5 "" "" 0 0 OKCoin:diese_Woche zu viele Positionen, lang: 2 1526954372410 "" ""

    extraist die beigefügte Meldung des gedruckten Protokolls.

    Spezifische Prototypen, dargestellt durchlogTypeWert:

    LogTyp: 0 1 2 3 4 5 6
    Bedeutung von logType: Kaufen Verkauf Rücktritt Fehler Gewinne Nachricht RESTART
    Chinesische Bedeutung Kaufbestellungsartprotokoll Verkäufeinträge Zurückziehen Fehler Einnahmen Tagebücher Neustart
  • Protokolltabelle des Einnahmendiagramms in der Datenbank Die Daten in der Diagramm­Log­Tabelle stimmen mit dem Umsatz­log in der Strategie­Log­Tabelle überein.

    "Arr": [
        [202, 2515.44, 1575896700315],
        [201, 1415.44, 1575896341568]
    ]
    

    Nehmen wir beispielsweise eine der Protokolldaten:

    [202, 2515.44, 1575896700315]
    

    202als LogID; 2515.44als Ertragswert;1575896700315als Zeitstempel.

  • Chart-Logtabelle in der Datenbank

    "Arr": [
        [23637, 0, "{\"close\":648,\"high\":650.5,\"low\":647,\"open\":650,\"x\":1575960300000}"],
        [23636, 5, "{\"x\":1575960300000,\"y\":3.0735}"]
    ]
    

    Nehmen wir beispielsweise eine der Protokolldaten:

    [23637, 0, "{\"close\":648,\"high\":650.5,\"low\":647,\"open\":650,\"x\":1575960300000}"],
    

    23637ist das ProtokollID, 0ist der Index der Diagrammdatenreihe und die letzten Daten"{\"close\":648,\"high\":650.5,\"low\":647,\"open\":650,\"x\":1575960300000}"ist die Logdaten; diese Daten sind die K-Liniendaten auf dem Diagramm.

Handelsplugin

Einleitung

Um die Funktionen des Handelsterminals zu verbessern und den manuellen Handel zu erleichtern, ist jetzt eine Plug-in-Funktion verfügbar.

img

Prinzip des Plugins

Das Prinzip ist das gleiche wie das Debugging-Tool: Senden Sie ein Stück Code an den Docker der Trade Terminalseite zum Ausführen und unterstützen Sie die Rückgabe von Diagrammen und Tabellen (das Debugging-Tool kann auch nach dem Upgrade unterstützen).Debugging-ToolEs kann einige einfache kleine Funktionen realisieren, komplexe Strategien müssen noch im echten Handel ausgeführt werden.

Schreiben von Plugins

Auf der Seite Neue Strategie setzen Sie den Strategie-Typ auf:Trading Plugin, die dieJavaScript, Python, cppundMyLanguage.

img

Nutzung des Plugins

Das Plugin kann den Code für einen bestimmten Zeitraum ausführen, und es kann einige einfache Operationen durchführen, wieEisberg-Bestellungen, Ausstehende Aufträge, Stornierung der BestellungundBerechnung der Bestellung- Das gleiche wie derDebugging-Tool, verwendet esreturnHier sind ein paar Beispiele, und andere Funktionen können Sie selbst erforschen.

  • Zurück zum Tiefen-Snapshot

    // Return to the depth snapshot
    function main() {
        var tbl = { 
            type: 'table', 
            title: 'snapshot of the order depth @ ' + _D(), 
            cols: ['#', 'Amount', 'Ask', 'Bid', 'Amount'], 
            rows: []
        }
        var d = exchange.GetDepth()
        for (var i = 0; i < Math.min(Math.min(d.Asks.length, d.Bids.length), 15); i++) {
            tbl.rows.push([i, d.Asks[i].Amount, d.Asks[i].Price+'#ff0000', d.Bids[i].Price+'#0000ff', d.Bids[i].Amount])
        }
        return tbl
    }
    
    def main():
        tbl = {
            "type": "table",
            "title": "snapshot of the order depth @ " + _D(),
            "cols": ["#", "Amount", "Ask", "Bid", "Amount"],
            "rows": []
        }
        d = exchange.GetDepth()
        for i in range(min(min(len(d["Asks"]), len(d["Bids"])), 15)):
            tbl["rows"].append([i, d["Asks"][i]["Amount"], str(d["Asks"][i]["Price"]) + "#FF0000", str(d["Bids"][i]["Price"]) + "#0000FF", d["Bids"][i]["Amount"]])
        return tbl
    
    void main() {
        json tbl = R"({
            "type": "table",
            "title": "abc",
            "cols": ["#", "Amount", "Ask", "Bid", "Amount"],
            "rows": []   
        })"_json;
        
        tbl["title"] = "snapshot of the order depth @" + _D(); 
        auto d = exchange.GetDepth();
        for(int i = 0; i < 5; i++) {
            tbl["rows"].push_back({format("%d", i), format("%f", d.Asks[i].Amount), format("%f #FF0000", d.Asks[i].Price), format("%f #0000FF", d.Bids[i].Price), format("%f", d.Bids[i].Amount)});
        }
        
        LogStatus("`" + tbl.dump() + "`");
        // C++ does not support "return json" to display the table, and you can create a bot to display the table of the status bar 
    }
    

    img

  • Zeichnen Sie die Querschnittspannen

    // Draw cross-period spreads
    var chart = { 
        __isStock: true,    
        title : { text : 'spread analysis chart'},                     
        xAxis: { type: 'datetime'},                 
        yAxis : {                                        
            title: {text: 'spread'},                   
            opposite: false                   
        },
        series : [                    
            {name : "diff", data : []}
        ]
    }  
    
    function main() {
        exchange.SetContractType('quarter')
        var recordsA = exchange.GetRecords(PERIOD_M5)
        exchange.SetContractType('this_week')
        var recordsB = exchange.GetRecords(PERIOD_M5)
        
        for(var i = 0; i < Math.min(recordsA.length, recordsB.length); i++){
            var diff = recordsA[recordsA.length - Math.min(recordsA.length, recordsB.length) + i].Close - recordsB[recordsB.length - Math.min(recordsA.length, recordsB.length) + i].Close
            chart.series[0].data.push([recordsA[recordsA.length - Math.min(recordsA.length, recordsB.length) + i].Time, diff])
        }
        return chart
    }
    
    chart = {
        "__isStock": True,
        "title": {"text": "spread analysis chart"},
        "xAxis": {"type": "datetime"},
        "yAxis": {
            "title": {"text": "spread"}, 
            "opposite": False
        }, 
        "series": [
            {"name": "diff", "data": []}
        ]
    }  
    
    def main():
        exchange.SetContractType("quarter")
        recordsA = exchange.GetRecords(PERIOD_M5)
        exchange.SetContractType("this_week")
        recordsB = exchange.GetRecords(PERIOD_M5)  
    
        for i in range(min(len(recordsA), len(recordsB))):
            diff = recordsA[len(recordsA) - min(len(recordsA), len(recordsB)) + i].Close - recordsB[len(recordsB) - min(len(recordsA), len(recordsB)) + i].Close
            chart["series"][0]["data"].append([recordsA[len(recordsA) - min(len(recordsA), len(recordsB)) + i]["Time"], diff])
        return chart
    
    // C++ does not support "return json" structure drawing
    

    img

    Es gibt weitere Beispiele in der Mehr Strategien, wieKauf / Verkauf in kleinen Mengen, Strategieadresse.

Wie man sie verwendet

  • Hinzufügen des Plug-in-Moduls des Handelsterminals Wie in der Abbildung gezeigt, öffnen Sie das Modul hinzufügen Menü auf der Trade Terminalseite, die Trading-Terminal-Plugins in derStrategiebibliothekder aktuellen FMZ-Konto wird automatisch in der Liste angezeigt, finden Sie das Plugin hinzufügen und klicken Sie auf Add.

    img

  • Führen Sie das Plugin aus Klicken Sie auf Execute, und das Trading-Terminal-Plugin startet.

  • Zeit des Plugins Die maximale Laufzeit des Plugins beträgt 3 Minuten; und es wird automatisch nach mehr als 3 Minuten nicht mehr laufen.

Alpha-Faktor-Analysetool

Einleitung

Die Analyseformel bezieht sich auf die Berechnungsmethode für die Marktnotierung in der Öffentlichkeit.alpha101vonworldquant: http://q.fmz.com/chart/doc/101_Formulaic_Alphas.pdf, die grundsätzlich mit ihrer Grammatik kompatibel ist (mit Erläuterungen für nicht implementierte Merkmale) und verbessert wurde. Es wird zur schnellen Berechnung von Zeitreihen und zur Validierung von Ideen verwendet.Adresse verwenden.

Seite Einleitung:

img

Funktionen und Betreiber

"{}" darstellt Platzhalter, alle Ausdrücke sind nicht groß- und kleinbuchstabensensible, und x stellt Datenzeitreihen dar

  • abs(x), log(x), sign(x)bedeutet wörtlich den absoluten Wert, Logarithmus und Zeichenfunktion.

Die folgenden Betreiber, einschließlich+, -, *, /, >, <, auch den Bedeutungen ihrer Normen entsprechen;==steht für gleich oder nicht;||bedeutet oder;x? y: zzeigt den ternären Operator an.

  • rank(x): die Rangfolge der Querschnitte, die den Prozentsatz des Standorts wiedergibt; es ist notwendig, mehrere Kandidaten-Zielgruppen anzugeben, die nicht für einen Binnenmarkt berechnet werden können und das ursprüngliche Ergebnis direkt zurückgeben.
  • delay(x, d): der Wert vor der Periode d der Reihenfolge.
  • sma(x, d): der einfache gleitende Durchschnitt der Periode d der Sequenz.
  • correlation(x, y, d): der Korrelationskoeffizient der Zeitreihen x und y über die letzten d Perioden.
  • covariance(x, y, d): die Kovarianz der Zeitreihen x und y in den letzten d Perioden.
  • scale(x, a): es normalisiert die Daten, so dasssum(abs(x)) = a(a wird standardmäßig auf 1).
  • delta(x, d): der aktuelle Wert der Zeitreihe x minus der Wert vor d Perioden.
  • signedpower(x, a): x^a.
  • decay_linear(x, d): gewichteter gleitender Durchschnitt der Zeitreihe x für die Periode d, wobei die Gewichte d, d-1, d-2... 1 (normalisiert) sind.
  • indneutralize(x, g): die neutrale Verarbeitung für die Branchenklassifizierung g, derzeit nicht unterstützt.
  • ts_{O}(x, d): O Operationen auf der Zeitreihe x in den vergangenen d Perioden durchführen (O kann speziell min und max usw. darstellen, die später eingeführt werden), wird d in eine ganze Zahl umgewandelt.
  • ts_min(x, d): der Mindestwert der letzten d Zeiträume.
  • ts_max(x, d): der Höchstwert der letzten d Zeiträume.
  • ts_argmax(x, d): ts_max(x, d) position.
  • ts_argmin(x, d): ts_min(x, d) position.
  • ts_rank(x, d): Sortierung der Zeitreihenwerte x der letzten d Perioden (prozentuale Sortierung).
  • min(x, d): ts_min(x, d).
  • max(x, d): ts_max(x, d).
  • sum(x, d): die Summe der letzten d Zeiträume.
  • product(x, d): das Produkt der letzten d Perioden.
  • stddev(x, d): die Standardabweichung der letzten d Perioden.

Eingabedaten

Die Eingabedaten sind nicht mit Groß- und Kleinbuchstaben versehen; die Standarddaten sind das ausgewählte Symbol auf der Webseite oder können direkt angegeben werden, wie z. B.binance.ada_bnb

  • returns: Rückkehr des Schlusskurses.
  • open, close, high, low, volume: d. h. der Eröffnungspreis, der Schlusskurs, der höchste Preis, der niedrigste Preis und das Handelsvolumen während des Zeitraums.
  • vwap: volumengewichteter ausgeführter Preis, noch nicht umgesetzt, der derzeit der Schlusskurs ist.
  • cap: Gesamtmarktwert, noch nicht umgesetzt.
  • IndClass: Branchenklassifizierung, noch nicht eingeführt.

Andere

Es wird unterstützt, mehrere Ergebnisse (durch Liste ausgedrückt) gleichzeitig auszugeben.[sma(close, 10), sma(high, 30)]Neben der Eingabe von Zeitreihendaten kann es auch als einfacher Rechner verwendet werden.

Anlage

Allgemeines Protokoll

Für die FMZ Quant Trading Plattform, die die Exchange API-Schnittstelle noch nicht eingekapselt hat, kann auf sie zugegriffen werden, indem ein allgemeines Protokoll-Plug-in-Programm geschrieben wird.

Der Unterschied zwischenFIXProtokoll-Plug-in-Programm und dieRESTDas Protokoll-Plug-in-Programm ist nur die Interaktion zwischen dem Protokoll-Plug-in-Programm und der Austauschoberfläche. Das Protokoll-Plug-in-Programm hat die gleiche detaillierte Verarbeitung der Docker-Programm-Interaktion und Datenformat wie FMZ Quant. Für Details, wenden Sie sich bitte an die Beispiele in den oben genannten Links.

Handelsterminal

Die FMZ Quant Trading Plattform bietet eine modulare und anpassbareHandelSie können verschiedene Datenmodule und Handelsfunktionsmodule frei hinzufügen und sogar eigene Code-Module (Trading-Terminal-Plugins) entwickeln. Verschiedene Module auf der Trade-Seite lassen sich ziehen und vergrößern, die Einstellungen der an die Module gebundenen Handelspare und Börsen können geändert und mehrere Module desselben Typs hinzugefügt werden.

img

Fehlerbehebungswerkzeug

Debug-ToolSeite bietet eine Umgebung zum schnellen Testen von Codes durch Bot, unterstützt nurJavaScript currently.

img

Fernbearbeitung

Es unterstützt den lokalen Editor Remote-Synchronisation Strategie Code zu FMZ Quant Trading Plattform, und es unterstütztSublime Text/Atom/Vim/VSCodeAuf der Strategiebearbeitungsseite klicken Sie auf Remote Edit, um die Plugin-Download-Adresse zu öffnen, um den Remote-Synchronisationsschlüssel (Token) der aktuellen Strategie anzuzeigen.

img

Klicken Sie auf Update key, um die aktuelle Schlüsselanzeige zu aktualisieren, und klicken Sie auf Delete Key, um den geheimen Schlüssel (Token) der aktuellen Strategie zu löschen.

img

Die Installationsmethoden der Plug-ins für verschiedene Editoren unterscheiden sich leicht. Sie können auf die Download-Schaltfläche klicken, um zum spezifischen Plug-in für die Fernsynchronisierung zu gelangen.

img

Bot-Parameter Importieren und Exportieren

img

Wenn Sie den Live-Handel ausführen, müssen Sie die Parameterdaten der echten Bot-Konfiguration speichern, klicken Sie auf die Schaltfläche Export.JSONSie können auch die exportierte Strategieparameterkonfiguration wieder in den echten Bot importieren. Klicken Sie auf die Schaltfläche Import, um die gespeicherten Strategie-Bot-Parameter in den aktuellen echten Bot zu importieren. Klicken Sie dann auf Save, um zu speichern.

Strategie-Import- und Exportdateien

img

  • Herunterladen des Quellcodes Exportieren Sie den Quellcode der Strategie, und der Typ der Exportdatei basiert auf der Strategie-Programmiersprache.js; Python-Strategie exportiert die Dateien mit der Erweiterungpy; C++ Strategie exportiert die Dateien mit der Erweiterungcpp; Mylanguage-Strategie exportiert die Dateien mit der Erweiterungtxt. Beachten Sie, dass nur der Quellcode der Strategie exportiert wird, ohne Strategieparameter, Vorlageverweise usw. einzubeziehen.

  • Exportstrategie Exportieren Sie die vollständige Strategie, einschließlich aller Strategieinformationen, wie Strategie-Quellcode und Parameterdesign.xml file.

  • Importstrategie VerwendenxmlSie können die Daten über das Programm und die Daten über das Programm exportieren, und klicken Sie auf die Schaltfläche "Import" auf der Strategiebearbeitungsseite, um diexmlNach dem Importieren müssen Sie auf die Schaltfläche Save klicken, um die Strategie zu speichern.

Mehrsprachige Unterstützung

Strategiebezeichnungen und Strategieparameterbeschreibungen können inChinese|English, wird in der von den Webseiten erkannten Sprache automatisch angezeigt.

img

img

An anderen Orten, z. B.:Beschreibung der Strategie, Gebrauchsanweisungund andere Texte inMarkdownForm, unter Verwendung von[trans]Chinese|English[/trans]oder[trans]Chinese||English[/trans]Der Effekt des obigen Beispiels wird in der folgenden Abbildung dargestellt:

  • Seite in Chinesisch:img

  • Seite in Englisch:img

Nachdem Sie die Sprache gewechselt haben, wirkt sie nach dem Auffrischen der Webseite.

Funktionen, die Zeichenfolgen im Strategiecode schreiben können, unterstützen auch die Sprachenumstellung, wie z. B. die FunktionLog, FunktionLogStatus, usw.

function main() {
    Log("[trans]日志|log[/trans]")
    var table = {
        type: "table", 
        title: "[trans]操作|option[/trans]", 
        cols: ["[trans]列1|col1[/trans]", "[trans]列2|col2[/trans]", "[trans]操作|option[/trans]"],
        rows: [ 
            ["[trans]比特币|BTC[/trans]", "[trans]以太坊|ETH[/trans]", {"type": "button", "cmd": "coverAll", "name": "平仓|cover", "description": "描述|description"}]  // Note: It doesn't need to add [trans] tag in the button
        ]
    }
    LogStatus("[trans]信息|message[/trans]", "\n`" + JSON.stringify(table) + "`")
    throw "[trans]错误|error[/trans]"
}
import json
def main():
    Log("[trans]日志|log[/trans]")
    table = {
        "type": "table", 
        "title": "[trans]操作|option[/trans]", 
        "cols": ["[trans]列1|col1[/trans]", "[trans]列2|col2[/trans]", "[trans]操作|option[/trans]"],
        "rows": [ 
            ["[trans]比特币|BTC[/trans]", "[trans]以太坊|ETH[/trans]", {"type": "button", "cmd": "coverAll", "name": "平仓|cover", "description": "描述|description"}]
        ]
    }
    LogStatus("[trans]信息|message[/trans]", "\n`" + json.dumps(table) + "`")
    raise Exception("[trans]错误|error[/trans]")
void main() {
    Log("[trans]日志|log[/trans]");
    json table = R"({
        "type": "table", 
        "title": "[trans]操作|option[/trans]", 
        "cols": ["[trans]列1|col1[/trans]", "[trans]列2|col2[/trans]", "[trans]操作|option[/trans]"],
        "rows": [ 
            ["[trans]比特币|BTC[/trans]", "[trans]以太坊|ETH[/trans]", {"type": "button", "cmd": "coverAll", "name": "平仓|cover", "description": "描述|description"}]
        ]
    })"_json;
    LogStatus("[trans]信息|message[/trans]", "\n`" + table.dump() + "`");
    Panic("[trans]错误|error[/trans]");
}

WexApp-Simulationsmarkt

  • 24-Stunden-Non-Stop-Betrieb, leistungsfähiges Trading-Matching-System, simuliert echten Handel.
  • Ein leistungsfähiger Market-Making-Bot, der eine gute Liquidität und Tiefe des Orderbuchs bietet.
  • Vollständige API-Schnittstellenunterstützung, kann nicht nur auf FMZ Quant für simulierten quantitativen Handel getestet werden, sondern auch kann sich selbst mit der API-Schnittstelle verbinden, Adresse:WexApp.

Docker-Programmparameter

Nach dem Herunterladen der Docker-Software wird die ausführbare Datei nach der Dekompression (Dateiname:robot) ist das Dockerprogramm; die Parameter können beim Einsatz des Dockerprogramms für das Dockerprogramm festgelegt werden.

  • -v: Überprüfen Sie die Informationen einschließlich der Version und der Kompilierungszeit des aktuellen Dockerprogramms. Der vollständige Ausführungsbefehl basiert aufApple Mac System: ./robot -v.
  • -s: die angegebene Adresse zur Kommunikation mit der FMZ Quant Trading Plattform beim Ausführen des Dockerprogramms. Der vollständige Ausführungsbefehl basiert aufApple Mac System: ./robot -s node.fmz.com/xxxxxxx; xxxxxxxist die eindeutige Kennung jedes Kontos auf der FMZ Quant Trading-Plattform; nach Ausführung des Befehls wird die Eingabe des Passworts für das entsprechende FMZ Quant Trading-Plattformkonto aufgefordert.
  • -p: Sie können direkt den Parameter im Run-Befehl angeben, um das Passwort einzugeben, was nicht empfohlen wird, da der Passwortparameter im aktuellen Systemrekord verbleibt.node.fmz.com/xxxxxxxist:abc123456- Ich weiß. Der vollständige Ausführungsbefehl basiert aufApple Mac System: ./robot -s node.fmz.com/xxxxxxx -p abc123456.
  • -n: Fügen Sie Etiketteninformationen an das laufende Dockerprogramm an. Der vollständige Ausführungsbefehl basiert aufApple Mac System: ./robot -n macTest -s node.fmz.com/xxxxxxxEs wird einemacTestTextetikett in den Docker-Informationen auf der Plattform-Docker-Verwaltungsseite.
  • -l: Drucken Sie die vom aktuellen Docker unterstützte Austauschliste. Der vollständige Ausführungsbefehl basiert aufApple Mac System: ./robot -l, d. h. die Namen der unterstützten Börsen können ausgeführt werden.

Häufige Ursachen für Bot-Fehler und abnorme Ausgänge

  • Strategie statische Grammatikfehler (Solche Fehler sind offensichtlich, und normalerweise können Sie das Fehlerzeichen auf der Strategiebearbeitungsseite sehen), die während des Backtests gefunden und korrigiert werden können.
  • Strategie-Runtime-Fehler, das häufigste Beispiel ist die direkte Verwendung des Funktions-Rückgabewerts ohne rechtliches Urteil.
  • Zu viel Inhalt, der nicht als Müll gesammelt werden kann, wird in globalen Variablen gespeichert, was zu einer übermäßigen Speichernutzung führt.
  • Bei Verwendung der asynchronenexchange.GoWir haben keine vernünftigewaitdie Zeit, bis das Ende der Korrutine während des Betriebs abgeschlossen ist, abzuwarten, was zu einer großen Anzahl von Korrutinen führt.
  • Zu viele Ebenen rekursiver Funktionsanrufe verursachen die überschrittene Stapelgröße der Koroutinen.
  • Interface-Geschäftsfehler und Netzwerkanfragenfehler usw.; solche Fehlermeldungen werden die Informationen anzeigen, einschließlich der relevanten Austauschobjektnamen, Funktionsnamen, fehlerbezogenen Nachrichten und Gründe und andere Informationen. Solche Fehler verursachen keinen abnormalen Stopp im tatsächlichen Handel (solche Fehler sind in der Regel Ursachen, aber nicht die direkten Ursachen.Programm-Ausnahmen, die durch die direkte Nutzung ohne den Schnittstellen-Rückgabewert zur Beurteilung der Rechtmäßigkeit verursacht werden).
  • Fehler in der Plattformunterlage, das häufigste Beispiel istDecrypt: Secret key decrypt failedDer Grund für den Fehler ist, dass die Änderung des FMZ-Konto-Passworts alle konfiguriertenAPI KEYUm das Problem zu lösen,API KEYDer Docker muss neu gestartet werden.
  • Bei der Vermietung einer Python-Strategie wird ein Fehler aufgrund der Versioninkompatibilität zwischen dem von der Plattform verschlüsselten Python und dem Python in der Strategielaufzeit gemeldet:ValueError: bad marshal data (unknown type code). Die von der Strategie ausgeführte Python-Umgebung auf eine der von der Strategie unterstützten Versionen aktualisieren oder installieren:Python 2.7, Python 3.5undPython 3.6.
  • interruptFehler; der Fehler liegt daran, dass der Benutzer auf dieStoppen Sie den Bot.der Button auf der Bot-Seite, wenn das Programm eine Operation ausführt (z. B. Zugriff auf die Plattformoberfläche), und der Bot stoppt und unterbricht die Fehlermeldung, die durch die aktuelle Operation gedruckt wurde. Der Fehler hat keine Wirkung und ist nur ein Protokoll.

Bots und Strategie-Gruppierung

Auf der Seite Bot und Strategy der FMZ Quant Trading Plattform können Sie klickenEinstellung der GruppeDer Schaltfläche des Schaltfläches des Schaltfläches des Schaltfläches des Schaltfläches des Schaltfläches des Schaltfläches des Schaltfläches des Schaltfläches des Schaltfläches des Schaltfläches des Schaltfläches des Schaltfläches des Schaltfläches des Schaltfläches des Schaltfläches des Schaltfläches des Schaltfläches des Schaltfläches des Schaltfläches des Schaltfläches des Schaltfläches des Schaltflächs des Schaltflächs des Schaltflächens des Schaltflächens des Schaltflächens des Schaltflächens des SchaltflächensVorlage, JavaScript-StrategieundStrategie für BacktestsDiese können in drei Gruppen unterteilt werden.

Unterkonto & Live Bot

Unterkonto Nach der Anmeldung auf der Plattform klicken Sie auf Dashboard und Account, um zum FMZ-Account [Verwaltungsseite] zu wechseln (https://www.fmz.com/m/account) Klicken Sie auf Sub-Account, um die Seite zur Erstellung des Unterkontos zu sehen, wählen Sie den Bot aus, auf den das hinzugefügte Unterkonto imverfügbare BerechtigungenKontrolle, und die Unterkonten festlegenBenutzernameundLogin-Passwort für das Unterkontoin derBenutzerinformationenDer zusätzliche Teilkonto wird auf der aktuellen Seite angezeigt und kann modifiziert, gesperrt/entriegelt und gelöscht werden.

Unterkonten haben begrenzte Berechtigungen; nur die autorisierten Bots in den Einstellungen vonverfügbare BerechtigungenDie Zahlungen werden in den Unterkonten erfaßt. Der autorisierte Bot hat die Befugnis, Parameter zu ändern, den Live-Handel zu stoppen und neu zu starten, aber er kann das vom Bot konfigurierte Austauschobjekt nicht ändern.

  • A. Es ist praktisch, sich anzumelden und zu verwalten, wenn das quantitative Team mehrere Bot-Strategien verwaltet.
  • B. Fehlerbehebung, wenn die Strategie vermietet wird.

Live-Handelsansicht In der Botliste der FMZ-PlattformBot-Seite, klicken Sie auf die Schaltfläche Public, um die Bots der aktuellen Zeile öffentlich anzuzeigen.

    1. Zeigen Sie die Bots auf der [Live View] (https://www.fmz.com/live) auf der FMZ-Plattform veröffentlicht wird, klicken Sie auf die Schaltfläche Public und wählen SieAnteil der Öffentlichkeit.
    1. Erstellen Sie einen privaten Link zum Anzeigen. Nach dem Klicken auf die Schaltfläche Public und der AuswahlInnerer Anteil, können Sie eine Gültigkeitsdauer festlegen, um einen privaten Link zu generieren, um sich in der privaten Live-View-Seite des Strategie-Bots einzuloggen.

Strategie-Teilen und Vermietung

AufStrategieSeite, nachdem Sie auf die Action-Taste auf der rechten Seite der Strategie geklickt haben, gibt es Optionen für das Teilen und Vermieten.

Strategiefreigabe

  • Öffentliches Teilen Nachdem Sie auf die Schaltfläche Teilen geklickt haben, wird ein Dialogfeld angezeigt, und Sie können Public Sharing auswählen, so dass die Strategie vollständig in den Plattformen More Strategies geteilt wird, und jeder Benutzer kann die Strategie kopieren.

  • Internes Teilen Nach dem Klicken auf die Schaltfläche Teilen wird ein Dialogfenster angezeigt, in dem Sie Internal Sharing auswählen können.Adresse der KopieundKopiecodeDie Nutzer, die diese Strategie benötigen, benötigen lediglich dieAdresse der KopieLink, um sich bei derKopie der SeiteNach Erhalt der Strategie wird sie automatisch auf der Seite Strategie angezeigt.

Strategie Vermietung

  • Öffentlicher Verkauf Nach dem Klicken auf die Schaltfläche Rent wird ein Dialogfeld angezeigt, in dem Sie Public Sale auswählen können.

  • Innerer Verkauf Nach dem Klicken auf die Schaltfläche Rent wird ein Dialogfeld angezeigt, in dem Sie Internal Sale auswählen können.Adresse der RegistrierungsseiteundStrategie-TokenDie Nutzer, die diese Strategie benötigen, benötigen lediglich dieAdresse der RegistrierungsseiteLink, um sich bei derRegistrierungsseite. Dann geben Sie das Strategie-Token ein, um das Recht zur Nutzung der Strategie zu erhalten. Die Strategie wird auch auf der Seite Strategy angezeigt, aber nur mit dem Recht, den Backtest und den Bot zu verwenden. Die Informationen wie der Quellcode der Strategie sind nicht zugänglich.

Wichtiger Hinweis: Bei der Erstellung und Verteilung derStrategie-Token, bitte achten Sie darauf, sorgfältig zu bestätigen, ob es sich um einen Strategie-Token oder einen Kopiecode handelt, damit Sie die Strategie nicht versehentlich teilen.

Sharpe-Algorithmus im Backtesting-System

function returnAnalyze(totalAssets, profits, ts, te, period, yearDays) {
    // force by days
    period = 86400000
    if (profits.length == 0) {
        return null
    }
    var freeProfit = 0.03 // 0.04
    var yearRange = yearDays * 86400000
    var totalReturns = profits[profits.length - 1][1] / totalAssets
    var annualizedReturns = (totalReturns * yearRange) / (te - ts)

    // MaxDrawDown
    var maxDrawdown = 0
    var maxAssets = totalAssets
    var maxAssetsTime = 0
    var maxDrawdownTime = 0
    var maxDrawdownStartTime = 0
    var winningRate = 0
    var winningResult = 0
    for (var i = 0; i < profits.length; i++) {
        if (i == 0) {
            if (profits[i][1] > 0) {
                winningResult++
            }
        } else {
            if (profits[i][1] > profits[i - 1][1]) {
                winningResult++
            }
        }
        if ((profits[i][1] + totalAssets) > maxAssets) {
            maxAssets = profits[i][1] + totalAssets
            maxAssetsTime = profits[i][0]
        }
        if (maxAssets > 0) {
            var drawDown = 1 - (profits[i][1] + totalAssets) / maxAssets
            if (drawDown > maxDrawdown) {
                maxDrawdown = drawDown
                maxDrawdownTime = profits[i][0]
                maxDrawdownStartTime = maxAssetsTime
            }
        }
    }
    if (profits.length > 0) {
        winningRate = winningResult / profits.length
    }
    // trim profits
    var i = 0
    var datas = []
    var sum = 0
    var preProfit = 0
    var perRatio = 0
    var rangeEnd = te
    if ((te - ts) % period > 0) {
        rangeEnd = (parseInt(te / period) + 1) * period
    }
    for (var n = ts; n < rangeEnd; n += period) {
        var dayProfit = 0.0
        var cut = n + period
        while (i < profits.length && profits[i][0] < cut) {
            dayProfit += (profits[i][1] - preProfit)
            preProfit = profits[i][1]
            i++
        }
        perRatio = ((dayProfit / totalAssets) * yearRange) / period
        sum += perRatio
        datas.push(perRatio)
    }

    var sharpeRatio = 0
    var volatility = 0
    if (datas.length > 0) {
        var avg = sum / datas.length;
        var std = 0;
        for (i = 0; i < datas.length; i++) {
            std += Math.pow(datas[i] - avg, 2);
        }
        volatility = Math.sqrt(std / datas.length);
        if (volatility !== 0) {
            sharpeRatio = (annualizedReturns - freeProfit) / volatility
        }
    }

    return {
        totalAssets: totalAssets,
        yearDays: yearDays,
        totalReturns: totalReturns,
        annualizedReturns: annualizedReturns,
        sharpeRatio: sharpeRatio,
        volatility: volatility,
        maxDrawdown: maxDrawdown,
        maxDrawdownTime: maxDrawdownTime,
        maxAssetsTime: maxAssetsTime,
        maxDrawdownStartTime: maxDrawdownStartTime,
        winningRate: winningRate
    }
}

Besondere Anweisungen für den Austausch

  • Futures_Binance Es unterstützt den Dual-Position-Modus von Binance-Futures; Sie könnenexchange.IOzum Wechseln:

    function main() {
        var ret = exchange.IO("api", "POST", "/fapi/v1/positionSide/dual", "dualSidePosition=true")
        // ret : {"code":200,"msg":"success"}
        Log(ret)
    }
    
    def main():
        ret = exchange.IO("api", "POST", "/fapi/v1/positionSide/dual", "dualSidePosition=false")
        Log(ret)
    
    void main() {
        auto ret = exchange.IO("api", "POST", "/fapi/v1/positionSide/dual", "dualSidePosition=true");
        Log(ret);
    }
    

    Es unterstützt das Wechseln zwischen Kreuzungsposition und Isolierungsposition

    function main() {
        exchange.SetContractType("swap")
        exchange.IO("cross", true)    // Switch to crossed position
        exchange.IO("cross", false)   // Switch to isolated position
    }
    
    def main():
        exchange.SetContractType("swap")
        exchange.IO("cross", True)
        exchange.IO("cross", False)
    
    void main() {
        exchange.SetContractType("swap");
        exchange.IO("cross", true);
        exchange.IO("cross", false);
    }
    
  • Futures_HuobiDM Es unterstützt die Änderung der Adresse von Huobi Futures, die an der Signatur teilnimmt, die standardmäßig nicht geschaltet wird.exchange.IO("signHost", "")um eine leere Zeichenfolge festzulegen. Verwendungexchange.IO("signHost", "https://aaa.xxx.xxx")die Basisadresse von Huobi Futures, die an der Signaturprüfung teilnimmt, zu wechseln. Verwendungexchange.IO("base", "https://bbb.xxx.xxx")oderexchange.SetBase("https://bbb.xxx.xxx")Um die Basisadresse der Plattformoberfläche zu wechseln. Wenn das Handelspaar aufXXX_USDT, die Funktion verwendenexchange.SetContractType("swap")um den Vertragskode aufswapDauervertragexchange.IO("cross", true)kann aufUSDT-Margined perpetual contract im Modus der gekreuzten Position.exchange.IO("cross", false)Der ursprüngliche Standard ist der isolierte Positionsmodus.

  • Weiß nicht Es unterstützt Huobi-Spot-Leverage-Token wie:LINK*(-3)Der von der Börse definierte Code lautet:link3susdt, die geschrieben wird, wenn FMZ das Handelspaar setztLINK3S_USDT- Ich weiß. Es ist auch möglich, die Handelspare in der Strategie zu wechseln:

    function main() {
        exchange.SetCurrency("LINK3S_USDT")
        Log(exchange.GetTicker())
    }
    
    def main():
        exchange.SetCurrency("LINK3S_USDT")
        Log(exchange.GetTicker())
    
    void main() {
        exchange.SetCurrency("LINK3S_USDT");
        Log(exchange.GetTicker());
    }
    
  • OKX OKX-Schnittstelle kann auf die Simulations-Bot-Testumgebung von OKX wechseln;exchange.IO("simulate", true)Sie können auf die simulierte Handelsumgebung wechseln.exchange.IO("simulate", false)Der erste Standard ist das reale Handelsumfeld. Es unterstützt das Wechseln von Konto-Margin-Modi;exchange.IO("cross", true)zum Wechseln in den Kreuzstellungsmodus und zur Verwendungexchange.IO("cross", false)Um in den Isolierpositionsmodus zu wechseln, ist der ursprüngliche Standardmodus der Kreuzposition.

  • Futures_Bibox Verwendungexchange.IO("cross", true)zum Wechseln in den Kreuzstellungsmodus und zur Verwendungexchange.IO("cross", false)zum Wechsel zum isolierten Positionsmodus; der ursprüngliche Standard ist der Kreuzpositionsmodus. Die Börse unterstützt nicht die Abfrage aktueller ausstehender Aufträge und die Schnittstelle zur Abfrage der historischen Handelsprotokolle des Marktes, so dass dieGetOrdersundGetTradesFunktionen werden nicht unterstützt.

  • Futures_Bitget Verwendungexchange.IO("cross", true)zum Wechseln in den Kreuzstellungsmodus und zur Verwendungexchange.IO("cross", false)zum Wechseln in den Isolierungsmodus.

  • Futures_AOFEX Verwendungexchange.IO("cross", true)zum Wechseln in den Kreuzstellungsmodus und zur Verwendungexchange.IO("cross", false)zum Wechseln in den Isolierungsmodus.

  • Futures_MEXC Verwendungexchange.IO("cross", true)zum Wechseln in den Kreuzstellungsmodus und zur Verwendung` ` Austausch.IO("Kreuz",


Mehr