O recurso está a ser carregado... Carregamento...

Terminal de negociação

A Plataforma de Comércio Quant FMZ fornece uma plataforma modular e personalizávelComércioVocê pode adicionar livremente vários módulos de dados e módulos de função de negociação, e até mesmo desenvolver seus próprios módulos de código (trading terminal plugins). Com seu uso altamente flexível e livre, também facilita muito os usuários de negociação manual e de negociação semi-programática. Vários módulos na página Trade podem ser arrastados e ampliados, as configurações dos pares de negociação e bolsas vinculadas pelos módulos podem ser modificadas e vários módulos do mesmo tipo podem ser adicionados.

A plataforma de negociação quantitativa FMZ melhorou a funcionalidade do terminal de negociação, facilitou melhor a negociação manual e introduziu a função plug-in de negociação do terminal de negociação.

Princípio do Plugin

O princípio é o mesmo que oferramenta de depuração: enviar um pedaço de código para o docker da página do terminal Trade para executar, e suportar o retorno de gráficos e tabelas (a ferramenta de depuração também suporta atualização).ferramenta de depuraçãoPode realizar algumas pequenas funções simples, estratégias complexas ainda precisam ser executadas em negociação ao vivo.

Escrever plugins

Para criar um plugin de terminal de negociação, você pode definir o tipo de estratégia para:Trading pluginnoNova EstratégiaSuporte para plugins de tradingJavaScript, Python, C++, eMyLanguage.

Utilização do Plugin

O plug-in pode executar o código por um período de tempo, e ele pode realizar algumas operações simples, tais comoOrdens de iceberg, Ordens pendentes, cancelamento da encomendaeCalculo da ordemO mesmo que oferramenta de depuração, utilizareturnpara retornar os resultados, e também pode retornar diretamente os gráficos e tabelas. Aqui estão alguns exemplos, e outras funções podem ser exploradas por si mesmo.

  • Volte ao instantâneo de profundidade

    // 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
    }
    
  • Desenhar os spreads entre períodos

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

Existem outros exemplos na Mais Estratégias, como comprar / vender em pequenas quantidades.

Como usar

  • Adicionar o módulo plugin do terminal de negociação Abra o menu adicionar módulo na página do terminal Trade, os plugins do terminal de negociação noBiblioteca de estratégiasda conta FMZ atual será exibido na lista automaticamente, encontrar o plugin a ser adicionado e clique em Add.
  • Executar o plugin Clique em Execute, e o plugin do terminal de negociação começará a ser executado.
  • Tempo de execução do plugin O tempo máximo de execução do plug-in é de 3 minutos; e ele vai parar de funcionar automaticamente após exceder 3 minutos.
Interface API estendida Exploração de dados