संसाधन लोड हो रहा है... लोड करना...

एफएमजेड एपीआई निर्देश

लेखक:शून्य, बनाया गयाः 2020-04-20 10:19:00, अद्यतन किया गयाः 2023-04-12 14:44:56

xchangeList()

GetExchangeList()समर्थित एक्सचेंजों की सूची और आवश्यक कॉन्फ़िगरेशन जानकारी लौटाता है.

  • पैरामीटर कोई नहीं

  • रिटर्न मूल्य

    {
        "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 ((निड)

DeleteNode(Nid)डॉकर नोड हटाता है (IDहैNid) के अनुरूप है।API KEYएफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म खाते के अनुरोध में।

  • पैरामीटरNidपूर्णांक प्रकार का है, अर्थात् डॉकरID.

  • रिटर्न वैल्यू

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

DeleteRobot(...)

DeleteRobot(RobotId, DeleteLogs)निर्दिष्ट आईडी (रोबोट) के साथ रोबोट को हटाता हैID: RobotId) के अनुरूप है।API KEYएफएमजेड क्वांट खाते के अंतर्गत अनुरोध में।

  • पैरामीटरRobotIdपूर्णांक प्रकार का है, अर्थात् रोबोटIDहटाया जाना है।DeleteLogsबूलियन प्रकार का है; सेटDeleteLogsयह तय करने के लिए कि लॉग को मिटाना है या नहीं;trueलॉग को मिटाने का संकेत देता है।

  • रिटर्न वैल्यू

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

GetStrategyList प्राप्त करें()

GetStrategyList()रणनीति की जानकारी प्राप्त करता हैAPI KEYएफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म खाते के अनुरोध में।

  • पैरामीटर कोई नहीं

  • रिटर्न मूल्य

    {
        "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(सेटिंग्स)

NewRobot(Settings)पैरामीटर सेटिंग्स के अनुसार एक नया बॉट बनाता है,API KEYएफएमजेड क्वांट खाते के अनुरोध में।

  • पैरामीटरSettingsहैJSONवस्तु प्रकार।SettingsहैJSONबॉट द्वारा कॉन्फ़िगर की गई वस्तु।

    ..Settingsविवरण इस प्रकार समझाया गया हैः

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

    नोटः जब आप संवेदनशील जानकारी का उपयोग करते हैं, जैसे कि मंचAPI KEY, सहित"meta":{"AccessKey":"xxx","SecretKey":"yyy"}के विन्यास मेंeid, आपको पता होना चाहिए कि FMZ डेटा संग्रहीत नहीं करता है. डेटा सीधे डॉकर प्रोग्राम को भेजा जाएगा, इसलिए इस जानकारी को हर बार कॉन्फ़िगर किया जाना चाहिए जब बॉट बनाया या पुनरारंभ किया जाता है.

    प्लगइन का उपयोग करता है कि बोट को पुनरारंभ करने के लिए मंच का समर्थन करने के लिए, जब विन्यासSettingsपैरामीटर, आप के लिए निम्नलिखित सेटिंग्स करना चाहिएexchangesविशेषताः

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

    labelविशेषता वर्तमान सामान्य प्रोटोकॉल द्वारा एक्सेस की गई एक्सचेंज ऑब्जेक्ट के लिए एक लेबल सेट करना है, जिसे प्राप्त किया जा सकता हैexchange.GetLabel()कार्यनीति में भूमिका निभाना।

  • परीक्षण रणनीतिः

    • रणनीति पैरामीटरInterval

    • JavaScriptरणनीति कोड

      function main(){
          Log(exchange.GetAccount())
          Log(exchange.GetTicker())
          Log(exchange.GetDepth())
          Log("Interval:", Interval)
      }
      
  • रिटर्न मूल्य

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

प्लगइन चलाएँ ((सेटिंग्स)

PluginRun(Settings)कॉल करने के लिए विस्तारित एपीआई का उपयोग करता हैडिबगिंग उपकरण function.

  • पैरामीटरSettingsहैJSONऑब्जेक्ट, अर्थात् डिबगिंग टूल में सेटिंग (Settingsविशेषता में लिखा परीक्षण कोड शामिल हैsource).

  • परीक्षण कोडPythonउदाहरण:

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

    नोटः{"eid": "OKEX", "pair": "ETH_BTC", "meta" :{"AccessKey": "123abc", "SecretKey": "123abc"}} {"eid": "Huobi", "pair": "BCH_BTC", "meta" :{"AccessKey": "123abc", "SecretKey": "123abc"}}के लिएexchangesविशेषता मेंसेटिंग्स, विशेषता केवल 1 पर सेट करने की जरूरत है, जब कॉल करने के लिएPluginRunइंटरफ़ेस (केवल एक एक्सचेंज ऑब्जेक्ट के लिए समर्थित किया जा सकता है जब आप Debug Tool पृष्ठ का उपयोग करते हैं). जब आप 2 एक्सचेंज ऑब्जेक्ट सेट करते हैं तो कोई त्रुटि रिपोर्ट नहीं की जाएगीसेटिंग्स, लेकिन कोड में दूसरी एक्सचेंज ऑब्जेक्ट तक पहुंचने पर एक त्रुटि की सूचना दी जाएगी।

  • रिटर्न मूल्यapi("PluginRun", settings)लौटाए गए परिणामः

    {
        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)रोबोट लॉग की जानकारी प्राप्त करता है (रोबोटID: robotId) के अनुरूप है।API KEYएफएमजेड क्वांट खाते के अनुरोध में।

  • पैरामीटर

    पैरामीटर का नाम प्रकार टिप्पणी
    robotId पूर्णांक बॉट आईडी

    तालिका लॉगडेटाबेस तालिका के लॉग डेटा से पूछताछ करता हैः

    पैरामीटर का नाम प्रकार टिप्पणी
    logMinId पूर्णांक लॉग की न्यूनतम पहचान
    logMaxId पूर्णांक लॉग का अधिकतम आईडी
    लॉगऑफसेट पूर्णांक logMinId और logMaxId द्वारा सीमा निर्धारित करने के बाद, logOffset ऑफसेट (कितने रिकॉर्ड को छोड़ दिया जाता है) डेटा प्राप्त करने के लिए प्रारंभिक स्थिति के रूप में उपयोग किया जाना शुरू होता है
    लॉगलिमिट पूर्णांक प्रारंभिक स्थिति निर्धारित करने के बाद, चयनित डेटा रिकॉर्ड की संख्या

    तालिका लाभडेटाबेस तालिका के लाभ के आंकड़ों को पूछताछ करता हैः

    पैरामीटर का नाम प्रकार टिप्पणी
    लाभMinId पूर्णांक रिकॉर्ड की न्यूनतम पहचान
    लाभMaxId पूर्णांक रिकॉर्ड का अधिकतम आईडी
    लाभऑफसेट पूर्णांक ऑफसेट (कितने रिकॉर्ड छोड़ दिया जाता है) प्रारंभिक स्थिति के रूप में इस्तेमाल किया जा करने के लिए शुरू होता है
    लाभसीमा पूर्णांक प्रारंभिक स्थिति निर्धारित करने के बाद, चयनित डेटा रिकॉर्ड की संख्या

    तालिका चार्टडेटाबेस तालिका के चार्ट डेटा से पूछताछ करता हैः

    पैरामीटर का नाम प्रकार टिप्पणी
    चार्ट पूर्णांक रिकॉर्ड की न्यूनतम पहचान
    chartMaxId पूर्णांक रिकॉर्ड का अधिकतम आईडी
    चार्टऑफसेट पूर्णांक ऑफसेट
    chartLimit पूर्णांक प्राप्त किए जाने वाले अभिलेखों की संख्या
    chartUpdateBaseId पूर्णांक अद्यतन आधार आईडी पूछें
    चार्टअपडेट दिनांक पूर्णांक डेटा रिकॉर्ड टाइमस्टैम्प को अपडेट करता है जो इस टाइमस्टैम्प से बड़े रिकॉर्ड को फ़िल्टर करेगा

    सारांश सीमास्थिति पट्टी के आंकड़ों को पूछताछ करता हैः

    यह बॉट के स्टेटस बार डेटा की क्वेरी करता है। पैरामीटर प्रकार पूर्णांक है। 0 पर सेट करने का मतलब है कि स्टेटस बार जानकारी की क्वेरी करने की कोई आवश्यकता नहीं है, और गैर-शून्य संख्या पर सेट करने से स्टेटस बार जानकारी के बाइट्स की संख्या का संकेत मिलता है (इंटरफेस डेटा मात्रा को सीमित नहीं करता है, इसलिए आप एक बड़ा निर्दिष्ट कर सकते हैंsummaryLimitसभी स्थिति पट्टी जानकारी प्राप्त करने के लिए पैरामीटर) स्थिति पट्टी डेटा लौटाए गए डेटा में संग्रहीत किया जाता हैsummary.

    Pythonउदाहरण:

    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"
    
  • रिटर्न मूल्य लौटाए गए डेटाः

    {
        "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
        }
    }
    
  • डेटाबेस में रणनीति लॉग तालिका

    ..Arrउपरोक्त रिटर्न किए गए परिणाम डेटा में विशेषता मान का वर्णनः

    "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, "", ""]
    ],
    
    आईडी लॉग प्रकार ईद आदेशित मूल्य राशि अतिरिक्त तिथि अनुबंधप्रकार दिशा
    3977 3 फ्यूचर्स_ओकेकोइन "" 0 0 बिक्री ((688.9, 2): 20016 1526954372591 "" ""
    3976 5 "" "" 0 0 OKCoin:this_week बहुत अधिक पद, लंबाः 2 1526954372410 "" ""

    extraमुद्रित लॉग का संलग्न संदेश है।

    विशिष्ट लॉग प्रकारों का प्रतिनिधित्वlogTypeमूल्यः

    लॉग प्रकारः 0 1 2 3 4 5 6
    logType का अर्थः खरीदना बिक्री वापस लेना त्रुटि लाभ संदेश पुनः आरंभ करें
    चीनी अर्थ खरीद आदेश प्रकार लॉग बेचने के आदेश का प्रकार वापस ले लो त्रुटि राजस्व लॉग पुनः आरंभ करें
  • डेटाबेस में राजस्व चार्ट की लॉग तालिका चार्ट की लॉग तालिका में डेटा रणनीति लॉग तालिका में राजस्व लॉग के अनुरूप है।

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

    उदाहरण के रूप में लॉग डेटा में से एक को लेंः

    [202, 2515.44, 1575896700315]
    

    202लॉग के रूप मेंID; 2515.44राजस्व मूल्य के रूप में;1575896700315समय के टिकट के रूप में।

  • डेटाबेस में चार्ट लॉग तालिका

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

    उदाहरण के रूप में लॉग डेटा में से एक को लेंः

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

    23637लॉग हैID, 0चार्ट डेटा श्रृंखला का सूचकांक है, और अंतिम डेटा"{\"close\":648,\"high\":650.5,\"low\":647,\"open\":650,\"x\":1575960300000}"लॉग डेटा है; यह डेटा चार्ट पर के-लाइन डेटा है।

ट्रेडिंग प्लगइन

परिचय

ट्रेडिंग टर्मिनल के कार्यों में सुधार करने और मैन्युअल ट्रेडिंग को आसान बनाने के लिए, एक प्लग-इन फ़ंक्शन अब उपलब्ध है। स्थान निम्नानुसार दिखाया गया हैः

img

प्लगइन का सिद्धांत

सिद्धांत डिबगिंग टूल के समान हैः निष्पादित करने के लिए Trade टर्मिनल पृष्ठ के डॉकर को कोड का एक टुकड़ा भेजें, और चार्ट और तालिकाओं के रिटर्न का समर्थन करें (डिबगिंग टूल अपग्रेड के बाद भी समर्थन करने में सक्षम है) ।डिबगिंग उपकरण, यह केवल 3 मिनट के लिए निष्पादित किया जा सकता है, चार्ज के बिना. यह कुछ सरल छोटे कार्यों का एहसास कर सकते हैं, जटिल रणनीतियों अभी भी असली व्यापार में चलाने की जरूरत है.

प्लगइन लेखन

नई रणनीति पृष्ठ पर, रणनीति प्रकार को निम्न पर सेट करें:Trading Plugin, जो समर्थन करता हैJavaScript, Python, cppऔरMyLanguage.

img

प्लगइन का प्रयोग

प्लगइन समय की एक अवधि के लिए कोड निष्पादित कर सकते हैं, और यह कुछ सरल संचालन कर सकते हैं, जैसे किआइसबर्ग आदेश, लंबित आदेश, आदेश रद्द करनाऔरआदेश की गणना. उसी के रूप मेंडिबगिंग उपकरण, यह उपयोग करता हैreturnपरिणामों को वापस करने के लिए, और यह भी सीधे चार्ट और तालिकाओं को वापस कर सकते हैं. यहाँ कुछ उदाहरण हैं, और अन्य कार्यों आप अपने आप को द्वारा पता लगाया जा सकता है.

  • गहराई स्नैपशॉट पर लौटें

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

  • क्रॉस-पीरियड स्प्रेड निकालें

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

    अधिक रणनीतियों में अन्य उदाहरण हैं, जैसेःछोटी मात्रा में खरीदें / बेचें, रणनीतिक पता.

उपयोग कैसे करें

  • ट्रेडिंग टर्मिनल के प्लगइन मॉड्यूल जोड़ें जैसा कि चित्र में दिखाया गया है, Trade टर्मिनल पृष्ठ पर मॉड्यूल जोड़ें मेनू खोलें, ट्रेडिंग टर्मिनल प्लगइन्स मेंरणनीति पुस्तकालयवर्तमान FMZ खाते की सूची में स्वचालित रूप से प्रदर्शित किया जाएगा, प्लगइन जोड़ने के लिए खोजें और Add पर क्लिक करें.

    img

  • प्लगइन चलाएँ Execute पर क्लिक करें, और ट्रेडिंग टर्मिनल प्लगइन चलना शुरू हो जाएगा. प्लगइन लॉग प्रदर्शित नहीं करेगा, लेकिन यह प्रदर्शन तालिका वापस कर सकता है.

  • प्लगइन चलाने का समय प्लगइन का अधिकतम चलने का समय 3 मिनट है; और यह 3 मिनट से अधिक होने के बाद स्वचालित रूप से चलना बंद कर देगा।

अल्फा कारक विश्लेषण उपकरण

परिचय

विश्लेषण सूत्र सार्वजनिक बाजार में बाजार उद्धरण गणना विधि को संदर्भित करता है।alpha101काworldquant: http://q.fmz.com/chart/doc/101_Formulaic_Alphas.pdf, जो मूल रूप से इसके व्याकरण के साथ संगत है (अपरिवर्तित सुविधाओं के लिए स्पष्टीकरण के साथ), और इसे बढ़ाया गया है। इसका उपयोग समय श्रृंखलाओं पर त्वरित गणना करने और विचारों को मान्य करने के लिए किया जाता है।पता प्रयोग करें.

पृष्ठ परिचय:

img

कार्य और संचालक

"{}" नीचे प्लेसहोल्डर का प्रतिनिधित्व करता है, सभी अभिव्यक्ति केस संवेदनशील नहीं हैं, और x डेटा समय श्रृंखला का प्रतिनिधित्व करता है

  • abs(x), log(x), sign(x)शाब्दिक रूप से निरपेक्ष मूल्य, लघुगणक और संकेत समारोह का अर्थ है, क्रमशः।

निम्नलिखित ऑपरेटर, जिनमें शामिल हैं+, -, *, /, >, <, अपने मानकों के अर्थों को भी पूरा करते हैं;==समान या नहीं का प्रतिनिधित्व करता है;||अर्थ है or;x? y: zतृतीयक संचालक दर्शाता है.

  • rank(x): क्रॉस सेक्शन की रैंकिंग, स्थान का प्रतिशत लौटाता है; कई उम्मीदवारों के लक्ष्य पूल को निर्दिष्ट करना आवश्यक है, जिन्हें एकल बाजार के लिए गणना नहीं की जा सकती है और सीधे मूल परिणाम लौटाएगा।
  • delay(x, d): अनुक्रम के d अवधि से पहले का मान।
  • sma(x, d): अनुक्रम की d अवधि का सरल चलती औसत।
  • correlation(x, y, d): पिछले d अवधियों में समय श्रृंखला x और y का सहसंबंध गुणांक।
  • covariance(x, y, d): पिछले d अवधियों में समय श्रृंखला x और y का सह-विभेदक।
  • scale(x, a): यह डेटा को सामान्य करता है, ताकिsum(abs(x)) = a(a 1 के लिए डिफ़ॉल्ट है)
  • delta(x, d): समय श्रृंखला x का वर्तमान मान घटाकर d अवधि से पहले का मान।
  • signedpower(x, a): x^a.
  • decay_linear(x, d): समय श्रृंखला x के भारित d-अवधि चलती औसत, भार d, d-1, d-2... 1 (सामान्यीकृत) के साथ।
  • indneutralize(x, g): उद्योग वर्गीकरण के लिए तटस्थ प्रसंस्करण g, वर्तमान में समर्थित नहीं है।
  • ts_{O}(x, d): पिछले d अवधियों में समय श्रृंखला x पर O संचालन करें (O विशेष रूप से min और max आदि का प्रतिनिधित्व कर सकता है, जिसे बाद में पेश किया गया है), d को पूर्णांक में परिवर्तित किया जाएगा।
  • ts_min(x, d): पिछले d अवधियों का न्यूनतम मान।
  • ts_max(x, d)पिछले d अवधियों का अधिकतम मान.
  • ts_argmax(x, d): ts_max(x, d) position.
  • ts_argmin(x, d): ts_min(x, d) position.
  • ts_rank(x, d): पिछले d अवधियों के समय श्रृंखला x मूल्यों का क्रमबद्ध करना (प्रतिशत क्रमबद्ध करना) ।
  • min(x, d): ts_min(x, d).
  • max(x, d): ts_max(x, d).
  • sum(x, d): पिछले d अवधियों का योग।
  • product(x, d): पिछले d अवधियों का गुणनफल।
  • stddev(x, d): पिछले d अवधियों का मानक विचलन।

इनपुट डेटा

इनपुट डेटा केस संवेदनशील नहीं है; डिफ़ॉल्ट डेटा वेब पेज पर चयनित प्रतीक है, या यह सीधे निर्दिष्ट किया जा सकता है, जैसे किbinance.ada_bnb

  • returns: समापन मूल्य का प्रतिफल।
  • open, close, high, low, volume: अर्थात् अवधि के दौरान खुली कीमत, बंद कीमत, उच्चतम मूल्य, निम्नतम मूल्य और व्यापार की मात्रा।
  • vwap: वॉल्यूम-वेटेड निष्पादित मूल्य, अभी तक लागू नहीं किया गया है, जो वर्तमान में समापन मूल्य है।
  • cap: कुल बाजार मूल्य, अभी तक लागू नहीं किया गया है।
  • IndClass: उद्योग वर्गीकरण, अभी तक लागू नहीं किया गया है।

अन्य

कई परिणामों (सूची द्वारा व्यक्त) को एक बार में आउटपुट करना समर्थित है; उदाहरण के लिए,[sma(close, 10), sma(high, 30)]चार्ट पर दो पंक्तियाँ खींचेगा। समय श्रृंखला डेटा इनपुट करने के अलावा, इसका उपयोग एक साधारण कैलकुलेटर के रूप में भी किया जा सकता है।

परिशिष्ट

सामान्य प्रोटोकॉल

एफएमजेड क्वांट ट्रेडिंग प्लेटफ़ॉर्म के लिए जिसने अभी तक एक्सचेंज एपीआई इंटरफ़ेस को कैप्सूल नहीं किया है, इसे एक सामान्य प्रोटोकॉल प्लग-इन प्रोग्राम लिखकर एक्सेस किया जा सकता है। आप इस सामान्य प्रोटोकॉल का उपयोग किसी भी एक्सचेंज तक पहुंचने के लिए कर सकते हैं जो ट्रेडिंग के लिए एपीआई इंटरफ़ेस प्रदान करता है, और निम्नलिखित दो प्रोटोकॉल समर्थित हैंः

के बीच अंतरFIXप्रोटोकॉल प्लग-इन कार्यक्रम औरRESTप्रोटोकॉल प्लग-इन प्रोग्राम केवल प्रोटोकॉल प्लग-इन प्रोग्राम और एक्सचेंज इंटरफेस के बीच बातचीत है। प्रोटोकॉल प्लग-इन प्रोग्राम में एफएमजेड क्वांट के रूप में डॉकर प्रोग्राम इंटरैक्शन और डेटा प्रारूप का समान विवरण प्रसंस्करण है। विवरण के लिए, कृपया ऊपर दिए गए लिंक में उदाहरण देखें।

ट्रेडिंग टर्मिनल

एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म एक मॉड्यूलर और अनुकूलन योग्यव्यापारपृष्ठ. आप स्वतंत्र रूप से विभिन्न डेटा मॉड्यूल और ट्रेडिंग फ़ंक्शन मॉड्यूल जोड़ सकते हैं, और यहां तक कि अपने स्वयं के कोड मॉड्यूल (ट्रेडिंग टर्मिनल प्लगइन्स) विकसित कर सकते हैं। इसके अत्यधिक लचीले और मुफ्त उपयोग के साथ, यह मैनुअल ट्रेडिंग और अर्ध-प्रोग्रामेटिक ट्रेडिंग के उपयोगकर्ताओं को भी बहुत सुविधाजनक बनाता है। ट्रेड पृष्ठ पर विभिन्न मॉड्यूल को खींच और ज़ूम किया जा सकता है, मॉड्यूल से जुड़े ट्रेडिंग जोड़े और एक्सचेंजों की सेटिंग्स को संशोधित किया जा सकता है, और एक ही प्रकार के कई मॉड्यूल जोड़े जा सकते हैं।

img

डिबगिंग टूल

डिबग उपकरणपृष्ठ जल्दी से बॉट द्वारा कोड का परीक्षण करने के लिए एक वातावरण प्रदान करता है, केवल समर्थनJavaScript currently.

img

दूरस्थ संपादन

यह स्थानीय संपादक दूरस्थ सिंक्रनाइज़ेशन रणनीति कोड को FMZ क्वांट ट्रेडिंग प्लेटफॉर्म का समर्थन करता है और यह समर्थन करता हैSublime Text/Atom/Vim/VSCodeसंपादक. रणनीति संपादन पृष्ठ पर, क्लिक करें Remote Edit वर्तमान रणनीति की दूरस्थ सिंक्रनाइज़ेशन कुंजी (टोकन) प्रदर्शित करने के लिए प्लगइन डाउनलोड पता बटन को खोलने के लिए.

img

वर्तमान कुंजी प्रदर्शन को ताज़ा करने के लिए अपडेट कुंजी पर क्लिक करें, और वर्तमान रणनीति की गुप्त कुंजी (टोकन) को हटाने के लिए हटाएँ कुंजी पर क्लिक करें.

img

अलग-अलग संपादकों के प्लग-इन की स्थापना विधियां थोड़ा अलग हैं. आप विशिष्ट रिमोट सिंक्रनाइज़ेशन प्लग-इन आइटम पर जाने के लिए डाउनलोड बटन पर क्लिक कर सकते हैं.

img

बॉट पैरामीटर आयात और निर्यात करें

img

जब लाइव ट्रेडिंग चल रहा है, तो आपको वास्तविक बॉट कॉन्फ़िगरेशन के पैरामीटर डेटा को सहेजने की आवश्यकता है, आप Export बटन पर क्लिक कर सकते हैं। निर्यात की गई रणनीति मापदंडों में सहेजा जाएगाJSONफ़ाइल, और निर्यात की गई रणनीति पैरामीटर विन्यास भी वास्तविक बॉट में फिर से आयात किया जा सकता है. सहेजे गए रणनीति बॉट पैरामीटर को वर्तमान वास्तविक बॉट में आयात करने के लिए Import बटन पर क्लिक करें. फिर, सहेजने के लिए Save पर क्लिक करें.

रणनीति आयात और निर्यात फ़ाइलें

img

  • स्रोत कोड डाउनलोड करें रणनीति स्रोत कोड निर्यात करें, और निर्यात फ़ाइल का प्रकार रणनीति प्रोग्रामिंग भाषा पर आधारित है. जावास्क्रिप्ट रणनीति विस्तार के साथ फ़ाइलों को निर्यात करता हैjs; पायथन रणनीति विस्तार के साथ फ़ाइलों को निर्यात करता हैpy; सी++ रणनीति एक्सटेंशन के साथ फ़ाइलों को निर्यात करता हैcpp; Mylanguage रणनीति विस्तार के साथ फ़ाइलों को निर्यात करता हैtxtध्यान दें कि केवल रणनीति स्रोत कोड निर्यात किया जाता है, जिसमें रणनीति पैरामीटर, टेम्पलेट संदर्भ आदि शामिल नहीं हैं।

  • निर्यात रणनीति पूरी रणनीति, जैसे रणनीति स्रोत कोड और पैरामीटर डिजाइन सहित सभी रणनीति जानकारी निर्यात करें।xml file.

  • आयात रणनीति उपयोग करेंxmlफ़ाइल Export फ़ंक्शन द्वारा निर्यात की जाती है, और रणनीति संपादन पृष्ठ पर Import बटन पर क्लिक करेंxmlआयात करने के लिए, यानी, आप एक पूर्ण रणनीति आयात कर सकते हैं. आयात करने के बाद, आप रणनीति को बचाने के लिए Save बटन पर क्लिक करने की जरूरत है.

बहुभाषी सहायता

रणनीति नाम और रणनीति पैरामीटर विवरण में लिखा जा सकता हैChinese|English, स्वचालित रूप से वेब पृष्ठों द्वारा पहचानी जाने वाली भाषा में प्रदर्शित होता है।

img

img

अन्य स्थानों पर, जैसेःरणनीति का वर्णन, उपयोग के निर्देशऔर अन्य ग्रंथों मेंMarkdownप्रारूप, उपयोग[trans]Chinese|English[/trans]या[trans]Chinese||English[/trans]स्वचालित पहचान का प्रभाव भी प्राप्त कर सकता है। उपरोक्त उदाहरण का प्रभाव निम्नलिखित चित्र में दिखाया गया हैः

  • चीनी में पृष्ठ प्रदर्शित करेंःimg

  • अंग्रेजी में पृष्ठ प्रदर्शित करेंःimg

भाषा बदलने के बाद, यह वेब पेज को ताज़ा करने के बाद प्रभाव लेगा.

फ़ंक्शन जो रणनीति कोड में स्ट्रिंग लिख सकते हैं, भाषा स्विचिंग का भी समर्थन करते हैं, जैसे फ़ंक्शनLog, कार्यLogStatusआदि।

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

WexApp सिमुलेशन मार्केट

  • 24 घंटे नॉन स्टॉप ऑपरेशन, शक्तिशाली ट्रेडिंग मैचिंग सिस्टम, वास्तविक ट्रेडिंग का अनुकरण।
  • एक शक्तिशाली बाजार बनाने वाला बॉट जो अच्छी तरलता और ऑर्डर बुक की गहराई प्रदान करता है।
  • पूर्ण एपीआई इंटरफ़ेस समर्थन, न केवल अनुकरणीय मात्रात्मक व्यापार के लिए एफएमजेड क्वांट पर परीक्षण किया जा सकता है, बल्कि स्वयं एपीआई इंटरफ़ेस से कनेक्ट भी हो सकता है, पताःWexApp.

डॉकर प्रोग्राम पैरामीटर

डॉकर सॉफ़्टवेयर डाउनलोड करने के बाद, डिकंप्रेशन के बाद निष्पादन योग्य फ़ाइल (फ़ाइल नामःrobot) डॉकर प्रोग्राम है; डॉकर प्रोग्राम के लिए पैरामीटर डॉकर को तैनात करते समय निर्दिष्ट किए जा सकते हैं।

  • -v: वर्तमान डॉकर प्रोग्राम के संस्करण और संकलन समय सहित जानकारी की जाँच करें। पूर्ण निष्पादन आदेश पर आधारित हैApple Mac System: ./robot -v.
  • -s: डॉकर प्रोग्राम चलाते समय एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म के साथ संवाद करने के लिए निर्दिष्ट पता। पूर्ण निष्पादन आदेश पर आधारित हैApple Mac System: ./robot -s node.fmz.com/xxxxxxx; xxxxxxxएफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म पर प्रत्येक खाते की विशिष्ट पहचान आईडी है; कमांड निष्पादित करने के बाद, संबंधित एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म खाते के लिए पासवर्ड दर्ज करने के लिए एक संकेत होगा।
  • -p: आप सीधे पासवर्ड दर्ज करने के लिए रन कमांड में पैरामीटर निर्दिष्ट कर सकते हैं, जो अनुशंसित नहीं है, क्योंकि पासवर्ड पैरामीटर वर्तमान सिस्टम रिकॉर्ड में छोड़ दिया जाएगा। मान लीजिए कि खाता पासवर्ड पता के अनुरूप हैnode.fmz.com/xxxxxxxहै:abc123456. पूर्ण निष्पादन आदेश पर आधारित हैApple Mac System: ./robot -s node.fmz.com/xxxxxxx -p abc123456.
  • -n: चल रहे डॉकर प्रोग्राम के लिए लेबल जानकारी संलग्न करें. पूर्ण निष्पादन आदेश पर आधारित हैApple Mac System: ./robot -n macTest -s node.fmz.com/xxxxxxx. वहाँ एक होगाmacTestमंच डॉकर प्रबंधन पृष्ठ पर डॉकर जानकारी में पाठ लेबल.
  • -l: वर्तमान डॉकर द्वारा समर्थित एक्सचेंज सूची प्रिंट करें. पूर्ण निष्पादन आदेश पर आधारित हैApple Mac System: ./robot -l, यानी समर्थित एक्सचेंजों के नाम आउटपुट किए जा सकते हैं।

बॉट त्रुटि और असामान्य निकास के सामान्य कारण

  • रणनीति स्थैतिक व्याकरण त्रुटियाँ (ऐसी त्रुटियां स्पष्ट हैं, और आमतौर पर आप रणनीति संपादन पृष्ठ पर त्रुटि चिह्न देख सकते हैं), जिन्हें बैकटेस्ट के दौरान पाया और सही किया जा सकता है।
  • रणनीति रनटाइम त्रुटियाँ, सबसे आम उदाहरण कानूनी निर्णय किए बिना फ़ंक्शन के रिटर्न मान का प्रत्यक्ष उपयोग है।
  • बहुत अधिक सामग्री जिसे कचरा एकत्र नहीं किया जा सकता है, वैश्विक चर में संग्रहीत की जाती है, जिसके परिणामस्वरूप अत्यधिक मेमोरी उपयोग होता है।
  • असिंक्रोनस का उपयोग करते समयexchange.Goकार्य, कोई उचित नहीं हैwaitऑपरेशन के दौरान कोरोटीन के अंत की प्रतीक्षा करने के लिए, जिसके परिणामस्वरूप बड़ी संख्या में कोरोटीन होते हैं।
  • पुनरावर्ती फ़ंक्शन कॉल की बहुत अधिक परतें कोरोटीन के स्टैक आकार से अधिक होने का कारण बनती हैं।
  • इंटरफेस व्यापार त्रुटियों और नेटवर्क अनुरोध त्रुटियों, आदि; इस तरह के त्रुटि संदेश जानकारी प्रदर्शित करेगा, सहित प्रासंगिक विनिमय ऑब्जेक्ट नाम, समारोह नाम, त्रुटि से संबंधित संदेश और कारण, और अन्य जानकारी। इस तरह की त्रुटियों वास्तविक व्यापार में असामान्य ठहराव का कारण नहीं होगा (ऐसी त्रुटियों आमतौर पर कारण हैं, लेकिन प्रत्यक्ष कारण नहीं हैं। प्रत्यक्ष कारण आमतौर पर हैंविधिवतता का न्याय करने के लिए इंटरफ़ेस वापसी मूल्य के बिना प्रत्यक्ष उपयोग के कारण कार्यक्रम अपवाद).
  • प्लेटफ़ॉर्म अंडरलेयर त्रुटियां, आम उदाहरण हैDecrypt: Secret key decrypt failed, जो लाइव ट्रेडिंग शुरू करने में विफलता का कारण होगा। त्रुटि का कारण यह है कि एफएमजेड खाते के पासवर्ड को संशोधित करने से सभी कॉन्फ़िगर किए गएAPI KEYसमस्या को हल करने के लिए,API KEYफिर से कॉन्फ़िगर किया जाना चाहिए, और डॉकर को फिर से शुरू किया जाना चाहिए।
  • पायथन रणनीति को किराए पर लेते समय, प्लेटफ़ॉर्म द्वारा एन्क्रिप्टेड पायथन और रणनीति रनटाइम में पायथन के बीच संस्करण असंगतता के कारण एक त्रुटि की सूचना दी जाती हैःValueError: bad marshal data (unknown type code). रणनीति द्वारा चलाए जाने वाले पायथन वातावरण को रणनीति द्वारा समर्थित संस्करणों में से एक में अपग्रेड या स्थापित करें:Python 2.7, Python 3.5औरPython 3.6.
  • interruptत्रुटि; त्रुटि है क्योंकि उपयोगकर्ता क्लिक करता हैरोको बॉटबॉट पृष्ठ पर बटन जब प्रोग्राम एक ऑपरेशन करता है (जैसे प्लेटफॉर्म इंटरफ़ेस तक पहुंचना), और बॉट वर्तमान ऑपरेशन द्वारा मुद्रित त्रुटि संदेश को रोकता है और बाधित करता है। त्रुटि का कोई प्रभाव नहीं होता है और यह केवल लॉग रिकॉर्ड है।

बॉट्स और रणनीति समूह

एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म के बॉट पेज और स्ट्रैटेजी पेज पर आप क्लिक कर सकते हैंसमूह सेटिंगसमूहों में रणनीतियों और वास्तविक व्यापार का प्रबंधन करने के लिए दाईं ओर बटन। उदाहरण के लिए, रणनीतियों के समूह सेटिंग के लिए,टेम्पलेट, जावास्क्रिप्ट रणनीतिऔरबैकटेस्ट के लिए रणनीतिक्रमशः तीन समूहों में विभाजित किया जा सकता है।

उप-खाता और लाइव बॉट

उप-खाते मंच में लॉग इन करने के बाद, डैशबोर्ड और खाता पर क्लिक करें और FMZ खाते [प्रबंधन पृष्ठ] पर जाएं।https://www.fmz.com/m/account) उप-खाता सृजन पृष्ठ देखने के लिए उप-खाता पर क्लिक करें, उस बॉट का चयन करें जिसे जोड़ा गया उप-खाताउपलब्ध अनुमतियाँनियंत्रण, और उप-खातों को सेट करेंप्रयोक्ता नामऔरउप-खाता लॉगिन पासवर्डमेंउपयोगकर्ता की जानकारीनियंत्रण. एक उप-खाता बनाने के लिए उप-सदस्य जोड़ें बटन पर क्लिक करें. जोड़ा गया उप-खाता वर्तमान पृष्ठ पर प्रदर्शित किया जाएगा और संशोधित, लॉक/अनलॉक, और हटाया किया जा सकता है.

उप-खातों के पास सीमित अनुमतियाँ हैं; केवल अधिकृत बॉट्स की सेटिंग्स मेंउपलब्ध अनुमतियाँउप-खातों में देखा जा सकता है। अधिकृत बॉट के पास पैरामीटर को संशोधित करने, लाइव ट्रेडिंग को रोकने और फिर से शुरू करने का अधिकार है, लेकिन यह बॉट द्वारा कॉन्फ़िगर की गई एक्सचेंज ऑब्जेक्ट को संशोधित नहीं कर सकता है। उप खातों के उपयोग के परिदृश्य आमतौर पर हैंः

  • A. यह लॉग इन करने और प्रबंधन करने के लिए सुविधाजनक है जब मात्रात्मक टीम कई बॉट रणनीतियों का प्रबंधन करती है।
  • बी. जब रणनीति किराए पर है तब डिबगिंग।

लाइव ट्रेडिंग व्यू एफएमजेड प्लेटफॉर्म की बॉट सूची मेंबॉट पृष्ठ, वर्तमान पंक्ति के बॉट्स को सार्वजनिक रूप से प्रदर्शित करने के लिए सार्वजनिक बटन पर क्लिक करें। वर्तमान में लाइव बॉट्स को देखने के दो तरीके हैंः

    1. [लाइव देखें] पर बॉट्स प्रदर्शित करें (https://www.fmz.com/live) पृष्ठ को FMZ प्लेटफॉर्म पर प्रकाशित करने के बाद, सार्वजनिक बटन पर क्लिक करें और चयन करेंसार्वजनिक हिस्सेदारी.
    1. देखने के लिए एक निजी लिंक बनाएँ. सार्वजनिक बटन पर क्लिक करने और चयन करने के बादआंतरिक हिस्सा, आप रणनीति बॉट के निजी लाइव दृश्य पृष्ठ में लॉग इन करने के लिए एक निजी लिंक उत्पन्न करने के लिए एक वैधता अवधि सेट कर सकते हैं.

रणनीति साझा करना और किराए पर लेना

पर रणनीतिपृष्ठ, रणनीति के दाईं ओर Action बटन पर क्लिक करने के बाद, पॉप अप मेनू में साझा करने और किराए पर लेने के विकल्प हैं।

रणनीति साझा करना

  • सार्वजनिक साझाकरण Sharing बटन पर क्लिक करने के बाद, एक संवाद बॉक्स पॉप अप होगा, और आप Public Sharing चुन सकते हैं, इसलिए रणनीति पूरी तरह से प्लेटफार्मों में साझा की जाती है More Strategies, और कोई भी उपयोगकर्ता रणनीति की प्रतिलिपि बना सकता है।

  • आंतरिक साझाकरण Sharing बटन पर क्लिक करने के बाद, एक संवाद बॉक्स पॉप अप होगा, और आप Internal Sharing चुन सकते हैं।प्रतिलिपि पृष्ठ का पताऔरकॉपी कोडइस रणनीति का एक टुकड़ा उत्पन्न किया जाएगा। यह नामित एफएमजेड प्लेटफॉर्म उपयोगकर्ताओं को वितरित किया जा सकता है।प्रतिलिपि पृष्ठ का पतालिंक, लॉग इन करने के लिएप्रतिलिपि पृष्ठऔर रणनीति प्राप्त करने के लिए कॉपी कोड दर्ज करें। रणनीति प्राप्त करने के बाद, यह स्वचालित रूप से Strategy पृष्ठ पर दिखाई देगा।

रणनीति किराया

  • सार्वजनिक बिक्री Rent बटन पर क्लिक करने के बाद, एक संवाद बॉक्स पॉप अप होगा, और आप Public Sale चुन सकते हैं। सूची के लिए रणनीति लागू की जा सकती है (अनुमोदन के अधीन) ।

  • आंतरिक बिक्री Rent बटन पर क्लिक करने के बाद, एक संवाद बॉक्स पॉप अप होगा, और आप Internal Sale चुन सकते हैं। उपयोग करने के लिए दिनों की संख्या, अधिकतम समवर्ती संख्या और रणनीति टोकन की संख्या का चयन करने के बाद,पंजीकरण पृष्ठ का पताऔररणनीति टोकनइस रणनीति का एक टुकड़ा उत्पन्न किया जाएगा। यह निर्दिष्ट FMZ उपयोगकर्ताओं को वितरित किया जा सकता है। जो उपयोगकर्ताओं को इस रणनीति की आवश्यकता है केवलपंजीकरण पृष्ठ का पतालिंक, लॉग इन करने के लिएपंजीकरण पृष्ठ. फिर, रणनीति का उपयोग करने का अधिकार प्राप्त करने के लिए रणनीति टोकन दर्ज करें। रणनीति भी Strategy पृष्ठ पर प्रदर्शित की जाएगी, लेकिन केवल बैकटेस्ट और बॉट का उपयोग करने के अधिकार के साथ। रणनीति के स्रोत कोड जैसी जानकारी दुर्गम है।

महत्वपूर्ण नोटः निर्माण और वितरण करते समयरणनीति टोकन, कृपया ध्यान से पुष्टि करें कि क्या यह रणनीति टोकन या कॉपी कोड है, ताकि गलती से रणनीति साझा न हो।

बैकटेस्टिंग प्रणाली में शार्प एल्गोरिथ्म

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

विशेष विनिमय निर्देश

  • वायदा_बाइनेंस यह Binance वायदा के दोहरी स्थिति मोड का समर्थन करता है; आप उपयोग कर सकते हैंexchange.IOस्विच करने के लिएः

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

    यह क्रॉसिंग स्थिति / अलग स्थिति के बीच स्विचिंग का समर्थन करता है

    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);
    }
    
  • फ्यूचर्स_हुओबीडीएम यह हस्ताक्षर में भाग लेने वाले Huobi वायदा के पते को संशोधित करने का समर्थन करता है, जो डिफ़ॉल्ट रूप से स्विच नहीं किया जाता है. यदि आपको फ़ंक्शन को अक्षम करने की आवश्यकता है, तो आप उपयोग कर सकते हैंexchange.IO("signHost", "")एक खाली स्ट्रिंग सेट करने के लिए. प्रयोगexchange.IO("signHost", "https://aaa.xxx.xxx")हस्ताक्षर सत्यापन में भाग लेने वाली Huobi Futures के आधार पते को बदलने के लिए। प्रयोगexchange.IO("base", "https://bbb.xxx.xxx")याexchange.SetBase("https://bbb.xxx.xxx")प्लेटफार्म इंटरफेस के आधार पते को बदलने के लिए। जब ट्रेडिंग जोड़ी को सेट किया जाता हैXXX_USDT, फ़ंक्शन का उपयोग करेंexchange.SetContractType("swap")अनुबंध कोड कोswapस्थायी अनुबंध, उपयोगexchange.IO("cross", true)पर स्विच कर सकते हैंUSDT- मार्जिन पर टिकाऊ अनुबंध क्रॉसिंग स्थिति मोड में।exchange.IO("cross", false)अलग-थलग स्थिति मोड पर वापस स्विच करने के लिए. प्रारंभिक डिफ़ॉल्ट अलग-थलग स्थिति मोड है.

  • हुओबी यह Huobi स्पॉट लीवरेज टोकन का समर्थन करता है, जैसेःLINK*(-3); एक्सचेंज द्वारा परिभाषित कोड हैःlink3susdt, जो तब लिखा जाता है जब FMZ ट्रेडिंग जोड़ी सेट करता हैLINK3S_USDT. रणनीति में ट्रेडिंग जोड़े को स्विच करना भी संभव हैः

    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());
    }
    
  • ओकेएक्स ओकेएक्स इंटरफ़ेस ओकेएक्स के सिमुलेशन बॉट परीक्षण वातावरण पर स्विच कर सकता है;exchange.IO("simulate", true)सिमुलेटेड ट्रेडिंग वातावरण में स्विच कर सकते हैं। यदि आप वास्तविक ट्रेडिंग वातावरण में स्विच करना चाहते हैं, तो उपयोग करेंexchange.IO("simulate", false)प्रारंभिक डिफ़ॉल्ट वास्तविक व्यापारिक वातावरण है। यह खाता मार्जिन मोड स्विच करने का समर्थन करता है;exchange.IO("cross", true)क्रॉस पोजीशन मोड पर स्विच करने के लिए, और उपयोग करने के लिएexchange.IO("cross", false)अलग-थलग स्थिति मोड पर स्विच करने के लिए, प्रारंभिक डिफ़ॉल्ट क्रॉसिंग स्थिति मोड है।

  • वायदा_बिबॉक्स प्रयोगexchange.IO("cross", true)क्रॉस पोजीशन मोड पर स्विच करने के लिए, और उपयोग करने के लिएexchange.IO("cross", false)अलग-थलग स्थिति मोड पर स्विच करने के लिए; प्रारंभिक डिफ़ॉल्ट क्रॉसिंग स्थिति मोड है। एक्सचेंज वर्तमान लंबित आदेशों की क्वेरी और बाजार के ऐतिहासिक ट्रेडिंग रिकॉर्ड की क्वेरी के लिए इंटरफ़ेस का समर्थन नहीं करता है, इसलिएGetOrdersऔरGetTradesकार्य समर्थित नहीं हैं.

  • फ्यूचर्स_बिटगेट प्रयोगexchange.IO("cross", true)क्रॉस पोजीशन मोड पर स्विच करने के लिए, और उपयोग करने के लिएexchange.IO("cross", false)अलग-थलग स्थिति मोड में स्विच करने के लिए।

  • फ्यूचर्स_एओएफएक्स प्रयोगexchange.IO("cross", true)क्रॉस पोजीशन मोड पर स्विच करने के लिए, और उपयोग करने के लिएexchange.IO("cross", false)अलग-थलग स्थिति मोड में स्विच करने के लिए।

  • फ्यूचर्स_मेक्सिको प्रयोगexchange.IO("cross", true)क्रॉस पोजीशन मोड पर स्विच करने के लिए, और उपयोग करने के लिए` ` विनिमय.IO("क्रॉस",


अधिक