রিসোর্স লোড হচ্ছে... লোডিং...

FMZ API নির্দেশাবলী

লেখক:শূন্য, তৈরিঃ 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 KEYFMZ Quant ট্রেডিং প্ল্যাটফর্মের অ্যাকাউন্টের অনুরোধে।

  • প্যারামিটারNidপূর্ণসংখ্যা প্রকারের, যথা ডকারID.

  • রিটার্ন ভ্যালু

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

ডিলিটরবট (((...)

DeleteRobot(RobotId, DeleteLogs)নির্দিষ্ট আইডি (রোবট) দিয়ে রোবট মুছে ফেলবেID: RobotId) এর সাথে মিলে যায়API KEYFMZ Quant অ্যাকাউন্টের অধীনে অনুরোধে।

  • প্যারামিটারRobotIdপূর্ণসংখ্যা প্রকারের, যথা রোবটIDমুছে ফেলা হবে।DeleteLogsবুল টাইপ; সেটDeleteLogsলগ মুছে ফেলতে হবে কিনা তা সিদ্ধান্ত নিতে;trueলগ মুছে ফেলা নির্দেশ করে।

  • রিটার্ন ভ্যালু

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

GetStrategyList ((()

GetStrategyList()কৌশলগত তথ্য সংগ্রহ করে।API KEYFMZ Quant ট্রেডিং প্ল্যাটফর্মের অ্যাকাউন্টের অনুরোধে।

  • প্যারামিটার কোনটিই

  • রিটার্ন মান

    {
        "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 KEYFMZ Quant অ্যাকাউন্টের অনুরোধে।

  • প্যারামিটার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)কল করার জন্য বর্ধিত API ব্যবহার করেডিবাগিং টুল 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 KEYFMZ Quant অ্যাকাউন্টের অনুরোধে।

  • প্যারামিটার

    প্যারামিটারের নাম প্রকার মন্তব্যসমূহ
    robotId পূর্ণসংখ্যা বট আইডি

    টেবিল লগডাটাবেস টেবিলের লগ ডেটা অনুসন্ধান করেঃ

    প্যারামিটারের নাম প্রকার মন্তব্যসমূহ
    লগমিনড পূর্ণসংখ্যা লগের ন্যূনতম আইডি
    logMaxId পূর্ণসংখ্যা লগের সর্বাধিক আইডি
    লগঅফসেট পূর্ণসংখ্যা পরিসীমা logMinId এবং logMaxId দ্বারা নির্ধারিত হয় পরে, logOffset অফসেট (কত রেকর্ড skip) তথ্য প্রাপ্তির জন্য শুরু অবস্থান হিসাবে ব্যবহার করা শুরু হয়
    logLimit পূর্ণসংখ্যা শুরু অবস্থান নির্ধারণ করার পর, নির্বাচিত তথ্য রেকর্ডের সংখ্যা

    টেবিল মুনাফাডাটাবেস টেবিলের মুনাফা তথ্য অনুসন্ধান করেঃ

    প্যারামিটারের নাম প্রকার মন্তব্যসমূহ
    মুনাফা পূর্ণসংখ্যা রেকর্ডের ন্যূনতম আইডি
    লাভMaxId পূর্ণসংখ্যা রেকর্ডের সর্বোচ্চ আইডি
    মুনাফাঅফসেট পূর্ণসংখ্যা অফসেট (কয়েকটি রেকর্ড এড়িয়ে যাওয়া হয়) প্রারম্ভিক অবস্থান হিসাবে ব্যবহার করা শুরু হয়
    লাভসীমা পূর্ণসংখ্যা শুরু অবস্থান নির্ধারণ করার পর, নির্বাচিত তথ্য রেকর্ডের সংখ্যা

    টেবিল চার্টডাটাবেস টেবিলের চার্ট ডেটা অনুসন্ধান করেঃ

    প্যারামিটারের নাম প্রকার মন্তব্যসমূহ
    চার্ট পূর্ণসংখ্যা রেকর্ডের ন্যূনতম আইডি
    চার্টMaxId পূর্ণসংখ্যা রেকর্ডের সর্বোচ্চ আইডি
    চার্টঅফসেট পূর্ণসংখ্যা অফসেট
    চার্টসীমা পূর্ণসংখ্যা প্রাপ্ত রেকর্ডের সংখ্যা
    chartUpdateBaseId পূর্ণসংখ্যা আপডেট করা বেস আইডি অনুসন্ধান করুন
    চার্টUpdateDate পূর্ণসংখ্যা ডেটা রেকর্ড টাইমস্ট্যাম্প আপডেট করে যা এই টাইমস্ট্যাম্পের চেয়ে বড় রেকর্ডগুলি ফিল্টার করবে

    সংক্ষিপ্তসারসীমাস্ট্যাটাস বারের তথ্য অনুসন্ধান করেঃ

    এটি বটের স্ট্যাটাস বার ডেটা অনুসন্ধান করে। প্যারামিটার প্রকারটি পূর্ণসংখ্যা। 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, ২): 20016 1526954372591 "" ""
    3976 5 "" "" 0 0 OKCoin:this_week too many positions, long: 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

প্লাগইনের নীতি

নীতিটি ডিবাগিং সরঞ্জামটির মতোইঃ ট্রেড টার্মিনাল পৃষ্ঠার ডকারের কাছে একটি কোড পাঠান এবং চার্ট এবং টেবিলগুলি ফেরত দিতে সহায়তা করুন (ডিবাগিং সরঞ্জামটি আপগ্রেডের পরেও সমর্থন করতে সক্ষম) । ফাংশনটি একইডিবাগিং টুল, এটা শুধুমাত্র 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

    More Strategies এর অন্যান্য উদাহরণ রয়েছে, যেমনঃছোট পরিমাণে কিনুন / বিক্রি করুন, কৌশল ঠিকানা.

কিভাবে ব্যবহার করবেন

  • ট্রেডিং টার্মিনালের প্লাগইন মডিউল যোগ করুন চিত্রের মত, Trade টার্মিনাল পৃষ্ঠায় মডিউল যোগ মেনু খুলুন, ট্রেডিং টার্মিনাল প্লাগইনকৌশল গ্রন্থাগারবর্তমান এফএমজেড অ্যাকাউন্টটি স্বয়ংক্রিয়ভাবে তালিকায় প্রদর্শিত হবে, যোগ করা প্লাগইনটি খুঁজুন এবং 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 ডিফল্ট ১) ।
  • delta(x, d): সময় সিরিজের বর্তমান মান x বিয়োগ d সময়ের আগে মান।
  • signedpower(x, a): x^a.
  • decay_linear(x, d): d-period moving average of time series x, with weights being d, d-1, d-2... 1 (normalized) সময় সিরিজের ওজনযুক্ত d-period চলমান গড়, যার ওজন d, d-1, d-2... 1 (ন্যরমালাইজড) ।
  • indneutralize(x, g): শিল্প শ্রেণিবিন্যাসের জন্য নিরপেক্ষ প্রক্রিয়াকরণ g, বর্তমানে সমর্থিত নয়।
  • ts_{O}(x, d)O অপারেশনগুলি x সময় সিরিজে গত d সময়ের মধ্যে সম্পাদন করুন (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প্রোটোকল প্লাগ-ইন প্রোগ্রামটি কেবল প্রোটোকল প্লাগ-ইন প্রোগ্রাম এবং এক্সচেঞ্জ ইন্টারফেসের মধ্যে মিথস্ক্রিয়া। প্রোটোকল প্লাগ-ইন প্রোগ্রামটিতে এফএমজেড কোয়ান্টের মতো ডকার প্রোগ্রাম মিথস্ক্রিয়া এবং ডেটা ফর্ম্যাটের একই বিশদ প্রক্রিয়াকরণ রয়েছে। বিস্তারিত জানার জন্য, দয়া করে উপরের লিঙ্কগুলিতে উদাহরণগুলি দেখুন।

ট্রেডিং টার্মিনাল

এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্ম একটি মডুলার এবং কাস্টমাইজযোগ্যবাণিজ্যআপনি অবাধে বিভিন্ন ডেটা মডিউল এবং ট্রেডিং ফাংশন মডিউল যোগ করতে পারেন, এবং এমনকি তাদের নিজস্ব কোড মডিউল (ট্রেডিং টার্মিনাল প্লাগইন) বিকাশ করতে পারেন। এর অত্যন্ত নমনীয় এবং বিনামূল্যে ব্যবহারের সাথে, এটি ম্যানুয়াল ট্রেডিং এবং আধা-প্রোগ্রাম্যাটিক ট্রেডিং ব্যবহারকারীদের ব্যাপকভাবে সহজ করে তোলে। Trade পৃষ্ঠার বিভিন্ন মডিউল টেনে আনতে এবং জুম করতে পারেন, মডিউলগুলির সাথে সংযুক্ত ট্রেডিং জোড়া এবং এক্সচেঞ্জগুলির সেটিংস পরিবর্তন করতে পারেন এবং একই ধরণের একাধিক মডিউল যুক্ত করতে পারেন।

img

ডিবাগিং টুল

ডিবাগ টুলপৃষ্ঠাটি বট দ্বারা দ্রুত কোড পরীক্ষা করার জন্য একটি পরিবেশ প্রদান করে, শুধুমাত্র সমর্থন করেJavaScript currently.

img

দূরবর্তী সম্পাদনা

এটি স্থানীয় সম্পাদক দূরবর্তী সিঙ্ক্রোনাইজেশন কৌশল কোড সমর্থন করে FMZ Quant ট্রেডিং প্ল্যাটফর্ম এবং এটি সমর্থন করেSublime Text/Atom/Vim/VSCodeসম্পাদক. কৌশল সম্পাদনা পৃষ্ঠায়, ক্লিক করুন Remote Edit বর্তমান কৌশলটির দূরবর্তী সিঙ্ক্রোনাইজেশন কী (টোকন) প্রদর্শন করতে প্লাগইন ডাউনলোড ঠিকানা বোতামটি খুলতে।

img

বর্তমান কী প্রদর্শনটি রিফ্রেশ করতে আপডেট কী ক্লিক করুন এবং বর্তমান কৌশলটির গোপন কী (টোকন) মুছে ফেলার জন্য ডিলেট কী ক্লিক করুন।

img

বিভিন্ন সম্পাদকের প্লাগ-ইন ইনস্টলেশন পদ্ধতি সামান্য ভিন্ন। আপনি নির্দিষ্ট দূরবর্তী সিঙ্ক্রোনাইজেশন প্লাগ-ইন আইটেমটিতে ঝাঁপ দিতে ডাউনলোড বোতামে ক্লিক করতে পারেন।

img

বট প্যারামিটার আমদানি ও রপ্তানি

img

লাইভ ট্রেডিং চালানোর সময়, আপনি বাস্তব বট কনফিগারেশন পরামিতি তথ্য সংরক্ষণ করতে হবে, আপনি Export বোতাম ক্লিক করতে পারেন. এক্সপোর্ট কৌশল পরামিতি মধ্যে সংরক্ষণ করা হবেJSONফাইল, এবং রপ্তানি কৌশল পরামিতি কনফিগারেশন আবার বাস্তব বট আমদানি করা যেতে পারে. বর্তমান বাস্তব বট সংরক্ষিত কৌশল বট পরামিতি আমদানি করতে Import বোতাম ক্লিক করুন. তারপর, সংরক্ষণ করতে Save ক্লিক করুন.

কৌশল আমদানি ও রপ্তানি ফাইল

img

  • উৎস কোড ডাউনলোড করুন কৌশল উত্স কোড রপ্তানি করুন, এবং রপ্তানি ফাইলের ধরন কৌশল প্রোগ্রামিং ভাষা উপর ভিত্তি করে। জাভাস্ক্রিপ্ট কৌশল এক্সটেনশন সঙ্গে ফাইল রপ্তানিjs; পাইথন কৌশল এক্সটেনশান সহ ফাইল রপ্তানি করেpy; সি++ কৌশল এক্সটেনশান সহ ফাইল এক্সপোর্ট করেcpp; মাইল্যাঙ্গুয়েজ কৌশল এক্সটেনশান সহ ফাইল এক্সপোর্ট করেtxt. লক্ষ্য করুন যে শুধুমাত্র কৌশল উৎস কোড রপ্তানি করা হয়, কৌশল পরামিতি, টেমপ্লেট রেফারেন্স, ইত্যাদি সহ নয়

  • রপ্তানি কৌশল কৌশল উৎস কোড এবং পরামিতি নকশা মত সমস্ত কৌশল তথ্য সহ সম্পূর্ণ কৌশল রপ্তানি করুন.xml file.

  • আমদানি কৌশল ব্যবহার করুনxmlএক্সপোর্ট ফাংশন দ্বারা এক্সপোর্ট করা ফাইল, এবং নির্বাচন করতে কৌশল সম্পাদনা পৃষ্ঠায় আমদানি বোতামে ক্লিক করুন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]");
}

উইক্সঅ্যাপ সিমুলেশন মার্কেট

  • ২৪ ঘন্টা অন-স্টপ অপারেশন, শক্তিশালী ট্রেডিং ম্যাচিং সিস্টেম, বাস্তব ট্রেডিং সিমুলেট।
  • শক্তিশালী মার্কেট মেকিং বট যা ভালো লিকুইডিটি এবং অর্ডার বুকের গভীরতা প্রদান করে।
  • সম্পূর্ণ এপিআই ইন্টারফেস সমর্থন, না শুধুমাত্র সিমুলেটেড পরিমাণগত ট্রেডিং জন্য FMZ Quant উপর পরীক্ষা করা যেতে পারে, কিন্তু এছাড়াও নিজের দ্বারা এপিআই ইন্টারফেস সংযোগ করতে পারেন, ঠিকানাঃWexApp.

ডকার প্রোগ্রাম প্যারামিটার

ডকার সফটওয়্যার ডাউনলোড করার পর, এক্সিকিউটেবল ফাইলটি ডিকম্প্রেশনের পরে (ফাইলের নামঃrobot) হ'ল ডকার প্রোগ্রাম; ডকার প্রোগ্রামটি স্থাপন করার সময় ডকার প্রোগ্রামের জন্য প্যারামিটারগুলি নির্দিষ্ট করা যেতে পারে।

  • -v: বর্তমান ডকার প্রোগ্রামের সংস্করণ এবং কম্পাইলের সময় সহ তথ্য পরীক্ষা করুন। সম্পূর্ণ এক্সিকিউশন কমান্ড ভিত্তিক হয়Apple Mac System: ./robot -v.
  • -s: ডকার প্রোগ্রাম চালানোর সময় FMZ কোয়ান্ট ট্রেডিং প্ল্যাটফর্মের সাথে যোগাযোগের জন্য নির্দিষ্ট ঠিকানা। সম্পূর্ণ এক্সিকিউশন কমান্ড ভিত্তিক হয়Apple Mac System: ./robot -s node.fmz.com/xxxxxxx; xxxxxxxFMZ Quant Trading প্ল্যাটফর্মের প্রতিটি অ্যাকাউন্টের অনন্য সনাক্তকরণ আইডি; কমান্ডটি কার্যকর করার পরে, সংশ্লিষ্ট FMZ Quant Trading প্ল্যাটফর্মের অ্যাকাউন্টের পাসওয়ার্ড প্রবেশ করার জন্য একটি অনুরোধ থাকবে।
  • -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, যা লাইভ ট্রেডিং শুরু করতে ব্যর্থ হবে। ত্রুটির কারণ হল যে FMZ অ্যাকাউন্ট পাসওয়ার্ড পরিবর্তন সমস্ত কনফিগার করা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) । সাব-অ্যাকাউন্ট তৈরির পাতা দেখতে Sub-Account ক্লিক করুন, যোগ করা সাব-অ্যাকাউন্টটিতে যে বটটি অ্যাক্সেস করতে পারে তা নির্বাচন করুনউপলব্ধ অনুমতিনিয়ন্ত্রণ, এবং উপ-অ্যাকাউন্ট সেটব্যবহারকারীর নামএবংসাব-অ্যাকাউন্ট লগইন পাসওয়ার্ডমধ্যেব্যবহারকারীর তথ্যcontrol. একটি উপ-অ্যাকাউন্ট তৈরি করতে Sub-member যুক্ত করুন বোতামটি ক্লিক করুন। যোগ করা উপ-অ্যাকাউন্টটি বর্তমান পৃষ্ঠায় প্রদর্শিত হবে এবং modified, locked/unlocked, এবং deleted হতে পারে।

উপ-অ্যাকাউন্টের অনুমতি সীমিত; শুধুমাত্র অনুমোদিত বটগুলিউপলব্ধ অনুমতিউপ-অ্যাকাউন্টে দেখা যাবে। অনুমোদিত বট প্যারামিটার পরিবর্তন, লাইভ ট্রেডিং বন্ধ এবং পুনরায় শুরু করার ক্ষমতা আছে, কিন্তু এটি বট দ্বারা কনফিগার করা বিনিময় বস্তু পরিবর্তন করতে পারে না। উপ-অ্যাকাউন্টের ব্যবহারের দৃশ্যকল্প সাধারণতঃ

  • উঃ যখন পরিমাণগত দল একাধিক বট কৌশল পরিচালনা করে তখন লগ ইন এবং পরিচালনা করা সুবিধাজনক।
  • বি. যখন কৌশলটি ভাড়া দেওয়া হয় তখন ডিবাগিং।

লাইভ ট্রেডিং ভিউ FMZ প্ল্যাটফর্মের বট তালিকায়বট পাতা, বর্তমান সারির বটগুলি সর্বজনীনভাবে প্রদর্শন করতে Public বোতামটি ক্লিক করুন। বর্তমানে লাইভ বটগুলি দেখার দুটি উপায় রয়েছেঃ

    1. [লাইভ ভিউ] এ বট প্রদর্শন করুন (https://www.fmz.com/live) পৃষ্ঠাটি FMZ প্ল্যাটফর্মে প্রকাশিত হয়, পাবলিক বোতামে ক্লিক করার পর, এবংজনসাধারণের অংশ.
    1. দেখার জন্য একটি ব্যক্তিগত লিঙ্ক তৈরি করুন। পাবলিক বোতামে ক্লিক করে এবং নির্বাচন করার পরঅভ্যন্তরীণ শেয়ার, আপনি কৌশল বট এর ব্যক্তিগত লাইভ ভিউ পৃষ্ঠায় লগ ইন করার জন্য একটি ব্যক্তিগত লিঙ্ক তৈরি করার জন্য একটি বৈধতা সময়কাল সেট করতে পারেন.

কৌশল ভাগাভাগি ও ভাড়া

চালু কৌশলপৃষ্ঠা, কৌশল ডান দিকে Action বোতামে ক্লিক করার পর, মেনু যে পপ আপ ভাগ এবং ভাড়া জন্য অপশন আছে.

কৌশল ভাগাভাগি

  • পাবলিক শেয়ারিং Share বোতামে ক্লিক করার পর, একটি ডায়ালগ বক্স পপ আপ হবে, এবং আপনি Public Sharing নির্বাচন করতে পারেন, তাই কৌশলটি সম্পূর্ণরূপে প্ল্যাটফর্মে More Strategies ভাগ করা হয়, এবং যেকোনো ব্যবহারকারী কৌশলটি কপি করতে পারেন।

  • অভ্যন্তরীণ শেয়ারিং Share বোতামে ক্লিক করার পর, একটি ডায়ালগ বক্স পপ আপ হবে, এবং আপনি Internal Sharing নির্বাচন করতে পারেন।কপি পৃষ্ঠার ঠিকানাএবংকপি কোডএই কৌশল তৈরি করা হবে. এটি মনোনীত FMZ প্ল্যাটফর্ম ব্যবহারকারীদের বিতরণ করা যেতে পারে. এই কৌশল প্রয়োজন যারা ব্যবহারকারীদের শুধুমাত্রকপি পৃষ্ঠার ঠিকানালিঙ্ক, লগ ইন করতেকপি পাতাএবং কপি কোডটি প্রবেশ করান কৌশলটি পাওয়ার জন্য। কৌশলটি পাওয়ার পরে, এটি স্বয়ংক্রিয়ভাবে Strategy পৃষ্ঠায় উপস্থিত হবে।

কৌশল ভাড়া

  • পাবলিক বিক্রয় Rent বোতামে ক্লিক করার পর, একটি ডায়ালগ বক্স পপ আপ হবে, এবং আপনি Public Sale নির্বাচন করতে পারেন। কৌশলটি তালিকাভুক্ত করার জন্য প্রয়োগ করা যেতে পারে (অনুমোদনের সাপেক্ষে) ।

  • অভ্যন্তরীণ বিক্রয় Rent বোতামে ক্লিক করার পর, একটি ডায়ালগ বক্স পপ আপ হবে, এবং আপনি Internal Sale নির্বাচন করতে পারেন।নিবন্ধন পাতা ঠিকানাএবংকৌশল টোকেনএটি নির্দিষ্ট FMZ ব্যবহারকারীদের বিতরণ করা যেতে পারে। এই কৌশল প্রয়োজন যারা ব্যবহারকারীদের শুধুমাত্রনিবন্ধন পাতা ঠিকানালিঙ্ক, লগ ইন করতেনিবন্ধন পাতা. তারপরে, কৌশল ব্যবহারের অধিকার পেতে কৌশল টোকেনটি প্রবেশ করুন। কৌশলটি কৌশল পৃষ্ঠায় প্রদর্শিত হবে, তবে কেবল ব্যাকটেস্ট এবং বট ব্যবহারের অধিকার সহ। কৌশলটির উত্স কোডের মতো তথ্য অ্যাক্সেসযোগ্য।

গুরুত্বপূর্ণ নোটঃ যখন তৈরি এবং বিতরণকৌশল টোকেন, দয়া করে এটি একটি কৌশল টোকেন বা একটি কপি কোড কিনা তা সাবধানে নিশ্চিত করুন, যাতে ভুল করে কৌশলটি ভাগ করা না হয়।

ব্যাকটেস্টিং সিস্টেমে শার্প অ্যালগরিদম

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")স্বাক্ষর যাচাইকরণে অংশগ্রহণকারী হুবি ফিউচারসের বেস ঠিকানা পরিবর্তন করা। ব্যবহার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());
    }
    
  • ঠিক আছে OKX ইন্টারফেস OKX এর সিমুলেশন বট টেস্টিং পরিবেশে স্যুইচ করতে পারে; ব্যবহার করে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)বিচ্ছিন্ন অবস্থানের মোডে স্যুইচ করতে।

  • ফিউচার_MEXC ব্যবহারexchange.IO("cross", true)ক্রসড পজিশন মোডে স্যুইচ করতে এবং ব্যবহার করতে` ` বিনিময়.("ক্রস",


আরো