Les ressources ont été chargées... Je charge...

Terminal de négociation

La plate-forme de négociation quantitative FMZ fournit une plate-forme modulaire et personnalisable Commerce Vous pouvez ajouter librement divers modules de données et modules de fonction de trading, et même développer leurs propres modules de code (plugins de terminal de trading). Avec son utilisation très flexible et gratuite, il facilite également grandement les utilisateurs du trading manuel et du trading semi-programmatique.

La plateforme de négociation quantitative FMZ a amélioré la fonctionnalité du terminal de négociation, facilité davantage la négociation manuelle et introduit la fonction de trading plug-in du terminal de négociation.

Principe du plugin

Le principe est le même que pour leoutil de débogage: envoyer un morceau de code au docker de la page de terminal Trade pour exécuter, et supporter le retour de graphiques et de tableaux (l'outil de débogage prend également en charge la mise à niveau).outil de débogageIl peut réaliser quelques petites fonctions simples, des stratégies complexes encore à exécuter dans le trading en direct.

Écriture de plugins

Pour créer un plugin de terminal de trading, vous pouvez définir le type de stratégie à:Trading pluginsur leUne nouvelle stratégieLe plugin de trading est pris en chargeJavaScript, Python, C++, etMyLanguage.

Utilisation du plugin

Le plugin peut exécuter le code pendant une période de temps, et il peut effectuer des opérations simples, telles quecommandes de glacier, commandes en attente, annulation de commandeetcalcul de la commandeComme leoutil de débogage, il utilisereturnpour retourner les résultats, et il peut également retourner directement les graphiques et les tableaux. Voici quelques exemples, et d'autres fonctions peuvent être explorées par vous-même.

  • Revenir à l'instantané de profondeur

    // 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 the live trading to display the table of the status bar
    }
    
  • Tirer les écarts entre les périodes

    // 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
    

Il y a d'autres exemples dans Plus de stratégies, comme acheter / vendre en petites quantités.

Comment l' utiliser

  • Ajouter le module plugin du terminal de trading Ouvrez le menu ajouter des modules sur la page du terminal Trade, les plugins du terminal de trading dans lebibliothèque de stratégiede votre compte FMZ actuel apparaîtra dans la liste automatiquement, trouvez le plugin à ajouter et cliquez sur Add.
  • Exécutez le plugin Cliquez sur Execute, et le plugin du terminal de trading va commencer à fonctionner.
  • Temps d'exécution du plugin La durée maximale de fonctionnement du plugin est de 3 minutes; et il cessera de fonctionner automatiquement après avoir dépassé 3 minutes.
Interface d'API étendue Exploration des données