Sumber dimuat naik... memuat...

Arahan FMZ API

Penulis:Sifar, Dicipta: 2020-04-20 10:19:00, Dikemas kini: 2023-04-12 14:44:56

xchangeList()

GetExchangeList()mengembalikan senarai pertukaran yang disokong dan maklumat konfigurasi yang diperlukan.

  • Parameter Tiada

  • Nilai pulangan

    {
        "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
        }
    }
    

HapusNode ((Nid)

DeleteNode(Nid)memadamkan nod dok (IDadalahNid) yang sepadan denganAPI KEYdalam permintaan akaun platform Dagangan FMZ Quant.

  • ParameterNidadalah jenis bilangan bulat, iaitu dockerID.

  • Nilai pulangan

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

HapusRobot(...)

DeleteRobot(RobotId, DeleteLogs)memadamkan robot dengan ID yang ditentukan (robotID: RobotId) yang sepadan denganAPI KEYdalam permintaan di bawah akaun FMZ Quant.

  • ParameterRobotIdadalah jenis bilangan bulat, iaitu robotIDuntuk dihapuskan.DeleteLogsadalah jenis Boolean; setDeleteLogsuntuk memutuskan sama ada untuk memadam log atau tidak;truemenunjukkan penghapusan log.

  • Nilai pulangan

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

DapatkanStrategiList()

GetStrategyList()memperoleh maklumat strategi yang sepadan denganAPI KEYdalam permintaan akaun platform Dagangan FMZ Quant.

  • Parameter Tiada

  • Nilai pulangan

    {
        "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 ((Pengaturan)

NewRobot(Settings)mencipta bot baru mengikut tetapan parameter, sepadan denganAPI KEYdalam permintaan akaun FMZ Quant.

  • ParameterSettingsadalah daripadaJSONJenis objek.SettingsadalahJSONobjek yang dikonfigurasi oleh bot.

    PeraturanSettingsPenerangan dijelaskan seperti berikut:

    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"}}
        ]
    }
    

    Nota: Apabila anda menggunakan maklumat sensitif, seperti platformAPI KEY, termasuk"meta":{"AccessKey":"xxx","SecretKey":"yyy"}dalam konfigurasieid, anda harus tahu FMZ tidak menyimpan data. Data akan dihantar terus ke program docker, jadi maklumat ini mesti dikonfigurasi setiap kali bot dibuat atau dimulakan semula.

    Untuk memulakan semula bot yang menggunakan pemalam untuk menyokong platform, Apabila mengkonfigurasiSettingsparameter, anda harus membuat tetapan berikut untukexchangesatribut:

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

    labelAtribut adalah untuk menetapkan label untuk objek pertukaran diakses oleh protokol umum semasa, yang boleh diperoleh olehexchange.GetLabel()fungsi dalam strategi.

  • Strategi ujian:

    • Parameter strategiInterval

    • JavaScriptKod strategi

      function main(){
          Log(exchange.GetAccount())
          Log(exchange.GetTicker())
          Log(exchange.GetDepth())
          Log("Interval:", Interval)
      }
      
  • Nilai pulangan

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

PluginRun ((Tetapan)

PluginRun(Settings)menggunakan API lanjutan untuk memanggilalat debugging function.

  • ParameterSettingsadalahJSONobjek, iaitu tetapan dalam alat debugging (Settingsmengandungi kod ujian yang ditulis dalam atributsource).

  • Kod ujianPythoncontoh:

    #!/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)
    

    Nota:{"eid": "OKEX", "pair": "ETH_BTC", "meta" :{"AccessKey": "123abc", "SecretKey": "123abc"}} {"eid": "Huobi", "pair": "BCH_BTC", "meta" :{"AccessKey": "123abc", "SecretKey": "123abc"}}Untukexchangesatribut dalamtetapan, atribut hanya perlu ditetapkan kepada 1, apabila memanggilPluginRunDebug Tool halaman. Tiada kesilapan akan dilaporkan apabila anda menetapkan 2 objek pertukaran dalamtetapan, tetapi kesilapan akan dilaporkan apabila objek pertukaran kedua diakses dalam kod.

  • Nilai pulanganapi("PluginRun", settings)Hasil yang dikembalikan:

    {
        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)mendapatkan maklumat log robot (robotID: robotId), bersamaan denganAPI KEYdalam permintaan akaun FMZ Quant.

  • Parameter

    Nama Parameter Jenis Catatan
    robotId bilangan bulat ID bot

    Jadual Logmenyoal data log jadual pangkalan data:

    Nama Parameter Jenis Catatan
    logMinId bilangan bulat ID minimum log
    logMaxId bilangan bulat ID maksimum log
    logOffset bilangan bulat Selepas julat ditentukan oleh logMinId dan logMaxId, logOffset offset (berapa banyak rekod yang dilewatkan) mula digunakan sebagai kedudukan permulaan untuk mendapatkan data
    logLimit bilangan bulat Selepas menentukan kedudukan permulaan, bilangan rekod data yang dipilih

    Jadual KeuntunganMencari data Keuntungan dari jadual pangkalan data:

    Nama Parameter Jenis Catatan
    keuntunganMinId bilangan bulat ID rekod minimum
    keuntunganMaxId bilangan bulat ID rekod maksimum
    keuntunganOffset bilangan bulat Offset (bagaimana banyak rekod yang dilewatkan) mula digunakan sebagai kedudukan permulaan
    KeuntunganLimit bilangan bulat Selepas menentukan kedudukan permulaan, bilangan rekod data yang dipilih

    Jadual Grafikmenyoal data carta dari jadual pangkalan data:

    Nama Parameter Jenis Catatan
    cartaMinId bilangan bulat ID rekod minimum
    cartaMaxId bilangan bulat ID rekod maksimum
    cartaOffset bilangan bulat Pengimbangan
    chartLimit bilangan bulat bilangan rekod yang akan diperoleh
    chartUpdateBaseId bilangan bulat Mencari ID pangkalan yang dikemas kini
    chartUpdateDate bilangan bulat Rekod data mengemas kini stempel masa yang akan menapis rekod yang lebih besar daripada stempel masa ini

    RingkasanSempadanmenyoal data bar status:

    Ia menyoal data bar status bot. Jenis parameter adalah bilangan bulat. Tetapan untuk 0 bermakna tidak perlu menyoal maklumat bar status, dan menetapkan kepada nombor bukan sifar menunjukkan bilangan byte maklumat bar status yang akan ditanyakan (permukaan tidak mengehadkan kuantiti data, jadi anda boleh menentukan yang lebih besarsummaryLimitparameter untuk mendapatkan semua maklumat bar status). Data bar status disimpan dalam data yang dikembalikansummary.

    Pythoncontoh:

    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"
    
  • Nilai pulangan data yang dikembalikan:

    {
        "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
        }
    }
    
  • Jadual log strategi dalam pangkalan data

    PeraturanArrpenerangan nilai atribut dalam data hasil yang dikembalikan di atas:

    "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, "", ""]
    ],
    
    id logType eid Perintah harga jumlah tambahan tarikh kontrakJenis Arah
    3977 3 Futures_OKCoin "" 0 0 Menjual ((688.9, 2): 20016 1526954372591 "" ""
    3976 5 "" "" 0 0 OKCoin:minggu ini_terlalu banyak kedudukan, panjang: 2 1526954372410 "" ""

    extraadalah mesej lampiran log cetak.

    Jenis log khusus yang diwakili olehlogTypenilai:

    logTipe: 0 1 2 3 4 5 6
    Makna logType: Beli Jualan Mengundur Kesilapan Keuntungan Mesej Mulakan semula
    Makna Cina Log jenis pesanan beli Log jenis pesanan jual Berundur. Kesilapan Hasil Log Mulakan semula
  • Jadual log carta pendapatan dalam pangkalan data Data dalam jadual log carta adalah konsisten dengan log pendapatan dalam jadual log strategi.

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

    Ambil salah satu data log sebagai contoh:

    [202, 2515.44, 1575896700315]
    

    202sebagai logID; 2515.44sebagai nilai pendapatan;1575896700315sebagai cap masa.

  • Jadual log carta dalam pangkalan data

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

    Ambil salah satu data log sebagai contoh:

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

    23637adalah logID, 0adalah indeks siri data carta, dan data terakhir"{\"close\":648,\"high\":650.5,\"low\":647,\"open\":650,\"x\":1575960300000}"adalah data log; Data ini adalah data K-line pada carta.

Plugin Perdagangan

Pengantar

Untuk meningkatkan fungsi terminal perdagangan dan memudahkan perdagangan manual, fungsi plug-in kini tersedia.

img

Prinsip Plugin

Prinsipnya sama dengan alat debugging: menghantar sekeping kod ke docker halaman terminal Trade untuk dijalankan, dan menyokong kembalinya carta dan jadual (alat debugging juga dapat menyokong selepas peningkatan). Fungsi adalah sama denganalat debugging, ia hanya boleh dilaksanakan selama 3 minit, tanpa caj. ia boleh merealisasikan beberapa fungsi kecil yang mudah, strategi yang kompleks masih perlu dijalankan dalam perdagangan sebenar.

Penulisan Plugin

Pada halaman New Strategy, tetapkan jenis strategi kepada:Trading Plugin, yang menyokongJavaScript, Python, cppdanMyLanguage.

img

Penggunaan Plugin

Plugin boleh menjalankan kod untuk tempoh masa, dan ia boleh melakukan beberapa operasi mudah, sepertiPerintah aisberg, Perintah menunggu, pembatalan pesanandanPengiraan pesananSama sepertialat debugging, ia menggunakanreturnBerikut adalah beberapa contoh, dan fungsi lain boleh diterokai sendiri.

  • Kembali ke snapshot kedalaman

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

  • Menggambar perbezaan antara tempoh

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

    Terdapat contoh lain dalam More Strategies, seperti:beli / jual dalam kuantiti kecil, Alamat Strategi.

Cara Menggunakan

  • Tambah modul pemalam terminal perdagangan Seperti yang ditunjukkan dalam gambar, buka menu menambah modul pada halaman terminal Trade, pemalam terminal dagangan dalamperpustakaan strategidari akaun FMZ semasa akan dipaparkan dalam senarai secara automatik, cari pemalam untuk ditambahkan dan klik Tambah.

    img

  • Jalankan pemalam Klik Execute, dan plugin terminal perdagangan akan mula berjalan.

  • Masa menjalankan pemalam Masa maksimum pemacu pemalam adalah 3 minit; dan ia akan berhenti berjalan secara automatik selepas melebihi 3 minit.

Alat Analisis Faktor Alfa

Pengantar

Rumus analisis merujuk kepada kaedah pengiraan harga pasaran di khalayak ramaialpha101daripadaworldquant: http://q.fmz.com/chart/doc/101_Formulaic_Alphas.pdf, yang pada dasarnya serasi dengan tatabahasanya (dengan penjelasan untuk ciri-ciri yang tidak dilaksanakan), dan telah ditingkatkan. Ia digunakan untuk cepat melakukan pengiraan pada siri masa dan mengesahkan idea,Gunakan Alamat.

Pambuka Halaman:

img

Fungsi & Operator

"{}" di bawah mewakili tempat penahan, semua ungkapan tidak sensitif huruf besar, dan x mewakili siri masa data

  • abs(x), log(x), sign(x)secara harfiah bermaksud nilai mutlak, logaritma dan tanda fungsi, masing-masing.

Pengendali berikut, termasuk+, -, *, /, >, <, juga memenuhi maksud standard mereka;==mewakili sama atau tidak;||bermaksud or;x? y: zmenunjukkan pengendali ternar.

  • rank(x): ranking cross-sections, mengembalikan peratusan lokasi; adalah perlu untuk menentukan kumpulan sasaran calon yang berbilang, yang tidak boleh dikira untuk pasaran tunggal dan akan mengembalikan hasil asal secara langsung.
  • delay(x, d): nilai sebelum tempoh d urutan.
  • sma(x, d): purata bergerak mudah tempoh d urutan.
  • correlation(x, y, d): pekali korelasi siri masa x dan y dalam tempoh d yang lalu.
  • covariance(x, y, d): kovarians siri masa x dan y dalam tempoh d yang lalu.
  • scale(x, a): ia menormalkan data, supayasum(abs(x)) = a(a lalai kepada 1).
  • delta(x, d): nilai semasa siri masa x tolak nilai sebelum tempoh d.
  • signedpower(x, a): x^a.
  • decay_linear(x, d): purata bergerak tempoh d bertingkat siri masa x, dengan berat adalah d, d-1, d-2... 1 (normal).
  • indneutralize(x, g): pemprosesan neutral untuk klasifikasi industri g, kini tidak disokong.
  • ts_{O}(x, d): melakukan operasi O pada siri masa x dalam tempoh d yang lalu (O secara khusus boleh mewakili min dan max, dan lain-lain, diperkenalkan kemudian), d akan ditukar kepada bilangan bulat.
  • ts_min(x, d): nilai minimum untuk tempoh d yang lalu.
  • ts_max(x, d): nilai maksimum untuk tempoh d yang lalu.
  • ts_argmax(x, d): ts_max(x, d) position.
  • ts_argmin(x, d): ts_min(x, d) position.
  • ts_rank(x, d): pemisahan nilai siri masa d tempoh yang lalu (peratusan pemisahan).
  • min(x, d): ts_min(x, d).
  • max(x, d): ts_max(x, d).
  • sum(x, d): jumlah tempoh d yang lalu.
  • product(x, d): hasil daripada tempoh d yang lalu.
  • stddev(x, d): penyimpangan piawai tempoh d yang lalu.

Data Masukan

Data input tidak sensitif huruf besar; data lalai adalah simbol yang dipilih di halaman web, atau ia boleh ditentukan secara langsung, sepertibinance.ada_bnb

  • returns: pulangan harga penutupan.
  • open, close, high, low, volume: iaitu harga buka, harga tutup, harga tertinggi, harga terendah dan jumlah dagangan dalam tempoh itu.
  • vwap: harga pelaksanaan berwajaran jumlah, belum dilaksanakan, yang kini merupakan harga penutupan.
  • cap: jumlah nilai pasaran, belum dilaksanakan.
  • IndClass: klasifikasi industri, belum dilaksanakan.

Lain-lain

Pengeluaran hasil berbilang (diungkapkan oleh senarai) sekaligus disokong; contohnya,[sma(close, 10), sma(high, 30)]Selain memasukkan data siri masa, ia juga boleh digunakan sebagai kalkulator mudah.

Lampiran

Protokol Am

Untuk platform FMZ Quant Trading yang belum mengkapsulkan antara muka API pertukaran, ia boleh diakses dengan menulis program pemalam protokol umum. Anda boleh menggunakan protokol umum ini untuk mengakses mana-mana pertukaran yang menyediakan antara muka API untuk perdagangan, dan dua protokol berikut disokong:

Perbezaan antaraFIXprotokol plug-in program danRESTprotokol plug-in program hanya interaksi antara protokol plug-in program dan pertukaran antara muka. Protokol plug-in program mempunyai yang sama butiran pemprosesan interaksi program docker dan format data sebagai FMZ Quant. Untuk butiran, sila rujuk kepada contoh dalam pautan di atas.

Terminal Perdagangan

Platform Perdagangan Kuantum FMZ menyediakan modul dan boleh disesuaikanPerdagangananda boleh dengan bebas menambah pelbagai modul data dan modul fungsi dagangan, dan juga membangunkan modul kod mereka sendiri (plugin terminal dagangan). Dengan penggunaannya yang sangat fleksibel dan percuma, ia juga sangat memudahkan pengguna perdagangan manual dan perdagangan semi-programatik. Pelbagai modul pada halaman Trade boleh diseret dan diperbesar, tetapan pasangan dagangan dan bursa yang terikat oleh modul boleh diubah suai, dan beberapa modul jenis yang sama boleh ditambah.

img

Alat Penyempurnaan

Alat Debughalaman menyediakan persekitaran untuk cepat menguji kod oleh bot, menyokong hanyaJavaScript currently.

img

Pengeditan Jauh

Ia menyokong kod strategi penyelarasan jauh editor tempatan ke platform FMZ Quant Trading, dan ia menyokongSublime Text/Atom/Vim/VSCodePada halaman penyuntingan strategi, klik Remote Edit untuk membuka butang alamat muat turun pemalam untuk memaparkan kunci penyegerakan jauh (token) strategi semasa.

img

Klik Update key untuk menyegarkan paparan kunci semasa, dan klik Delete Key untuk memadam kunci rahsia (token) strategi semasa.

img

Kaedah pemasangan pemalam editor yang berbeza sedikit berbeza. Anda boleh klik butang muat turun untuk melompat ke item pemalam penyegerakan jauh tertentu.

img

Parameter Bot Import & Eksport

img

Apabila menjalankan perdagangan langsung, anda perlu menyimpan data parameter konfigurasi bot sebenar, anda boleh klik butang Export. parameter strategi yang dieksport akan disimpan dalamJSONfile, dan konfigurasi parameter strategi yang dieksport juga boleh diimport ke bot sebenar lagi. Klik butang Import untuk mengimport parameter bot strategi yang disimpan ke bot sebenar semasa. Kemudian, klik Save untuk menyimpan.

Strategy Import & Eksport Fail

img

  • Muat turun kod sumber Mengeksport kod sumber strategi, dan jenis fail eksport adalah berdasarkan bahasa pengaturcaraan strategi.js; strategi python mengeksport fail dengan sambunganpy; C ++ strategi mengeksport fail dengan sambungancpp; Mylanguage strategi mengeksport fail dengan sambungantxt. Perhatikan bahawa hanya kod sumber strategi yang dieksport, tidak termasuk parameter strategi, rujukan templat, dll.

  • Strategi Eksport Mengeksport keseluruhan strategi, termasuk semua maklumat strategi, seperti kod sumber strategi dan reka bentuk parameter.xml file.

  • Strategi Import Gunakanxmlfile yang dieksport oleh fungsi Export, dan klik butang Import pada halaman penyuntingan strategi untuk memilihxmlSelepas mengimport, anda perlu klik butang Save untuk menyimpan strategi.

Sokongan Berbilang Bahasa

Nama strategi dan penerangan parameter strategi boleh ditulis dalamChinese|English, dipaparkan dalam bahasa yang dikenali oleh halaman web secara automatik.

img

img

Di tempat lain, seperti:penerangan strategi, arahan penggunaandan teks lain dalamMarkdownformat, menggunakan[trans]Chinese|English[/trans]atau[trans]Chinese||English[/trans]juga dapat mencapai kesan pengenalan automatik. Kesan contoh di atas ditunjukkan dalam gambar berikut:

  • Paparan halaman dalam bahasa Cina:img

  • Paparan halaman dalam bahasa Inggeris:img

Selepas menukar bahasa, ia akan mengambil kesan selepas menyegarkan halaman web.

Fungsi yang boleh menulis rentetan dalam kod strategi juga menyokong pertukaran bahasa, seperti fungsiLog, fungsiLogStatus, dan lain-lain

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]");
}

Pasaran Simulasi WexApp

  • Operasi 24 jam tanpa henti, sistem pencocokan perdagangan yang kuat, mensimulasikan perdagangan sebenar.
  • Bot pembuat pasaran yang kuat yang menyediakan kecairan yang baik dan kedalaman buku pesanan.
  • Sokongan antara muka API lengkap, bukan sahaja boleh diuji pada FMZ Quant untuk perdagangan kuantitatif yang disimulasikan, tetapi juga boleh menyambung ke antara muka API sendiri, alamat:WexApp.

Parameter Program Docker

Selepas memuat turun perisian docker, fail pelaksanaan selepas dekompresi (nama fail:robot) adalah program docker; parameter boleh ditentukan untuk program docker, semasa menggunakan docker.

  • -v: periksa maklumat termasuk versi dan masa kompilasi program docker semasa. Perintah pelaksanaan lengkap adalah berdasarkanApple Mac System: ./robot -v.
  • -s: alamat yang ditentukan untuk berkomunikasi dengan platform FMZ Quant Trading semasa menjalankan program docker. Perintah pelaksanaan lengkap adalah berdasarkanApple Mac System: ./robot -s node.fmz.com/xxxxxxx; xxxxxxxadalah ID pengenalan unik setiap akaun di platform Dagangan Kuantum FMZ; selepas menjalankan perintah, akan muncul permintaan untuk memasukkan kata laluan untuk akaun platform Dagangan Kuantum FMZ yang sepadan.
  • -p: anda boleh secara langsung menentukan parameter dalam perintah menjalankan untuk memasukkan kata laluan, yang tidak disyorkan, kerana parameter kata laluan akan ditinggalkan dalam rekod sistem semasa.node.fmz.com/xxxxxxxialah:abc123456. Perintah pelaksanaan lengkap adalah berdasarkanApple Mac System: ./robot -s node.fmz.com/xxxxxxx -p abc123456.
  • -n: melampirkan maklumat label kepada program docker yang sedang berjalan. Perintah pelaksanaan lengkap adalah berdasarkanApple Mac System: ./robot -n macTest -s node.fmz.com/xxxxxxx. akan adamacTestlabel teks dalam maklumat docker pada halaman pengurusan platform docker.
  • -l: cetak senarai pertukaran yang disokong oleh docker semasa. Perintah pelaksanaan lengkap adalah berdasarkanApple Mac System: ./robot -l, iaitu, nama pertukaran yang disokong boleh output.

Penyebab Selalunya untuk Kesalahan Bot & Keluar Abnormal

  • Kesalahan tatabahasa statik strategi (kesalahan sedemikian adalah jelas, dan biasanya anda boleh melihat tanda ralat di halaman penyuntingan strategi), yang boleh dijumpai dan diperbetulkan semasa ujian belakang.
  • Kesalahan semasa pelaksanaan strategi, contoh yang paling biasa adalah penggunaan langsung nilai pulangan fungsi tanpa membuat penghakiman undang-undang.
  • Terlalu banyak kandungan yang tidak boleh dikumpulkan sampah disimpan dalam pembolehubah global, mengakibatkan penggunaan memori yang berlebihan.
  • Apabila menggunakan asinkronexchange.Gofungsi, tidak ada yang munasabahwaituntuk menunggu akhir coroutine semasa operasi, mengakibatkan sebilangan besar coroutines.
  • Terlalu banyak lapisan panggilan fungsi rekursif menyebabkan saiz timbunan coroutines melebihi.
  • Kesalahan perniagaan antara muka dan kesalahan permintaan rangkaian, dan lain-lain; mesej ralat sedemikian akan memaparkan maklumat, termasuk nama objek pertukaran yang berkaitan, nama fungsi, mesej dan sebab yang berkaitan dengan ralat, dan maklumat lain. Kesalahan sedemikian tidak akan menyebabkan penghentian yang tidak normal dalam perdagangan sebenar (kesalahan sedemikian biasanya menyebabkan, tetapi bukan penyebab langsung.program pengecualian yang disebabkan oleh penggunaan langsung tanpa antara muka kembali nilai untuk menilai kesahihan).
  • Kesalahan lapisan bawah platform, contoh biasa adalahDecrypt: Secret key decrypt failed, yang akan menyebabkan kegagalan untuk memulakan perdagangan hidup. Sebab kesilapan adalah bahawa pengubahsuaian kata laluan akaun FMZ menyebabkan semua yang dikonfigurasikanAPI KEYUntuk menyelesaikan masalah ini,API KEYperlu dikonfigurasi semula, dan docker perlu dihidupkan semula.
  • Apabila menyewa strategi Python, satu ralat dilaporkan kerana ketidakcocokan versi antara Python yang disulitkan oleh platform dan Python dalam runtime strategi:ValueError: bad marshal data (unknown type code). Tingkatkan atau memasang persekitaran Python yang dijalankan oleh strategi ke salah satu versi yang disokong oleh strategi:Python 2.7, Python 3.5danPython 3.6.
  • interruptkesalahan; kesilapan adalah kerana pengguna mengklikHentikan botbutang pada halaman Bot apabila program melakukan operasi (seperti mengakses antara muka platform), dan bot berhenti dan mengganggu mesej ralat yang dicetak oleh operasi semasa.

Bot & Kumpulan Strategi

Pada halaman Bot dan Strategy platform FMZ Quant Trading, anda boleh klikTetapan kumpulanbutang di sebelah kanan untuk menguruskan strategi dan perdagangan sebenar dalam kumpulan.Templat, Strategi JavaScriptdanStrategi untuk Backtestboleh dibahagikan kepada tiga kumpulan, masing-masing.

Sub-Akaun & Bot Langsung

Sub-Akaun Selepas log masuk ke platform, klik Dashboard dan Account untuk melompat ke akaun FMZ [halaman pengurusan] (https://www.fmz.com/m/accountKlik Sub-Account untuk melihat halaman penciptaan sub-account, pilih bot yang boleh diakses oleh sub-account yang ditambahkan dikeizinan yang adakawalan, dan menetapkan sub-akaunnama penggunadankata laluan log masuk sub-akaundalamMaklumat penggunaklik butang Tambah sub-ahli untuk membuat sub-akaun. Sub-akaun yang ditambah akan dipaparkan pada halaman semasa dan boleh diubahsuai, dikunci/dibuka, dan dihapus.

Sub-akaun mempunyai keizinan terhad; hanya bot yang dibenarkan dalam tetapankeizinan yang adaboleh dilihat dalam sub-akaun. Bot yang dibenarkan mempunyai kuasa untuk mengubah suai parameter, menghentikan dan memulakan semula perdagangan langsung, tetapi ia tidak boleh mengubah objek pertukaran yang dikonfigurasikan oleh bot. Senario penggunaan sub akaun biasanya:

  • A. Ia mudah untuk log masuk dan menguruskan apabila pasukan kuantitatif menguruskan pelbagai strategi bot.
  • B. Debugging apabila strategi adalah untuk disewa.

Live Trading View Dalam senarai bot platform FMZHalaman bot, klik butang Public untuk memaparkan bot baris semasa secara terbuka.

    1. Tampilkan bot di [Live View] (https://www.fmz.com/live) halaman yang diterbitkan di platform FMZ, selepas mengklik butang Publik dan pilihBahagian Orang ramai.
    1. Buat pautan peribadi untuk dilihat. Selepas mengklik butang Public dan memilihBahagian dalaman, anda boleh menetapkan tempoh kelayakan untuk menjana pautan peribadi untuk log masuk ke halaman pandangan langsung peribadi bot strategi.

Strategy Sharing & Sewa

PadaStrategihalaman, selepas mengklik butang Action di sebelah kanan strategi, menu yang muncul mempunyai pilihan untuk berkongsi dan menyewa.

Perkongsian Strategi

  • Perkongsian Awam Selepas mengklik butang Berkongsi, kotak dialog akan muncul, dan anda boleh memilih Berkongsi Awam, jadi strategi itu sepenuhnya dikongsi di platform More Strategies, dan mana-mana pengguna boleh menyalin strategi.

  • Perkongsian Dalaman Selepas mengklik butang Sharing, kotak dialog akan muncul, dan anda boleh memilih Internal Sharing.Alamat halaman salinandanKod salinanPengguna yang memerlukan strategi ini hanya perlu menggunakanAlamat halaman salinanpautan, untuk log masuk kehalaman salinandan masukkan kod salinan untuk mendapatkan strategi. selepas mendapatkan strategi, ia akan muncul di halaman Strategy secara automatik.

Strategi Penyewaan

  • Jualan Awam Selepas mengklik butang Rent, kotak dialog akan muncul, dan anda boleh memilih Public Sale. Strategi boleh digunakan untuk penyenaraian (tertakluk kepada kelulusan).

  • Jualan dalaman Selepas mengklik butang Rent, kotak dialog akan muncul, dan anda boleh memilih Internal Sale.Alamat halaman pendaftarandanToken strategiPengguna yang memerlukan strategi ini hanya perlu menggunakanAlamat halaman pendaftaranpautan, untuk log masuk kehalaman pendaftaran. Kemudian, masukkan token strategi untuk mendapatkan hak untuk menggunakan strategi. Strategi juga akan dipaparkan pada halaman Strategy, tetapi hanya dengan hak untuk menggunakan backtest dan bot. Maklumat seperti kod sumber strategi tidak dapat diakses.

Nota penting: Apabila mencipta dan mengedarkanToken strategi, sila pastikan untuk mengesahkan dengan teliti sama ada ia adalah strategi token atau copy code, supaya tidak berkongsi strategi secara keliru.

Algoritma Sharpe dalam Sistem Ujian Balik

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

Arahan Pertukaran Khas

  • Futures_Binance Ia menyokong mod dua kedudukan niaga hadapan Binance; anda boleh menggunakanexchange.IOuntuk menukar:

    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);
    }
    

    Ia menyokong beralih antara kedudukan bersilang / kedudukan terpencil

    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 Ia menyokong pengubahsuaian alamat Huobi Futures yang mengambil bahagian dalam tandatangan, yang tidak ditukar secara lalai.exchange.IO("signHost", "")untuk menetapkan rentetan kosong. Penggunaanexchange.IO("signHost", "https://aaa.xxx.xxx")untuk menukar alamat pangkalan Huobi Futures yang mengambil bahagian dalam pengesahan tandatangan. Penggunaanexchange.IO("base", "https://bbb.xxx.xxx")atauexchange.SetBase("https://bbb.xxx.xxx")untuk menukar alamat asas antara muka platform. Apabila pasangan dagangan ditetapkan untukXXX_USDT, gunakan fungsiexchange.SetContractType("swap")untuk menetapkan kod kontrak kepadaswapkontrak kekal, menggunakanexchange.IO("cross", true)boleh beralih keUSDT- Margined kontrak kekal dalam mod kedudukan crossed.exchange.IO("cross", false)untuk beralih semula ke mod kedudukan terpencil. lalai awal adalah mod kedudukan terpencil.

  • Huobi Ia menyokong token leverage spot Huobi, seperti:LINK*(-3); kod yang ditakrifkan oleh bursa adalah:link3susdt, yang ditulis apabila FMZ menetapkan pasangan daganganLINK3S_USDT. Ia juga mungkin untuk menukar pasangan dagangan dalam strategi:

    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 antara muka boleh beralih ke persekitaran ujian bot simulasi OKX; menggunakanexchange.IO("simulate", true)Jika anda ingin beralih ke persekitaran perdagangan sebenar, gunakanexchange.IO("simulate", false)Permulaan lalai adalah persekitaran perdagangan sebenar. Ia menyokong menukar mod margin akaun; menggunakanexchange.IO("cross", true)untuk beralih ke mod kedudukan bersilang, dan menggunakanexchange.IO("cross", false)untuk beralih ke mod kedudukan terpencil, lalai awal adalah mod kedudukan bersilang.

  • Futures_Bibox Penggunaanexchange.IO("cross", true)untuk beralih ke mod kedudukan bersilang, dan menggunakanexchange.IO("cross", false)untuk beralih ke mod kedudukan terpencil; lalai awal adalah mod kedudukan bersilang. Bursa tidak menyokong pertanyaan pesanan yang sedang menunggu semasa dan antara muka untuk menyoal rekod perdagangan sejarah pasaran, jadiGetOrdersdanGetTradesfungsi tidak disokong.

  • Futures_Bitget Penggunaanexchange.IO("cross", true)untuk beralih ke mod kedudukan bersilang, dan menggunakanexchange.IO("cross", false)untuk beralih ke mod kedudukan terpencil.

  • Futures_AOFEX Penggunaanexchange.IO("cross", true)untuk beralih ke mod kedudukan bersilang, dan menggunakanexchange.IO("cross", false)untuk beralih ke mod kedudukan terpencil.

  • Futures_MEXC Penggunaanexchange.IO("cross", true)untuk beralih ke mod kedudukan bersilang, dan menggunakan` ` pertukaran.IO("bersalib",


Lebih lanjut