Tài nguyên đang được tải lên... tải...

Hướng dẫn API FMZ

Tác giả:Không, Tạo: 2020-04-20 10:19:00, Cập nhật: 2023-04-12 14:44:56

xchangeList()

GetExchangeList()trả về danh sách các sàn giao dịch được hỗ trợ và thông tin cấu hình cần thiết.

  • Parameter Không có

  • Giá trị trả lại

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

DeleteNode(Nid)xóa nút dock (IDNid) tương ứng vớiAPI KEYtrong yêu cầu của tài khoản nền tảng giao dịch FMZ Quant.

  • ParameterNidlà loại số nguyên, cụ thể là dockerID.

  • Giá trị trả về

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

DeleteRobot(...)

DeleteRobot(RobotId, DeleteLogs)xóa robot với ID được chỉ định (robotID: RobotId) tương ứng vớiAPI KEYtrong yêu cầu theo tài khoản FMZ Quant.

  • ParameterRobotIdlà loại số nguyên, cụ thể là robotIDsẽ bị xóa.DeleteLogslà kiểu Boolean; tập hợpDeleteLogsđể quyết định xem có xóa nhật ký hay không;truechỉ ra việc xóa nhật ký.

  • Giá trị trả về

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

GetStrategyList()

GetStrategyList()thu thập các thông tin chiến lược tương ứng vớiAPI KEYtrong yêu cầu của tài khoản nền tảng giao dịch FMZ Quant.

  • Parameter Không có

  • Giá trị trả lại

    {
        "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 ((Cài đặt)

NewRobot(Settings)tạo một bot mới theo các thiết lập tham số, tương ứng vớiAPI KEYtrong yêu cầu của tài khoản FMZ Quant.

  • ParameterSettingslà củaJSONloại đối tượng.Settingslà mộtJSONđối tượng được cấu hình bởi bot.

    CácSettingsmô tả được giải thích như sau:

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

    Lưu ý: Khi bạn sử dụng thông tin nhạy cảm, như nền tảngAPI KEY, bao gồm"meta":{"AccessKey":"xxx","SecretKey":"yyy"}trong cấu hình củaeid, bạn nên biết FMZ không lưu trữ dữ liệu. Dữ liệu sẽ được gửi trực tiếp đến chương trình docker, vì vậy thông tin này phải được cấu hình mỗi khi bot được tạo hoặc khởi động lại.

    Để khởi động lại bot sử dụng plugin để hỗ trợ nền tảng, Khi cấu hìnhSettingstham số, bạn nên thực hiện các thiết lập sau đây cho cácexchangesthuộc tính:

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

    labelthuộc tính là để thiết lập một nhãn cho đối tượng trao đổi truy cập bởi các giao thức chung hiện tại, có thể được thu thập bởi cácexchange.GetLabel()trong chiến lược.

  • Chiến lược thử nghiệm:

    • Parameter chiến lượcInterval

    • JavaScriptmã chiến lược

      function main(){
          Log(exchange.GetAccount())
          Log(exchange.GetTicker())
          Log(exchange.GetDepth())
          Log("Interval:", Interval)
      }
      
  • Giá trị trả lại

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

PluginRun ((Cài đặt)

PluginRun(Settings)sử dụng API mở rộng để gọicông cụ gỡ lỗi function.

  • ParameterSettingslà mộtJSONđối tượng, cụ thể là các cài đặt trong công cụ gỡ lỗi (Settingschứa mã thử nghiệm được viết trong thuộc tínhsource).

  • Mã thử nghiệmPythonví dụ:

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

    Lưu ý:{"eid": "OKEX", "pair": "ETH_BTC", "meta" :{"AccessKey": "123abc", "SecretKey": "123abc"}} {"eid": "Huobi", "pair": "BCH_BTC", "meta" :{"AccessKey": "123abc", "SecretKey": "123abc"}}Đối vớiexchangesthuộc tính trongcài đặt, thuộc tính chỉ cần được thiết lập thành 1, khi gọiPluginRungiao diện (chỉ có thể hỗ trợ một đối tượng trao đổi khi bạn sử dụng trang Debug Tool). Không có lỗi sẽ được báo cáo khi bạn đặt 2 đối tượng trao đổi trongcài đặt, nhưng một lỗi sẽ được báo cáo khi đối tượng trao đổi thứ hai được truy cập trong mã.

  • Giá trị trả lạiapi("PluginRun", settings)Kết quả trả về:

    {
        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)lấy thông tin nhật ký robot (robotID: robotId), tương ứng vớiAPI KEYtrong yêu cầu của tài khoản FMZ Quant.

  • Parameter

    Tên tham số Loại Nhận xét
    robotId số nguyên ID bot

    bảng Logtruy vấn dữ liệu Log của bảng cơ sở dữ liệu:

    Tên tham số Loại Nhận xét
    logMinId số nguyên ID tối thiểu của nhật ký
    logMaxId số nguyên ID tối đa của nhật ký
    LogOffset số nguyên Sau khi phạm vi được xác định bởi logMinId và logMaxId, logOffset offset (số hồ sơ được bỏ qua) bắt đầu được sử dụng như là vị trí khởi đầu để thu thập dữ liệu
    logLimit số nguyên Sau khi xác định vị trí khởi đầu, số lượng các bản ghi dữ liệu được chọn

    bảng Lợi nhuậntruy vấn dữ liệu Lợi nhuận của bảng cơ sở dữ liệu:

    Tên tham số Loại Nhận xét
    Lợi nhuận số nguyên ID hồ sơ tối thiểu
    lợi nhuậnMaxId số nguyên ID tối đa của bản ghi
    Lợi nhuận số nguyên Sự dịch chuyển (số lượng bản ghi được bỏ qua) bắt đầu được sử dụng như là vị trí bắt đầu
    Lợi nhuận số nguyên Sau khi xác định vị trí khởi đầu, số lượng các bản ghi dữ liệu được chọn

    Biểu đồ bảngtruy vấn dữ liệu biểu đồ của bảng cơ sở dữ liệu:

    Tên tham số Loại Nhận xét
    biểu đồMinId số nguyên ID hồ sơ tối thiểu
    biểu đồMaxId số nguyên ID tối đa của bản ghi
    biểu đồOffset số nguyên Tiền bù
    chartLimit số nguyên số lượng hồ sơ cần thu thập
    chartUpdateBaseId số nguyên truy vấn ID cơ sở được cập nhật
    chartUpdateDate số nguyên Đăng ký dữ liệu cập nhật dấu thời gian, sẽ lọc các bản ghi lớn hơn dấu thời gian này

    Tóm lạitruy vấn dữ liệu của thanh trạng thái:

    Nó truy vấn dữ liệu thanh trạng thái của bot. Loại tham số là số nguyên. Thiết lập 0 có nghĩa là không cần phải truy vấn thông tin thanh trạng thái, và thiết lập số không bằng không chỉ ra số byte của thông tin thanh trạng thái cần được truy vấn (đối diện không giới hạn số lượng dữ liệu, vì vậy bạn có thể chỉ định một số lớn hơnsummaryLimittham số để có được tất cả thông tin thanh trạng thái). Dữ liệu thanh trạng thái được lưu trữ trong dữ liệu trả vềsummary.

    Pythonví dụ:

    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"
    
  • Giá trị trả lại Dữ liệu được trả về:

    {
        "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
        }
    }
    
  • Bảng nhật ký chiến lược trong cơ sở dữ liệu

    CácArrMô tả giá trị thuộc tính trong dữ liệu kết quả được trả về ở trên:

    "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 Đặt hàng giá cả số tiền thêm ngày hợp đồngLoại hướng
    3977 3 Tương lai_OKCoin "" 0 0 Bán ((688.9, 2): 20016 1526954372591 "" ""
    3976 5 "" "" 0 0 OKCoin:this_week too many positions, long: 2 1526954372410 "" ""

    extralà thông báo đính kèm của nhật ký in.

    Các loại gỗ cụ thể được đại diện bởilogTypegiá trị:

    logType: 0 1 2 3 4 5 6
    Ý nghĩa của logType: Mua Bán hàng RETRACT ERROR Lợi nhuận Thông điệp Bắt đầu lại
    Ý nghĩa Trung Quốc Lưu trữ loại lệnh mua Ghi chép loại lệnh bán Tránh đi. Lỗi Thu nhập Ký hiệu Khởi động lại
  • Bảng nhật ký biểu đồ doanh thu trong cơ sở dữ liệu Dữ liệu trong bảng ghi nhật ký biểu đồ phù hợp với nhật ký doanh thu trong bảng ghi nhật ký chiến lược.

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

    Lấy một trong các dữ liệu nhật ký như một ví dụ:

    [202, 2515.44, 1575896700315]
    

    202như logID; 2515.44Như giá trị doanh thu;1575896700315như dấu thời gian.

  • Bảng nhật ký biểu đồ trong cơ sở dữ liệu

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

    Lấy một trong các dữ liệu nhật ký như một ví dụ:

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

    23637là nhật kýID, 0là chỉ số của chuỗi dữ liệu biểu đồ, và dữ liệu cuối cùng"{\"close\":648,\"high\":650.5,\"low\":647,\"open\":650,\"x\":1575960300000}"là dữ liệu nhật ký; Dữ liệu này là dữ liệu đường K trên biểu đồ.

Plugin giao dịch

Lời giới thiệu

Để cải thiện chức năng của trạm giao dịch và tạo điều kiện giao dịch bằng tay, hiện có một chức năng plug-in.

img

Nguyên tắc của Plugin

Nguyên tắc tương tự như công cụ gỡ lỗi: gửi một đoạn mã đến docker của trang đầu cuối Trade để thực hiện và hỗ trợ trả về biểu đồ và bảng (công cụ gỡ lỗi cũng có thể hỗ trợ sau khi nâng cấp).công cụ gỡ lỗi, nó chỉ có thể được thực hiện trong 3 phút, mà không cần sạc. nó có thể nhận ra một số chức năng nhỏ đơn giản, chiến lược phức tạp vẫn cần chạy trong giao dịch thực tế.

Viết plugin

Trên trang New Strategy, đặt kiểu chiến lược là:Trading Plugin, hỗ trợJavaScript, Python, cppMyLanguage.

img

Sử dụng Plugin

Plugin có thể thực hiện mã trong một khoảng thời gian, và nó có thể thực hiện một số hoạt động đơn giản, chẳng hạn nhưlệnh băng trôi, lệnh đang chờ, hủy lệnhtính toán lệnhTương tự nhưcông cụ gỡ lỗi, nó sử dụngreturnĐây là một vài ví dụ, và các chức năng khác có thể được khám phá bởi chính bạn.

  • Trở lại ảnh chụp sâu

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

  • Kích thước chênh lệch giữa các giai đoạn

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

    Có những ví dụ khác trong More Strategies, chẳng hạn nhưmua / bán với số lượng nhỏ, Địa chỉ chiến lược.

Cách sử dụng

  • Thêm module plugin của giao dịch Như được hiển thị trong hình, mở menu thêm module trên trang đầu cuối Trade, các plugin đầu cuối giao dịch trongthư viện chiến lượccủa tài khoản FMZ hiện tại sẽ được hiển thị trong danh sách tự động, tìm plugin để được thêm và nhấp vào Add.

    img

  • Chạy plugin Nhấp vào Execute, và plugin đầu cuối giao dịch sẽ bắt đầu chạy.

  • Thời gian chạy plugin Thời gian chạy tối đa của plugin là 3 phút; và nó sẽ ngừng chạy tự động sau khi vượt quá 3 phút.

Công cụ phân tích yếu tố alpha

Lời giới thiệu

Công thức phân tích đề cập đến phương pháp tính giá thị trường trong công chúngalpha101củaworldquant: http://q.fmz.com/chart/doc/101_Formulaic_Alphas.pdf, về cơ bản tương thích với ngữ pháp của nó (với lời giải thích cho các tính năng chưa được thực hiện), và đã được nâng cao. Nó được sử dụng để nhanh chóng thực hiện tính toán về chuỗi thời gian và xác nhận ý tưởng,Sử dụng địa chỉ.

Trang giới thiệu:

img

Chức năng và người vận hành

"{}" bên dưới đại diện cho vị trí giữ, tất cả các biểu thức không nhạy cảm với chữ cái lớn và x đại diện cho chuỗi thời gian dữ liệu

  • abs(x), log(x), sign(x)nghĩa đen là giá trị tuyệt đối, logaritm và hàm ký hiệu, tương ứng.

Các nhà khai thác sau đây, bao gồm+, -, *, /, >, <, cũng đáp ứng ý nghĩa của các tiêu chuẩn của họ;==đại diện cho tương đương hoặc không;||có nghĩa là or;x? y: zchỉ ra toán tử ba.

  • rank(x): xếp hạng các phần cắt ngang, trả về tỷ lệ phần trăm của vị trí; cần phải xác định nhiều nhóm mục tiêu ứng cử viên, không thể được tính toán cho một thị trường duy nhất và sẽ trả về kết quả ban đầu trực tiếp.
  • delay(x, d): giá trị trước thời gian d của chuỗi.
  • sma(x, d): trung bình di chuyển đơn giản của thời gian d của chuỗi.
  • correlation(x, y, d): hệ số tương quan của chuỗi thời gian x và y trong d giai đoạn trước.
  • covariance(x, y, d): sự tương đồng của chuỗi thời gian x và y trong d giai đoạn trước.
  • scale(x, a): nó bình thường hóa dữ liệu, đểsum(abs(x)) = a(a mặc định là 1).
  • delta(x, d): giá trị hiện tại của chuỗi thời gian x trừ đi giá trị trước d giai đoạn.
  • signedpower(x, a): x^a.
  • decay_linear(x, d): trung bình động d-thời gian được cân nhắc của chuỗi thời gian x, với trọng lượng là d, d-1, d-2... 1 (được bình thường hóa).
  • indneutralize(x, g): chế biến trung tính cho phân loại ngành g, hiện không được hỗ trợ.
  • ts_{O}(x, d): thực hiện các hoạt động O trên chuỗi thời gian x trong d giai đoạn trước (O có thể đặc biệt đại diện cho minmax, v.v., được giới thiệu sau), d sẽ được chuyển đổi thành số nguyên.
  • ts_min(x, d): giá trị tối thiểu của d thời gian qua.
  • ts_max(x, d): giá trị tối đa của d thời gian qua.
  • ts_argmax(x, d): ts_max(x, d) position.
  • ts_argmin(x, d): ts_min(x, d) position.
  • ts_rank(x, d): sắp xếp các d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d
  • min(x, d): ts_min(x, d).
  • max(x, d): ts_max(x, d).
  • sum(x, d): tổng của d giai đoạn trước.
  • product(x, d): sản phẩm của d giai đoạn trước.
  • stddev(x, d): độ lệch chuẩn của d giai đoạn trước.

Dữ liệu đầu vào

Dữ liệu đầu vào không nhạy cảm với chữ cái lớn; dữ liệu mặc định là biểu tượng được chọn trên trang web, hoặc nó có thể được chỉ định trực tiếp, chẳng hạn nhưbinance.ada_bnb

  • returns: trả về giá đóng cửa.
  • open, close, high, low, volume: cụ thể là giá mở, giá đóng cửa, giá cao nhất, giá thấp nhất và khối lượng giao dịch trong thời gian đó.
  • vwap: giá thực hiện được cân nhắc theo khối lượng, chưa được thực hiện, hiện là giá đóng cửa.
  • cap: tổng giá trị thị trường, chưa được thực hiện.
  • IndClass: phân loại ngành, chưa được thực hiện.

Các loại khác

Việc xuất nhiều kết quả (được thể hiện bằng danh sách) cùng một lúc được hỗ trợ; ví dụ:[sma(close, 10), sma(high, 30)]Ngoài việc nhập dữ liệu chuỗi thời gian, nó cũng có thể được sử dụng như một máy tính đơn giản.

Phụ lục

Giao ước chung

Đối với nền tảng FMZ Quant Trading chưa đóng gói giao diện API trao đổi, nó có thể được truy cập bằng cách viết một chương trình plug-in giao thức chung. Bạn có thể sử dụng giao thức chung này để truy cập bất kỳ sàn giao dịch nào cung cấp giao diện API cho giao dịch và hai giao thức sau đây được hỗ trợ:

Sự khác biệt giữaFIXgiao thức plug-in chương trình vàRESTChương trình protocol plug-in chỉ là sự tương tác giữa chương trình protocol plug-in và giao diện trao đổi. Chương trình protocol plug-in có cùng một quy trình xử lý chi tiết về tương tác chương trình docker và định dạng dữ liệu như FMZ Quant. Để biết chi tiết, vui lòng tham khảo các ví dụ trong các liên kết trên.

Địa điểm giao dịch

Nền tảng FMZ Quant Trading cung cấp một mô-đun và tùy chỉnh Thương mạitrang. Bạn có thể tự do thêm các mô-đun dữ liệu khác nhau và các mô-đun chức năng giao dịch, và thậm chí phát triển các mô-đun mã của riêng họ (trading terminal plugins). Với việc sử dụng rất linh hoạt và miễn phí, nó cũng tạo điều kiện cho người dùng giao dịch thủ công và giao dịch bán lập trình. Các mô-đun khác nhau trên trang Trade có thể được kéo và phóng to, cài đặt các cặp giao dịch và sàn giao dịch bị ràng buộc bởi các mô-đun có thể được sửa đổi và nhiều mô-đun cùng loại có thể được thêm vào.

img

Công cụ gỡ lỗi

Công cụ gỡ lỗitrang cung cấp một môi trường để nhanh chóng kiểm tra mã bởi bot, hỗ trợ chỉJavaScript currently.

img

Chỉnh sửa từ xa

Nó hỗ trợ các biên tập viên địa phương mã chiến lược đồng bộ hóa từ xa đến nền tảng FMZ Quant Trading, và nó hỗ trợSublime Text/Atom/Vim/VSCodetrên trang chỉnh sửa chiến lược, bấm Remote Edit để mở ra nút địa chỉ tải về plugin để hiển thị phím đồng bộ hóa từ xa (thẻ) của chiến lược hiện tại.

img

Nhấp vào Update key để làm mới màn hình khóa hiện tại, và nhấp vào Delete Key để xóa khóa bí mật (token) của chiến lược hiện tại.

img

Các phương pháp cài đặt plugin của các trình soạn thảo khác nhau hơi khác nhau. Bạn có thể nhấp vào nút tải xuống để chuyển sang mục plugin đồng bộ từ xa cụ thể.

img

Các thông số của bot nhập & xuất

img

Khi chạy giao dịch trực tiếp, bạn cần lưu dữ liệu tham số của cấu hình bot thực, bạn có thể nhấp vào nút Export.JSONfile, và cấu hình tham số chiến lược xuất khẩu cũng có thể được nhập vào bot thực sự một lần nữa. Nhấp vào nút Import để nhập các tham số bot chiến lược được lưu vào bot thực hiện. Sau đó, nhấp vào Save để lưu.

Các tập tin nhập khẩu và xuất khẩu chiến lược

img

  • Tải mã nguồn Xuất khẩu mã nguồn chiến lược, và loại tệp xuất dựa trên ngôn ngữ lập trình chiến lược.js; chiến lược python xuất các tệp với phần mở rộngpy; C ++ chiến lược xuất các tệp với phần mở rộngcpp; Mylanguage chiến lược xuất các tệp với phần mở rộngtxtLưu ý rằng chỉ có mã nguồn chiến lược được xuất, không bao gồm các tham số chiến lược, tham chiếu mẫu, vv

  • Chiến lược xuất khẩu xuất toàn bộ chiến lược, bao gồm tất cả các thông tin chiến lược, chẳng hạn như mã nguồn chiến lược và thiết kế tham số.xml file.

  • Chiến lược nhập khẩu Sử dụngxmlfile được xuất bởi các chức năng Export, và nhấp vào nút Import trên trang chỉnh sửa chiến lược để chọnxmlSau khi nhập, bạn cần nhấp vào nút Save để lưu chiến lược.

Hỗ trợ đa ngôn ngữ

Tên chiến lược và mô tả tham số chiến lược có thể được viết trongChinese|English, hiển thị bằng ngôn ngữ được các trang web nhận ra tự động.

img

img

Ở những nơi khác, như:Mô tả chiến lược, hướng dẫn sử dụngvà các văn bản khác trongMarkdownđịnh dạng, sử dụng[trans]Chinese|English[/trans]hoặc[trans]Chinese||English[/trans]cũng có thể đạt được hiệu ứng nhận dạng tự động.

  • Hiển thị trang bằng tiếng Trung:img

  • Hiển thị trang bằng tiếng Anh:img

Sau khi chuyển đổi ngôn ngữ, nó sẽ có hiệu ứng sau khi làm mới trang web.

Các hàm có thể viết chuỗi trong mã chiến lược cũng hỗ trợ chuyển đổi ngôn ngữ, chẳng hạn như hàmLog, chức năngLogStatus, vv

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

Thị trường mô phỏng WexApp

  • Hoạt động không ngừng 24 giờ, hệ thống so sánh giao dịch mạnh mẽ, mô phỏng giao dịch thực.
  • Robot làm thị trường mạnh mẽ cung cấp thanh khoản tốt và chiều sâu của sổ lệnh.
  • Hỗ trợ giao diện API hoàn chỉnh, không chỉ có thể được thử nghiệm trên FMZ Quant để mô phỏng giao dịch định lượng, mà còn có thể kết nối với giao diện API của chính bạn, địa chỉ:WexApp.

Các tham số chương trình Docker

Sau khi tải xuống phần mềm docker, tệp thực thi sau khi giải nén (tên tệp:robot) là chương trình docker; các tham số có thể được chỉ định cho chương trình docker, khi triển khai docker.

  • -v: kiểm tra thông tin bao gồm phiên bản và thời gian biên dịch của chương trình docker hiện tại. Toàn bộ lệnh thực thi dựa trênApple Mac System: ./robot -v.
  • -s: địa chỉ được chỉ định để giao tiếp với nền tảng FMZ Quant Trading khi chạy chương trình docker. Toàn bộ lệnh thực thi dựa trênApple Mac System: ./robot -s node.fmz.com/xxxxxxx; xxxxxxxlà ID nhận dạng duy nhất của mỗi tài khoản trên nền tảng giao dịch FMZ Quant; sau khi thực hiện lệnh, sẽ có một nhắc nhập mật khẩu cho tài khoản nền tảng giao dịch FMZ Quant tương ứng.
  • -p: bạn có thể trực tiếp chỉ định tham số trong lệnh chạy để nhập mật khẩu, mà không được khuyến cáo, bởi vì các tham số mật khẩu sẽ được để lại trong bản ghi hệ thống hiện tại.node.fmz.com/xxxxxxxlà:abc123456. Toàn bộ lệnh thực thi dựa trênApple Mac System: ./robot -s node.fmz.com/xxxxxxx -p abc123456.
  • -n: đính kèm thông tin nhãn với chương trình docker đang chạy. Toàn bộ lệnh thực thi dựa trênApple Mac System: ./robot -n macTest -s node.fmz.com/xxxxxxxSẽ có mộtmacTestNhãn văn bản trong thông tin docker trên trang quản lý docker nền tảng.
  • -l: in danh sách trao đổi được hỗ trợ bởi docker hiện tại. Toàn bộ lệnh thực thi dựa trênApple Mac System: ./robot -l, tức là, tên của các sàn giao dịch được hỗ trợ có thể được xuất.

Nguyên nhân phổ biến cho lỗi bot & thoát bất thường

  • Chiến lược lỗi ngữ pháp tĩnh (những lỗi như vậy là hiển nhiên, và thường bạn có thể thấy dấu lỗi trên trang chỉnh sửa chiến lược), có thể được tìm thấy và sửa chữa trong quá trình backtest.
  • Lỗi thời gian chạy chiến lược, ví dụ phổ biến nhất là sử dụng trực tiếp giá trị trả về của hàm mà không đưa ra phán quyết pháp lý.
  • Quá nhiều nội dung không thể được thu gom rác được lưu trữ trong các biến toàn cầu, dẫn đến việc sử dụng bộ nhớ quá mức.
  • Khi sử dụng không đồng bộexchange.Gochức năng, không có hợp lýwaitđể chờ đợi kết thúc của coroutine trong quá trình hoạt động, dẫn đến một số lượng lớn coroutines.
  • Quá nhiều lớp gọi hàm tái diễn gây ra kích thước ngăn xếp vượt quá của coroutines.
  • Các lỗi giao diện kinh doanh và lỗi yêu cầu mạng, v.v.; các thông báo lỗi như vậy sẽ hiển thị thông tin, bao gồm tên đối tượng trao đổi có liên quan, tên chức năng, thông báo và lý do liên quan đến lỗi và thông tin khác.ngoại lệ chương trình gây ra bởi việc sử dụng trực tiếp mà không có giao diện trả về giá trị để đánh giá tính hợp pháp).
  • Lỗi dưới lớp nền tảng, ví dụ phổ biến làDecrypt: Secret key decrypt failedLý do cho lỗi là thay đổi mật khẩu tài khoản FMZ gây ra tất cả các cấu hình giao dịchAPI KEYĐể giải quyết vấn đề, cácAPI KEYcần được cấu hình lại, và docker cần được khởi động lại.
  • Khi thuê một chiến lược Python, một lỗi được báo cáo do không tương thích phiên bản giữa Python được mã hóa bởi nền tảng và Python trong thời gian chạy chiến lược:ValueError: bad marshal data (unknown type code). Nâng cấp hoặc cài đặt môi trường Python được chạy bởi chiến lược sang một trong những phiên bản được hỗ trợ bởi chiến lược:Python 2.7, Python 3.5Python 3.6.
  • interruptlỗi; lỗi là bởi vì người dùng nhấp vàoNgừng robotnút trên trang Bot khi chương trình thực hiện một hoạt động (chẳng hạn như truy cập giao diện nền tảng), và bot dừng lại và gián đoạn thông báo lỗi được in bởi hoạt động hiện tại.

Bot & Nhóm chiến lược

Trên trang Bot và trang Strategy của nền tảng FMZ Quant Trading, bạn có thể nhấpThiết lập nhómnút bên phải để quản lý các chiến lược và giao dịch thực tế trong các nhóm.Mô hình, Chiến lược JavaScriptChiến lược cho Backtestcó thể được chia thành ba nhóm.

Tài khoản phụ & Bot trực tiếp

Tài khoản phụ Sau khi đăng nhập vào nền tảng, hãy nhấp vào DashboardAccount để chuyển sang tài khoản FMZ [trang quản lý] (https://www.fmz.com/m/accountNhấp vào Sub-Account để xem trang tạo tài khoản phụ, chọn bot mà tài khoản phụ được thêm vào có thể truy cập trongquyền có sẵnkiểm soát, và thiết lập các tài khoản phụtên người dùngmật khẩu đăng nhập tài khoản phụtrongThông tin người dùngcontrol. Nhấp vào nút Add sub-member để tạo một tài khoản con. Tài khoản con được thêm sẽ được hiển thị trên trang hiện tại và có thể được modified, locked/unlocked, và deleted.

Tài khoản con có quyền hạn hạn chế; chỉ có các bot được ủy quyền trong cài đặt củaquyền có sẵncó thể thấy trong các tài khoản phụ. Bot được ủy quyền có quyền sửa đổi các tham số, dừng và khởi động lại giao dịch trực tiếp, nhưng nó không thể sửa đổi đối tượng trao đổi được cấu hình bởi bot.

  • A. Nó thuận tiện để đăng nhập và quản lý khi nhóm định lượng quản lý nhiều chiến lược bot.
  • B. Debugging khi chiến lược là cho thuê.

Xem giao dịch trực tiếp Trong danh sách bot của nền tảng FMZtrang bot, nhấp vào nút Public để hiển thị bot của hàng hiện tại công khai.

    1. Hiển thị các bot trên [Live View] (https://www.fmz.com/live) trang được xuất bản trên nền tảng FMZ, sau khi nhấp vào nút Public và chọnPhần của công chúng.
    1. Tạo một liên kết riêng để xem. Sau khi nhấp vào nút Public và chọnPhân phần nội bộ, bạn có thể thiết lập một thời gian hợp lệ để tạo một liên kết riêng để đăng nhập vào trang xem trực tiếp riêng tư của bot chiến lược.

Phân chia chiến lược & Cho thuê

TrênChiến lượctrang, sau khi nhấp vào nút Action ở phía bên phải của chiến lược, menu bật lên có tùy chọn chia sẻ và thuê.

Chia sẻ chiến lược

  • Chia sẻ công khai Sau khi nhấp vào nút Chia sẻ, một hộp thoại sẽ bật lên, và bạn có thể chọn Chia sẻ công khai, do đó chiến lược được chia sẻ hoàn toàn trên nền tảng Nhiều chiến lược, và bất kỳ người dùng nào cũng có thể sao chép chiến lược.

  • Chia sẻ nội bộ Sau khi nhấp vào nút Sharing, một hộp thoại sẽ bật lên, và bạn có thể chọn Internal Sharing.Địa chỉ trang sao chépmã sao chépcủa chiến lược sẽ được tạo ra. Nó có thể được phân phối cho các người dùng nền tảng FMZ được chỉ định. Người dùng cần chiến lược này chỉ cần sử dụng cácĐịa chỉ trang sao chépliên kết, để đăng nhập vàotrang sao chépvà nhập mã sao chép để có được chiến lược. Sau khi có được chiến lược, nó sẽ xuất hiện trên trang Strategy tự động.

Chiến lược cho thuê

  • Bán hàng công khai Sau khi nhấp vào nút Rent, một hộp thoại sẽ bật lên và bạn có thể chọn Public Sale.

  • Bán hàng nội bộ Sau khi nhấp vào nút Rent, một hộp thoại sẽ bật lên, và bạn có thể chọn Internal Sale.Địa chỉ trang đăng kýmã thông báo chiến lượccủa chiến lược sẽ được tạo ra. Nó có thể được phân phối cho các người dùng FMZ cụ thể. Người dùng cần chiến lược này chỉ cần sử dụng cácĐịa chỉ trang đăng kýliên kết, để đăng nhập vàoTrang đăng ký. Sau đó, nhập mã thông báo chiến lược để có được quyền sử dụng chiến lược. Chiến lược cũng sẽ được hiển thị trên trang Strategy, nhưng chỉ với quyền sử dụng backtest và bot. Thông tin như mã nguồn của chiến lược không thể truy cập được.

Lưu ý quan trọng: Khi tạo ra và phân phốimã thông báo chiến lược, vui lòng chắc chắn để xác nhận cẩn thận nếu nó là một chiến lược token hoặc một copy code, để không chia sẻ chiến lược một cách nhầm lẫn.

Sharpe thuật toán trong hệ thống kiểm tra ngược

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

Hướng dẫn trao đổi đặc biệt

  • Futures_Binance Nó hỗ trợ chế độ vị trí kép của Binance tương lai; bạn có thể sử dụngexchange.IOđể chuyển đổi:

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

    Nó hỗ trợ chuyển đổi giữa vị trí chéo / vị trí cô lập

    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);
    }
    
  • Tiền tương lai_HuobiDM Nó hỗ trợ sửa đổi địa chỉ của Huobi tương lai tham gia vào chữ ký, mà không được chuyển đổi theo mặc định.exchange.IO("signHost", "")để đặt một chuỗi trống. Sử dụngexchange.IO("signHost", "https://aaa.xxx.xxx")để thay đổi địa chỉ cơ sở của Huobi Futures tham gia xác minh chữ ký. Sử dụngexchange.IO("base", "https://bbb.xxx.xxx")hoặcexchange.SetBase("https://bbb.xxx.xxx")để thay đổi địa chỉ cơ sở của giao diện nền tảng. Khi cặp giao dịch được thiết lập thànhXXX_USDT, sử dụng chức năngexchange.SetContractType("swap")để thiết lập mã hợp đồngswaphợp đồng vĩnh viễn, sử dụngexchange.IO("cross", true)có thể chuyển sangUSDT-thỏa thuận vĩnh viễn trong chế độ vị trí chéo.exchange.IO("cross", false)để chuyển trở lại chế độ vị trí cô lập.

  • Huobi Nó hỗ trợ các token đòn bẩy giao ngay của Huobi, chẳng hạn như:LINK*(-3); mã được xác định bởi sàn giao dịch là:link3susdt, được viết khi FMZ đặt cặp giao dịchLINK3S_USDT. Nó cũng có thể chuyển đổi các cặp giao dịch trong chiến lược:

    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 giao diện có thể chuyển sang môi trường thử nghiệm robot mô phỏng của OKX; sử dụngexchange.IO("simulate", true)Nếu bạn muốn chuyển sang môi trường giao dịch thực, sử dụngexchange.IO("simulate", false)mặc định ban đầu là môi trường giao dịch thực sự. Nó hỗ trợ chuyển đổi các chế độ ký quỹ tài khoản; sử dụngexchange.IO("cross", true)để chuyển sang chế độ vị trí chéo và sử dụngexchange.IO("cross", false)để chuyển sang chế độ vị trí cô lập, mặc định ban đầu là chế độ vị trí chéo.

  • Futures_Bibox Sử dụngexchange.IO("cross", true)để chuyển sang chế độ vị trí chéo và sử dụngexchange.IO("cross", false)để chuyển sang chế độ vị trí cô lập; mặc định ban đầu là chế độ vị trí chéo. Sàn giao dịch không hỗ trợ truy vấn các lệnh đang chờ hiện tại và giao diện để truy vấn các hồ sơ giao dịch lịch sử của thị trường, do đó,GetOrdersGetTradescác chức năng không được hỗ trợ.

  • Tiền tương lai_Bitget Sử dụngexchange.IO("cross", true)để chuyển sang chế độ vị trí chéo và sử dụngexchange.IO("cross", false)để chuyển sang chế độ vị trí cô lập.

  • Tiền tương lai_AOFEX Sử dụngexchange.IO("cross", true)để chuyển sang chế độ vị trí chéo và sử dụngexchange.IO("cross", false)để chuyển sang chế độ vị trí cô lập.

  • Tiền tương lai_MEXC Sử dụngexchange.IO("cross", true)để chuyển sang chế độ vị trí chéo và sử dụng``` trao đổi.IO("cross",


Thêm nữa