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

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

লেখক:শূন্য, তৈরিঃ 2020-04-20 10:19:00, আপডেটঃ 2023-04-12 14:44:56

পিপি খালি প্রধান ((() { এক্সচেঞ্জ[0].IO(base, https://api.huobipro.com”); }


The ZB exchange is special. There are two addresses: one is the market data interface address, and the other is the trading interface address. Switch the address:
```js
function main() {
    // The second parameter of exchange.IO is the trading interface address, and the third parameter is the market interface address, which is switched to an address that can be accessed domestically
    exchange.IO("base", "https://trade.zb.plus", "http://api.zb.plus")    
    // Print the account information
    Log(exchange.GetAccount())                                            
}
def main():
    exchange.IO("base", "https://trade.zb.plus", "http://api.zb.plus")
    Log(exchange.GetAccount())
void main() {
    exchange.IO("base", "https://trade.zb.plus", "http://api.zb.plus");
    Log(exchange.GetAccount());
}
  • বাজার মোড পরিবর্তন করুন বর্তমানে সমর্থিত এক্সচেঞ্জঃ

    বিনিময় মন্তব্যসমূহ
    হুবি স্পট ওয়েবসকেট প্রোটোকল সমর্থন করার পরে, কোডexchange.IO(currency, ETH) মুদ্রা পরিবর্তন করতে ব্যবহার করা যাবে না
    • exchange.IO("websocket")

      মার্কেট কমিউনিকেশন প্রোটোকল পরিবর্তন করুনwebsocket(ডিফল্ট হল বিশ্রাম), বাজার কোট পাওয়ার উপায়টি স্যুইচ করার পরে পরিবর্তিত হবে।exchange.GetTicker()এবংexchange.GetDepth()পরিবর্তন করা হবেwebsocketপ্রোটোকল আপডেট করার জন্য, বাজারের তথ্য অপরিশোধিত সক্রিয় অধিগ্রহণ থেকে বাজারের তথ্য প্যাসিভ অধিগ্রহণ, শুধুমাত্র Huobi এক্সচেঞ্জ বর্তমানে সমর্থিত.

    যখন বাজার মোডটি ধাক্কা প্রক্রিয়া হয়, আপনি নিম্নলিখিত ফাংশনটি সেট করতে কল করতে পারেনঃ

    • exchange.IO("mode", 0)অবিলম্বে রিটার্ন মোড। যদি বর্তমান বাজার তথ্য এক্সচেঞ্জ থেকে প্রাপ্ত করা হয় নি, পুরানো বাজার তথ্য অবিলম্বে ফিরে আসবে। যদি নতুন তথ্য থাকে, নতুন তথ্য ফিরে আসবে।

    • exchange.IO("mode", 1)ক্যাশে মোড (ডিফল্ট মোড) । যদি এক্সচেঞ্জের সর্বশেষ বাজার ডেটা প্রাপ্ত না হয় (পূর্ববর্তী ইন্টারফেস থেকে প্রাপ্ত ডেটার সাথে তুলনা করে), প্রাপ্তির জন্য অপেক্ষা করুন এবং তারপরে ফিরে আসুন। যদি এই ফাংশনটি কল করার আগে সর্বশেষ বাজার ডেটা প্রাপ্ত হয় তবে সর্বশেষ ডেটা অবিলম্বে ফিরে আসবে।

    • exchange.IO("mode", 2)জোর করে আপডেট মোড. প্রবেশ করুন এবং পরবর্তী সর্বশেষ push তথ্য বিনিময় গ্রহণ করা হয় এবং তারপর ফিরে আসা পর্যন্ত অপেক্ষা করুন.

    আপনি যদি প্রথমবারের মত সর্বশেষ বাজার তথ্য পেতে চান, তাহলে আপনিwebsocketআর ডাকো না,Sleepতথ্য পরীক্ষা করুন এবং অবিলম্বে পরীক্ষা করুন।exchange.GetTicker()এবংexchange.GetDepth()ফাংশন ক্যাশে মোডে কাজ করে, যেমনঃ

    function main () {
        exchange.IO("websocket")
        while (true) {
            Log(exchange.GetTicker())
        }
    }
    
    def main():
        exchange.IO("websocket")
        while True:
            Log(exchange.GetTicker())
    
    void main() {
        exchange.IO("websocket");
        while(true) {
            Log(exchange.GetTicker());
        }
    }
    
  • এক্সচেঞ্জ লিভারেজ অ্যাকাউন্ট মোড

    ব্যবহারexchange.IO("trade_margin")লিভারেজ অ্যাকাউন্ট মোডে স্যুইচ করার জন্য, অর্ডার স্থাপন এবং অ্যাকাউন্টের সম্পদ অ্যাক্সেস করার জন্য এক্সচেঞ্জের লিভারেজ ইন্টারফেস ব্যবহার করা হবে। ব্যবহারexchange.IO("trade_normal")স্বাভাবিক অ্যাকাউন্ট মোডে ফিরে যেতে।

    সমর্থিত এক্সচেঞ্জঃ

    বিনিময় বিশেষ মন্তব্য
    ঠিক আছে লিভারেজ অ্যাকাউন্ট মোডের ট্রেডিং জোড়া সাধারণ থেকে আলাদা এবং কিছু ট্রেডিং জোড়া উপলব্ধ নাও হতে পারে।exchange.IO("cross", true)লিভারেজযুক্ত অ্যাকাউন্টের পূর্ণ পজিশনে স্যুইচ করা এবংexchange.IO("cross", false)বিচ্ছিন্ন অবস্থানে স্যুইচ করুন।
    হুবি লিভারেজ অ্যাকাউন্ট মোডের ট্রেডিং জোড়া সাধারণগুলির থেকে আলাদা, এবং কিছু ট্রেডিং জোড়া উপলভ্য নাও হতে পারে। হুবি লিভারেজ অ্যাকাউন্ট ক্রস পজিশন এবং বিচ্ছিন্ন অবস্থানে বিভক্ত। ব্যবহারtrade_marginএকটি লিভারেজ অ্যাকাউন্টে বিচ্ছিন্ন পজিশনে স্যুইচ করতে;trade_super_marginএকটি লিভারেজ অ্যাকাউন্টে ক্রস পজিশন পরিবর্তন করতে;trade_normalস্বাভাবিক মুদ্রা মোডে স্যুইচ করতে
    ZB তহবিল কেবল QC তে স্থানান্তরিত হতে পারে। লিভারেজ ট্রেডিং সেক্টরে, বিভিন্ন ট্রেডিং জোড়ার মধ্যে তহবিল স্বাধীন, অর্থাৎ ETH_QC ট্রেডিং জোড়ার অধীনে QC মুদ্রার সংখ্যা BTC_QC তে দৃশ্যমান নয়
    বিন্যান্স লিভারেজ অ্যাকাউন্টগুলি ক্রস পজিশন এবং বিচ্ছিন্ন পজিশনে বিভক্ত।trade_marginবিচ্ছিন্ন অবস্থানে স্যুইচ করতে; ব্যবহারtrade_super_marginক্রসিং পজিশনে স্যুইচ করতে; ব্যবহারtrade_normalস্বাভাবিক মুদ্রা মোডে স্যুইচ করতে
    গেটআইও লিভারেজ অ্যাকাউন্টগুলি ক্রস পজিশন এবং বিচ্ছিন্ন পজিশনে বিভক্ত।trade_marginবিচ্ছিন্ন অবস্থানে স্যুইচ করতে; ব্যবহারtrade_super_marginক্রসিং পজিশনে স্যুইচ করতে; ব্যবহারtrade_normalস্বাভাবিক মুদ্রা মোডে স্যুইচ করতে
    AscendEx ব্যবহারexchange.IO("trade_margin")লিভারেজ অ্যাকাউন্ট মোডে স্যুইচ করতে এবংexchange.IO("trade_normal")স্বাভাবিক অ্যাকাউন্ট মোডে ফিরে যেতে।

এক্সচেঞ্জ.লগ (((...)

exchange.Log(LogType, Price, Amount)যখন কল করা হয় তখন অর্ডার দেয় না, এবং এটি কেবল এক্সচেঞ্জ লগের তথ্য আউটপুট করার জন্য ট্রেডিং তথ্য রেকর্ড করে।

নোটঃ

  • এই ফাংশন একটি সদস্য ফাংশনexchangeবস্তু, যা গ্লোবাল ফাংশন থেকে ভিন্নLog().
  • প্যারামিটার মানঃLogTypeনিতে পারেLOG_TYPE_BUY, LOG_TYPE_SELL, LOG_TYPE_CANCELএবংPriceদাম হিসাবে, এবংAmountযখনLogTypeহয়LOG_TYPE_CANCEL, Priceপ্যারামিটার হল অর্ডার আইডি।

ব্যবহারexchange.Log(LogType, Price, Amount)লাইভ ট্রেডিং ফলো-আপ টেস্টিং, সিমুলেটেড অর্ডার প্লেসমেন্ট এবং অর্ডার রেকর্ডিংয়ে সহায়তা করা।

সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে হলঃexchange.IOশর্তাধীন অর্ডার স্থাপন করার জন্য এক্সচেঞ্জের শর্তাধীন অর্ডার ইন্টারফেস তৈরিতে অ্যাক্সেস করার ফাংশন।exchange.IOফাংশন বট লগ রেকর্ডিং মধ্যে বিনিময় লগ তথ্য আউটপুট হবে না. সুতরাং আপনি ব্যবহার করতে পারেনexchange.Log(LogType, Price, Amount)অর্ডার দেওয়ার তথ্য রেকর্ড করার জন্য লগ আউটপুটকে সম্পূরক করতে।

var id = 123
function main() {
    // Order type: buy; price: 999; quantity: 0.1
    exchange.Log(LOG_TYPE_BUY, 999, 0.1)      
    // Cancel the order
    exchange.Log(LOG_TYPE_CANCEL, id)         
}
id = 123
def main():
    exchange.Log(LOG_TYPE_BUY, 999, 0.1)
    exchange.Log(LOG_TYPE_CANCEL, id)
void main() {
    auto id = 123;
    exchange.Log(LOG_TYPE_BUY, 999, 0.1);
    exchange.Log(LOG_TYPE_CANCEL, id);
}

এক্সচেঞ্জ.এইচএমএসি ((...)

exchange.HMAC(Algo, OutputAlgo, Data, Key)সমর্থন করেHMACএনক্রিপশন গণনাmd5/এসএ২৫৬/sha512/শ1, এবং শুধুমাত্র লাইভ ট্রেডিং চলমান সমর্থিত.

exchange.HMAC("sha256", "hex", "xxxxx", "{{secretkey}}")উদ্ধৃতি হিসেবেaccessKey, ব্যবহার"{{accesskey}}". উদ্ধৃতি হিসেবেsecretKey, ব্যবহার"{{secretkey}}"; অথবা আপনি সাধারণ পাঠ্য ব্যবহার করতে পারেন"abc-123-xxxx". "{{accessKey}}","{{secretkey}}"শুধুমাত্র এই ফাংশনটি ব্যবহার করা হলে বৈধ।OutputAlgoসমর্থনঃ hex, base64নির্দিষ্ট উদাহরণ

BitMEX অবস্থান পরিবর্তন চাপুন (WSS প্রোটোকল)

function main() {
    var APIKEY = "your Access Key(Bitmex API ID)"
    var expires = parseInt(Date.now() / 1000) + 10
    var signature = exchange.HMAC("sha256", "hex", "GET/realtime" + expires, "{{secretkey}}")
    var client = Dial("wss://www.bitmex.com/realtime", 60)
    var auth = JSON.stringify({args: [APIKEY, expires, signature], op: "authKeyExpires"})
    var pos = 0
    client.write(auth)
    client.write('{"op": "subscribe", "args": "position"}')
    while (true) {
        bitmexData = client.read()
        if(bitmexData.table == 'position' && pos != parseInt(bitmexData.data[0].currentQty)){
            Log('position change', pos, parseInt(bitmexData.data[0].currentQty), '@')
            pos = parseInt(bitmexData.data[0].currentQty)
        }
    }
}
import time
def main():
    APIKEY = "your Access Key(Bitmex API ID)"
    expires = int(time.time() + 10)
    signature = exchange.HMAC("sha256", "hex", "GET/realtime" + str(expires), "{{secretkey}}")
    client = Dial("wss://www.bitmex.com/realtime", 60)
    auth = json.dumps({"args": [APIKEY, expires, signature], "op": "authKeyExpires"})
    pos = 0
    client.write(auth)
    client.write('{"op": "subscribe", "args": "position"}')
    while True:
        bitmexData = json.loads(client.read())
        if "table" in bitmexData and bitmexData["table"] == "position" and len(bitmexData["data"]) != 0 and pos != bitmexData["data"][0]["currentQty"]:   
            Log("position change", pos, bitmexData["data"][0]["currentQty"], "@")
            pos = bitmexData["data"][0]["currentQty"]
void main() {
    auto APIKEY = "your Access Key(Bitmex API ID)";
    auto expires = Unix() + 10;
    auto signature = exchange.HMAC("sha256", "hex", format("GET/realtime%d", expires), "{{secretkey}}");
    
    auto client = Dial("wss://www.bitmex.com/realtime", 60);
    json auth = R"({"args": [], "op": "authKeyExpires"})"_json;

    auth["args"].push_back(APIKEY);
    auth["args"].push_back(expires);
    auth["args"].push_back(signature);
    auto pos = 0;
    client.write(auth.dump());
    client.write("{\"op\": \"subscribe\", \"args\": \"position\"}");
    while(true) {
        auto bitmexData = json::parse(client.read());
        if(bitmexData["table"] == "position" && bitmexData["data"][0].find("currentQty") != bitmexData["data"][0].end() && pos != bitmexData["data"][0]["currentQty"]) {
            Log("Test");
            Log("position change", pos, bitmexData["data"][0]["currentQty"], "@");
            pos = bitmexData["data"][0]["currentQty"];
        }
    }
}

বিনিময়.Go (((...)

exchange.Go(Method, Args...)হল মাল্টি-থ্রেডেড অ্যাসিনক্রোন সমর্থিত ফাংশন, যা সমস্ত সমর্থিত ফাংশনগুলির অপারেশনকে অ্যাসিনক্রোন সমান্তরাল (যা শুধুমাত্র ক্রিপ্টোকারেন্সি এক্সচেঞ্জকে সমর্থন করে) রূপান্তর করতে পারে। প্যারামিটার মানঃMethod, স্ট্রিং টাইপের, যথা একই সাথে কল করা ফাংশনের নাম।

নোটঃ

  • এই ফাংশনটি শুধুমাত্র লাইভ ট্রেডিং চলাকালীন মাল্টি-থ্রেডেড এক্সিকিউশন টাস্ক তৈরি করে। ব্যাকটেস্ট মাল্টি-থ্রেডেড সিম্প্লান্ট এক্সিকিউশন টাস্ক সমর্থন করে না (ব্যাকটেস্ট উপলব্ধ, তবে এটি এখনও ধারাবাহিকভাবে চালিত হয়) ।
  • এর পরexchange.Goফাংশন একটি বস্তু ফেরত,waitফাংশনটি অবজেক্টের মাধ্যমে থ্রেড দ্বারা ফেরত দেওয়া ডেটা পুনরুদ্ধার করতে বলা হয়। থ্রেডটি কল করে ডেটা অধিগ্রহণের পরে স্বয়ংক্রিয়ভাবে মুক্তি পাবেwaitযদি টাইমআউট প্যারামিটার নির্দিষ্টwait, টাইমআউট ঘটলেও থ্রেডটি মুক্তি পাবে না; এইভাবে, থ্রেডটি কেবলমাত্র থ্রেডের ফলাফলটি পেয়ে স্বয়ংক্রিয়ভাবে মুক্তি পাবে (এমনকি সমান্তরালভাবে অ্যাক্সেস করা ইন্টারফেসটি সফলভাবে বা ব্যর্থভাবে কল করা হয়েছে কিনা তা বিবেচ্য নয়) ।
  • সহজ কথায় বলতে গেলে, প্রয়োগ করা থ্রেড সফল হোক বা না হোক, ফলাফলটি অবশ্যই প্রয়োগ করা থ্রেড দ্বারা অর্জন করা উচিত।waitফাংশন, এবং থ্রেড রিসোর্স দ্বারা প্রয়োগexchange.Goফাংশন ডকার দ্বারা স্বয়ংক্রিয়ভাবে মুক্তি পায়।
  • যদি রিটার্ন ফলাফলwaitফাংশনটি শেষ না হলে, থ্রেড রিসোর্সগুলি স্বয়ংক্রিয়ভাবে মুক্তি পাবে না, যা প্রয়োগ করা থ্রেডগুলির জমা হওয়ার কারণ হবে; যদি থ্রেডের সংখ্যা 2000 এর বেশি হয় তবে একটি ত্রুটি রিপোর্ট করা হবেঃ"too many routine wait, max is 2000".

সমর্থিত ফাংশনঃGetTicker, GetDepth, GetTrades, GetRecords, GetAccount, GetOrders, GetOrder, CancelOrder, Buy, Sell, GetPositionএবংIO.

function main(){
    // The following four operations are executed concurrently and asynchronously by multiple threads, without time-consuming, but with immediate return.
    var a = exchange.Go("GetTicker")
    var b = exchange.Go("GetDepth") 
    var c = exchange.Go("Buy", 1000, 0.1)
    var d = exchange.Go("GetRecords", PERIOD_H1)
           
    // Call the "wait" method, to wait for the return of the asynchronously obtained "ticker" result 
    var ticker = a.wait()            
    // Return the depth; it is possible to return null, if the acquisition fails 
    var depth = b.wait()             
    // Return the order number; limit the timeout in 1 second; the timeout returns "undefined"; this object can continue to call "wait" to wait if the last "wait" is timeout 
    var orderId = c.wait(1000)
    if(typeof(orderId) == "undefined") {
        // Timeout, reacquire
        orderId = c.wait()
    }
    var records = d.wait()
}
def main():
    a = exchange.Go("GetTicker")
    b = exchange.Go("GetDepth")
    c = exchange.Go("Buy", 1000, 0.1)
    d = exchange.Go("GetRecords", PERIOD_H1)

    ticker, ok = a.wait()
    depth, ok = b.wait()
    orderId, ok = c.wait(1000)
    if ok == False:
        orderId, ok = c.wait()
    records, ok = d.wait()
void main() {
    auto a = exchange.Go("GetTicker");
    auto b = exchange.Go("GetDepth");
    auto c = exchange.Go("Buy", 1000, 0.1);
    auto d = exchange.Go("GetRecords", PERIOD_H1);

    Ticker ticker;
    Depth depth;
    Records records;
    TId orderId;
    a.wait(ticker);
    b.wait(depth);
    if(!c.wait(orderId, 300)) {
        c.wait(orderId);
    }
    d.wait(records);
}

নোটঃ

  • বিচার করার জন্যundefined, ব্যবহারtypeof(xx)==="undefined"কারণnull == undefinedজাভাস্ক্রিপ্টে পাওয়া যায়।
function main() {
    var d = exchange.Go("GetRecords", PERIOD_H1)
    // Wait for K-line result
    var records = d.wait()
    // Here we wait for an asynchronous operation that has been waited and ended; it will return null, and record the error
    var ret = d.wait()
}
def main():
    d = exchange.Go("GetRecords", PERIOD_H1)
    records, ok = d.wait()
    ret, ok = d.wait()
void main() {
    auto d = exchange.Go("GetRecords", PERIOD_H1);
    Records records;
    d.wait(records);
    Records ret;
    d.wait(ret);
}

এর মধ্যে পার্থক্যPythonএবংJavaScriptএটা কিPythonএরwaitফাংশন দুটি পরামিতি ফেরত দেয়ঃ প্রথমটি অ্যাসিনক্রোন এপিআই দ্বারা ফেরত দেওয়া ফলাফল; দ্বিতীয়টি নির্দেশ করে যে অ্যাসিনক্রোন কলটি সম্পন্ন হয়েছে কিনা।

Pythonউদাহরণঃ

def main():
    d = exchange.Go("GetRecords", PERIOD_D1)
    # "ok" must return "True", unless the strategy is stopped
    ret, ok = d.wait()          
    # If the waiting times out, or "wait" for an ended instance, "ok" returns "False"
    ret, ok = d.wait(100)       
    ret, ok = d.wait(100)       

একসাথে একাধিক এক্সচেঞ্জের কোট সংগ্রহ করুনঃ

function main() {
    while(true) {
        var beginTS = new Date().getTime()
        var arrRoutine = []
        var arrTicker = []
        var arrName = []
        for(var i = 0; i < exchanges.length; i++) {
            arrRoutine.push(exchanges[i].Go("GetTicker"))
            arrName.push(exchanges[i].GetName())
        }

        for(var i = 0; i < arrRoutine.length; i++) {
            arrTicker.push(arrRoutine[i].wait())
        }
        var endTS = new Date().getTime()

        var tbl = {
            type: "table", 
            title: "Market Quotes", 
            cols: ["Index", "Name", "Latest Executed Price"], 
            rows: []
        }
        
        for(var i = 0; i < arrTicker.length; i++) {
            tbl.rows.push([i, arrName[i], arrTicker[i].Last])
        }

        LogStatus(_D(), "The total time to acquire multiple platforms concurrently is:", endTS - beginTS, "millisecond", "\n", "`" + JSON.stringify(tbl) + "`")
        Sleep(500)
    }
}
import time 
import json
def main():
    while True:
        beginTS = time.time()
        arrRoutine = []
        arrTicker = []
        arrName = []
        for i in range(len(exchanges)):
            arrRoutine.append(exchanges[i].Go("GetTicker"))
            arrName.append(exchanges[i].GetName())

        for i in range(len(exchanges)):
            ticker, ok = arrRoutine[i].wait()
            arrTicker.append(ticker)

        endTS = time.time()
        tbl = {
            "type": "table", 
            "title": "Market Quote", 
            "cols": ["Index", "Name", "Latest Executed Price"], 
            "rows": [] 
        }

        for i in range(len(arrTicker)):
            tbl["rows"].append([i, arrName[i], arrTicker[i]["Last"]])

        LogStatus(_D(), "The total time to acquire multiple platforms concurrently is:", endTS - beginTS, "second", "\n", "`" + json.dumps(tbl) + "`")
        Sleep(500)
void main() {
    while(true) {
        int length = exchanges.size();
        auto beginTS = UnixNano() / 1000000;
        Ticker arrTicker[length] = {};
        string arrName[length] = {};
        
        // Note that to add a few exchange objects, here we need to execute the "exchanges[n].Go" function several times. In this example, we need to add four exchange objects, which can be modified in details
        auto r0 = exchanges[0].Go("GetTicker");
        auto r1 = exchanges[1].Go("GetTicker");
        auto r2 = exchanges[2].Go("GetTicker");
        auto r3 = exchanges[3].Go("GetTicker");
        GoObj *arrRoutine[length] = {&r0, &r1, &r2, &r3};
        
        for(int i = 0; i < length; i++) {
            arrName[i] = exchanges[i].GetName();
        }

        for(int i = 0; i < length; i++) {
            Ticker ticker;
            arrRoutine[i]->wait(ticker);
            arrTicker[i] = ticker;
        }        
        auto endTS = UnixNano() / 1000000;

        json tbl = R"({
            "type": "table", 
            "title": "Market Quote", 
            "cols": ["Index", "Name", "Latest Executed Price"], 
            "rows": [] 
        })"_json;

        for(int i = 0; i < length; i++) {
            json arr = R"(["", "", ""])"_json;
            arr[0] = format("%d", i);
            arr[1] = arrName[i];
            arr[2] = format("%f", arrTicker[i].Last);
            tbl["rows"].push_back(arr);
        }

        LogStatus(_D(), "The total time to acquire multiple platforms concurrently is:", format("%d", endTS - beginTS), "millisecond", "\n", "`" + tbl.dump() + "`");
        Sleep(500);
    }
}

একযোগে ডাকেexchange.IO("api", ...)ফাংশনঃ

function main() {
    /*  
       Use the OKX placing order interface to test
        POST /api/v5/trade/order        
    */
    
    var beginTS = new Date().getTime()
    var param = {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"}
    var ret1 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", JSON.stringify(param))
    var ret2 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", JSON.stringify(param))
    var ret3 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", JSON.stringify(param))
    
    var id1 = ret1.wait()
    var id2 = ret2.wait()
    var id3 = ret3.wait()
    var endTS = new Date().getTime()    

    Log("id1:", id1)
    Log("id2:", id2)
    Log("id3:", id3)
    Log("Time for placing orders concurrently:", endTS - beginTS, "millisecond")
}
import time
import json
def main():
    beginTS = time.time()
    param = {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"}
    ret1 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", json.dumps(param))
    ret2 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", json.dumps(param))
    ret3 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", json.dumps(param))

    id1, ok1 = ret1.wait()
    id2, ok2 = ret2.wait()
    id3, ok3 = ret3.wait()
    endTS = time.time()

    Log("id1:", id1)
    Log("id2:", id2)
    Log("id3:", id3)
    Log("Time for placing orders concurrently:", endTS - beginTS, "second")
void main() {
    auto beginTS = UnixNano() / 1000000;
    json param = R"({"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"})"_json;
    auto ret1 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", param.dump());
    auto ret2 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", param.dump());
    auto ret3 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", param.dump());

    json id1 = R"({})"_json;
    json id2 = R"({})"_json;
    json id3 = R"({})"_json;

    ret1.wait(id1);
    ret2.wait(id2);
    ret3.wait(id3);
    auto endTS = UnixNano() / 1000000;

    Log("id1:", id1);
    Log("id2:", id2);
    Log("id3:", id3);
    Log("Time for placing orders concurrently:", endTS - beginTS, "millisecond");
}

অ্যাকাউন্ট তথ্য

এক্সচেঞ্জ.গেটঅ্যাকাউন্ট ((()

exchange.GetAccount()এক্সচেঞ্জ অ্যাকাউন্টের তথ্য প্রদান করে। রিটার্ন মানঃAccount structure.

  • Accountগঠন
function main(){
    var account = exchange.GetAccount()
    Log("Account information, Balance:", account.Balance, "FrozenBalance:", account.FrozenBalance, "Stocks:",
        account.Stocks, "FrozenStocks:", account.FrozenStocks)
}
def main():
    account = exchange.GetAccount()
    Log("Account information, Balance", account["Balance"], "FrozenBalance:", account["FrozenBalance"], "Stocks:", 
        account["Stocks"], "FrozenStocks:", account["FrozenStocks"])
void main() {
    auto account = exchange.GetAccount();
    Log("Account information, Balance", account.Balance, "FrozenBalance:", account.FrozenBalance, "Stocks:", 
        account.Stocks, "FrozenStocks:", account.FrozenStocks);
}

যদি এক্সচেঞ্জ অবজেক্টটি একটি ক্রিপ্টোকারেন্সি ফিউচার এক্সচেঞ্জে সেট করা হয় এবং একটি চুক্তিতে স্যুইচ করা হয়USDTযেমন মার্জিন (নির্দেশ দেখুনexchange.SetContractTypeকিভাবে পরিবর্তন করতে হবে তা জানার জন্য), সম্পদ গ্রহণUSDTমার্জিন হিসাবে, যা অ্যাট্রিবিউটে রেকর্ড করা হয়BalanceএবংFrozenBalance.

function main(){
    // Switch the trading pair
    exchange.IO("currency", "BTC_USDT")     
    // Take OKX futures as an example; set the contract as the contract of the week, and the current trading pair is BTC_USDT, so the current contract is BTC USDT-margined contract of this week
    exchange.SetContractType("this_week")   
    // Acquire the data of the current account assets
    var account = exchange.GetAccount()
    // The available balance of USDT as margin
    Log(account.Balance)
    // The frozen amount of USDT as margin
    Log(account.FrozenBalance)
}
def main():
    exchange.IO("currency", "BTC_USDT")
    exchange.SetContractType("this_week")    
    account = exchange.GetAccount()
    Log(account["Balance"])
    Log(account["FrozenBalance"])
void main() {
    exchange.IO("currency", "BTC_USDT");
    exchange.SetContractType("this_week");    
    auto account = exchange.GetAccount();
    Log(account.Balance);
    Log(account.FrozenBalance);
}

exchange.GetName ((()

exchange.GetName()এক্সচেঞ্জের নাম ফেরত দেয়। ফেরত মানঃ স্ট্রিং টাইপ। সাধারণত এটি নির্ধারণ করতে ব্যবহৃত হয়exchangeঅথবাexchanges[n]কৌশল কোডে বস্তু।

function main() {
    Log("Determine the exchange object to be OKX:", exchange.GetName() == "OKEX")
}
def main():
    Log("Determine the exchange object to be OKX:", exchange.GetName() == "OKEX")
void main() {
    Log("Determine the exchange object to be OKX:", exchange.GetName() == "OKEX");
}

ডকারের লাইন সংস্করণে কমান্ড করার জন্য, আপনি-1এক্সচেঞ্জের নামের একটি তালিকা মুদ্রণ করার জন্য কমান্ড।

এক্সচেঞ্জ.গেটলেবেল ((()

exchange.GetLabel()এক্সচেঞ্জের কাস্টম লেবেল ফেরত দেয়। ফেরত মানঃ স্ট্রিং টাইপ।

img

দ্যexchangeঅথবাexchanges[n]কৌশল কোডের বস্তুগুলি সাধারণত এক্সচেঞ্জ অবজেক্টগুলি কনফিগার করার সময় নির্ধারিত লেবেল দ্বারা নির্ধারিত হয়।

exchange.GetCurrency ((()

exchange.GetCurrency()এক্সচেঞ্জ দ্বারা পরিচালিত মুদ্রা জোড়ার নাম প্রদান করে, এবং ক্রিপ্টোকারেন্সি প্ল্যাটফর্ম একটি স্ট্রিং প্রদান করে, যেমনLTC_BTC. রিটার্ন মানঃ স্ট্রিং টাইপ.

বিনিময়.SetCurrency(...)

দ্যexchange.SetCurrency(Symbol)এক্সচেঞ্জ অবজেক্টের বর্তমান ট্রেডিং জোড়া স্যুইচ করতে ব্যবহৃত হয়।exchange.IO ("currency","BTC_USDT")এটি ব্যাকটেস্টিং সিস্টেমে ট্রেডিং জোড়ার স্যুইচিং সমর্থন করে, এবংpricing currencyব্যাকটেস্টিং সিস্টেমে ট্রেডিং জোড়া পরিবর্তন করার সময় পরিবর্তন করা যাবে না (উদাহরণস্বরূপ,BTC_USDTপরিবর্তন করা যেতে পারেLTC_USDT, কিন্তু এটিতে স্যুইচ করা যাবে নাLTC_BTC) একটি ট্রেডিং জোড়ার উপর স্যুইচ করার পরে যা প্রথমে ব্যাকটেস্টিং পৃষ্ঠায় সেট করা হয়েছিল,trading coinsহল 0 (উদাহরণস্বরূপ, ব্যাকটেস্টের সময়, ব্যাকটেস্ট পৃষ্ঠায় ট্রেডিং জোড়ার প্রাথমিক মান হলBTC_USDT, বিটিসির সংখ্যা ৩ এবং ইউএসডিটি এর সংখ্যা ১০০০।LTC_USDT, সংখ্যাtrading coinsস্যুইচ করার পর, এটি হবে ০, যার অর্থ অ্যাকাউন্টে LTC এর সংখ্যা ০, কিন্তু স্যুইচ করা ট্রেডিং জোড়ার শেয়ার্ড ইউএসডিটি পরিমাণ এখনও ১০০০) ।

function main() {
    var ticker = exchange.GetTicker() 
    Log(ticker)
    Log(exchange.GetAccount())    
    // Switch trading pairs, and pay attention to changes in market quote data and account information after switching
    Log("Switch LTC_USDT: ", exchange.SetCurrency("LTC_USDT"))
    ticker = exchange.GetTicker()
    Log(ticker)
    Log(exchange.GetAccount())
}
def main():
    ticker = exchange.GetTicker()
    Log(ticker)
    Log(exchange.GetAccount())
    Log(" Switch LTC_USDT: ", exchange.SetCurrency("LTC_USDT"))
    ticker = exchange.GetTicker()
    Log(ticker)
    Log(exchange.GetAccount())
void main() {
    auto ticker = exchange.GetTicker();
    Log(ticker);
    Log(exchange.GetAccount());
    exchange.SetCurrency("LTC_USDT");
    Log(" Switch LTC_USDT: ");
    ticker = exchange.GetTicker();
    Log(ticker);
    Log(exchange.GetAccount());
}

ব্যাকটেস্ট অপারেশনের ফলাফলঃ

img

exchange.GetQuoteCurrency ((()

exchange.GetQuoteCurrency()এক্সচেঞ্জ দ্বারা পরিচালিত বেস মুদ্রার নাম প্রদান করে। উদাহরণস্বরূপ,BTC_CNYরিটার্নCNY, এবংETH_BTCরিটার্নBTC. রিটার্ন মানঃ স্ট্রিং টাইপ.

ফিউচার ট্রেডিং

ক্রিপ্টোকারেন্সি ফিউচার এক্সচেঞ্জের জন্য, চুক্তির কোডটি তার কল করার আগে নির্দিষ্ট করতে হবে।বাজার, অর্ডারএবং অন্যান্য ইন্টারফেস, এবংexchange.SetContractTypeফাংশন বর্তমান চুক্তি কোড সেট করতে ব্যবহার করা প্রয়োজন. বিনিময় বস্তুর বর্তমান ট্রেডিং জোড়া স্যুইচ করার সময়, আপনি কল করতে হবেexchange.SetContractTypeপ্ল্যাটফর্ম দ্বারা সমর্থিত ডিজিটাল মুদ্রা বিনিময় চুক্তি কোডের জন্য, দয়া করে দেখুনexchange.SetContractType function.

বিনিময়.GetPosition ((()

exchange.GetPosition()বর্তমান অবস্থানের তথ্য পায়। রিটার্ন মানঃpositionগঠন অ্যারে. কোন অবস্থান নেই, এটি একটি খালি অ্যারে ফেরত, যথা[].

  • Positionগঠন

সাধারণত, ক্রিপ্টোকারেন্সি ফিউচার কন্ট্রাক্ট দুটি প্রকারের মধ্যে বিভক্তঃ

  • ডেলিভারি চুক্তি যখন একটি চুক্তি একটি ডেলিভারি চুক্তি সেট করা হয়, কলexchange.GetPosition()বর্তমান ট্রেডিং জোড়ার অধীনে বিতরণ চুক্তির সমস্ত অবস্থান ফেরত দেওয়া হবে।

  • চিরস্থায়ী চুক্তি যখন একটি চুক্তি একটি স্থায়ী চুক্তি সেট করা হয়, কলexchange.GetPosition()বর্তমান ট্রেডিং জোড়ার অধীনে চিরস্থায়ী চুক্তির সমস্ত পজিশন ফেরত দেওয়া হবে।

/*
    Note: if there is no position, it will returns an empty array, so you should judge whether the data returned by the interface is a null array, before you use the returned data
    For example:
    When the exchange is set to OKX futures, if the contract is set to be a delivery contract, when the position data of the current week, the next week, and the quarter is obtained, the data type will be an array of position structure.
    When the exchange is set to OKX futures, if the contract is set to a perpetual contract, the array of position structure containing the position data of the perpetual contract will be obtained.
*/

function main(){
    exchange.SetContractType("this_week")
    exchange.SetMarginLevel(10)
    exchange.SetDirection("buy")
    exchange.Buy(10000, 2)
    var position = exchange.GetPosition()
    if(position.length > 0){
        Log("Amount:", position[0].Amount, "FrozenAmount:", position[0].FrozenAmount, "Price:",
            position[0].Price, "Profit:", position[0].Profit, "Type:", position[0].Type,
            "ContractType:", position[0].ContractType)
    }
}
def main():
    exchange.SetContractType("this_week")
    exchange.SetMarginLevel(10)
    exchange.SetDirection("buy")
    exchange.Buy(10000, 2)
    position = exchange.GetPosition()
    if len(position) > 0:
        Log("Amount:", position[0]["Amount"], "FrozenAmount:", position[0]["FrozenAmount"], "Price:", 
            position[0]["Price"], "Profit:", position[0]["Profit"], "Type:", position[0]["Type"], 
            "ContractType:", position[0]["ContractType"])
void main() {
    exchange.SetContractType("this_week");
    exchange.SetMarginLevel(10);
    exchange.SetDirection("buy");
    exchange.Buy(10000, 2);
    auto position = exchange.GetPosition();
    if(position.size() > 0) {
        Log("Amount:", position[0].Amount, "FrozenAmount:", position[0].FrozenAmount, "Price:", 
            position[0].Price, "Profit:", position[0].Profit, "Type:", position[0].Type, 
            "ContractType:", position[0].ContractType);
    } 
}

এক্সচেঞ্জ.সেট মার্জিন লেভেল ((...)

exchange.SetMarginLevel(MarginLevel)প্যারামিটার মানঃ সংখ্যাসূচক টাইপ।

ক্রিপ্টোকারেন্সির ফিউচার অর্ডারের জন্য লিভারেজের আকার নির্ধারণ করুন, উদাহরণস্বরূপঃ

function main() {
    exchange.SetMarginLevel(10)
}
def main():
    exchange.SetMarginLevel(10)
void main() {
    exchange.SetMarginLevel(10);
}

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

কৌশল নকশায় লিভারেজ নির্ধারণের জন্য নোটঃ

  • শুধুমাত্র ক্রিপ্টোকারেন্সি ফিউচার সমর্থিত।
  • ব্যাকটেস্ট সুইচিং লিভারেজকে সমর্থন করে।

বিনিময়.SetDirection(...)

exchange.SetDirection(Direction)সেটexchange.Buyঅথবাexchange.Sellফিউচার অর্ডারের জন্য নির্দেশাবলী তৈরি করতে। প্যারামিটার মানঃ স্ট্রিং টাইপ।

দ্যSetDirectionফাংশনটি ফিউচার ট্রেডিং দিক এবং অর্ডার স্থাপন ফাংশনের মধ্যে সম্পর্ক নির্ধারণ করেঃ

অর্ডার স্থাপন ফাংশন SetDirection ফাংশনের জন্য প্যারামিটার সেটিং দিক মন্তব্যসমূহ
exchange.Buy খরিদ করুন খোলা লং পজিশন কিনুন
exchange.Buy বিক্রয় বন্ধ শর্ট পজিশন বন্ধ করুন
exchange.Sell বিক্রয় খোলা শর্ট পজিশন বিক্রি
exchange.Sell ক্লোজবয় বন্ধ করা লং পজিশন বিক্রি করা

প্যারামিটারDirectionচারটি প্যারামিটার নিতে পারে, যার মধ্যেbuy, closebuy, sellএবংclosesell.

function main(){
    // Make an example for setting OKX futures weekly contract
    exchange.SetContractType("this_week")    
    // Set 5 times of leverage
    exchange.SetMarginLevel(5)
    // Set the order placing type into placing long order
    exchange.SetDirection("buy")
    // Place an order with the contract quantity of 2, at the price of 10,000
    exchange.Buy(10000, 2)              
    exchange.SetMarginLevel(5)
    exchange.SetDirection("closebuy")
    exchange.Sell(1000, 2)
}
def main():
    exchange.SetContractType("this_week")
    exchange.SetMarginLevel(5)
    exchange.SetDirection("buy")
    exchange.Buy(10000, 2)
    exchange.SetMarginLevel(5)
    exchange.SetDirection("closebuy")
    exchange.Sell(1000, 2)
void main() {
    exchange.SetContractType("this_week");
    exchange.SetMarginLevel(5);
    exchange.SetDirection("buy");
    exchange.Buy(10000, 2);
    exchange.SetMarginLevel(5);
    exchange.SetDirection("closebuy");
    exchange.Sell(1000, 2);
}

exchange.SetContractType ((...)

exchange.SetContractType(ContractType)চুক্তির ধরন সেট করুন। প্যারামিটার মানঃ স্ট্রিং টাইপ। ক্রিপ্টোকারেন্সি কৌশলগুলিতে, উদাহরণস্বরূপ BTC_USDT নিন।exchange.SetCurrency("BTC_USDT")অথবাexchange.IO("currency", "BTC_USDT"), আপনি ব্যবহার করতে হবেexchange.SetContractTypeনতুন ট্রেডিং জোড়ার অধীনে পরিচালিত করা প্রয়োজন যে বর্তমান চুক্তি নির্ধারণ করার জন্য চুক্তি পুনরায় সেট করার ফাংশন।currency-based contractঅথবাU-based contractউপর ভিত্তিট্রেডিং জুটিউদাহরণস্বরূপ, যখন ট্রেডিং জোড়া সেট করা হয়BTC_ USDT, ব্যবহার ফাংশনexchange.SetContractTypeচুক্তির কোড সেট করতেswap, যা বিটিসির ইউএসডিটি-ভিত্তিক চিরস্থায়ী চুক্তি হিসাবে সেট করা হয়।BTC_ USD, ব্যবহার ফাংশনexchange.SetContractTypeচুক্তির কোড সেট করতেswap, যা বিটিসির মুদ্রাভিত্তিক চিরস্থায়ী চুক্তি হিসাবে সেট করা হয়েছে।

অন্যথায় নির্দিষ্ট না করা হলে,বিতরণ চুক্তিএকটি ক্রিপ্টোকারেন্সি ফিউচার চুক্তির কোড সাধারণত নিম্নলিখিত বিষয়গুলি অন্তর্ভুক্ত করেঃ

  • this_week: সাপ্তাহিক চুক্তি
  • next_week: পরের সপ্তাহের চুক্তি
  • quarter: ত্রৈমাসিক চুক্তি
  • next_quarter: পরবর্তী ত্রৈমাসিক চুক্তি

অন্যথায় নির্দিষ্ট না করা হলে,স্থায়ী চুক্তিএকটি ক্রিপ্টোকারেন্সি ফিউচার চুক্তির কোড সাধারণত নিম্নলিখিত বিষয়গুলি অন্তর্ভুক্ত করেঃ

  • swap: স্থায়ী চুক্তি

বর্তমান চুক্তিকে সাপ্তাহিক চুক্তিতে সেট করুনঃ

function main() {
    // Set to weekly contract
    exchange.SetContractType("this_week") 
}
def main():
    exchange.SetContractType("this_week")
void main() {
    exchange.SetContractType("this_week");
}

প্রতিটি সমর্থিত ক্রিপ্টোকারেন্সি এক্সচেঞ্জের চুক্তির নামকরণের বিস্তারিত বিবরণ নিম্নরূপ দেখানো হয়েছেঃ

  • ঠিক আছে চিরস্থায়ী চুক্তিতে সেট করুনঃexchange.SetContractType("swap")এই সপ্তাহের চুক্তিতে সেটঃexchange.SetContractType("this_week")পরের সপ্তাহের চুক্তিতে সেটঃexchange.SetContractType("next_week")ত্রৈমাসিক চুক্তিতে সেট করুনঃexchange.SetContractType("quarter")পরবর্তী ত্রৈমাসিকের চুক্তিতে নির্ধারিতঃexchange.SetContractType("next_quarter")OKX USDT-মার্জিনযুক্ত চুক্তিটি বর্তমান চুক্তির সাথে সামঞ্জস্যপূর্ণ USDT নিষ্পত্তি ব্যবহার করে চুক্তিতে স্যুইচ করা যেতে পারেtrading pair(অথবা বিনিময় বস্তু যোগ করার সময় এটি সরাসরি সেট করুন) উদাহরণস্বরূপঃ

    function main() {
        // The default trading pair is BTC_USD, the contract is set to the weekly contract, and the contract is the crypto-margined contract
        exchange.SetContractType("this_week")
        Log("ticker:", exchange.GetTicker())
        
        // Switch trading pairs, and then set a contract to a USDT-margined contract, which is different from the crypto-margined contract
        exchange.IO("currency", "BTC_USDT")   
        exchange.SetContractType("swap")
        Log("ticker:", exchange.GetTicker())
    }
    
    def main():
        exchange.SetContractType("this_week")
        Log("ticker:", exchange.GetTicker())
        exchange.IO("currency", "BTC_USDT")
        exchange.SetContractType("swap")
        Log("ticker:", exchange.GetTicker())
    
    void main() {
        exchange.SetContractType("this_week");
        Log("ticker:", exchange.GetTicker());
        exchange.IO("currency", "BTC_USDT");
        exchange.SetContractType("swap");
        Log("ticker:", exchange.GetTicker());
    }
    
  • ফিউচার_হুওবিডিএম এই সপ্তাহের চুক্তিতে সেটঃexchange.SetContractType("this_week")পরের সপ্তাহের চুক্তিতে সেটঃexchange.SetContractType("next_week")ত্রৈমাসিক চুক্তিতে সেট করুনঃexchange.SetContractType("quarter")পরবর্তী ত্রৈমাসিকের চুক্তিতে নির্ধারিতঃexchange.SetContractType("next_quarter")চিরস্থায়ী চুক্তিতে সেট করুনঃexchange.SetContractType("swap")

    প্ল্যাটফর্মটি ইউএসডিটি-মার্জিনযুক্ত চুক্তি সমর্থন করে। উদাহরণস্বরূপ বিটিসি চুক্তি নিন। আপনি কেবলমাত্র ইউএসডিটি-মার্জিনযুক্ত চুক্তিতে স্যুইচ করতে পারেনexchange.SetCurrency("BTC_USDT"), অথবা বর্তমান ট্রেডিং জুটিকেBTC_USDTসরাসরি যখন আপনি বট পরামিতি কনফিগার এবং বিনিময় বস্তু যোগ করুন. ট্রেডিং জোড়া স্যুইচ করার পরে, আপনি কল করতে হবেexchange.SetContractTypeচুক্তি সেট করতে আবার ফাংশন।

  • ফিউচার_বিটমেক্স চিরস্থায়ী চুক্তিতে সেট করুনঃexchange.SetContractType("XBTUSD"), exchange.SetContractType("APTUSDT"). চুক্তিটি একটি নির্দিষ্ট সময়ে নিষ্পত্তি করা হয়, এবং আরও বিস্তারিত জানার জন্য প্রতিটি চুক্তির কোড পরীক্ষা করতে বিটমেক্সের অফিসিয়াল ওয়েবসাইটে লগ ইন করুন। উদাহরণস্বরূপঃexchange.SetContractType("XBTM19").

  • ফিউচার_গেটআইও এই সপ্তাহের চুক্তিতে সেটঃexchange.SetContractType("this_week"). পরের সপ্তাহের চুক্তিতে সেটঃexchange.SetContractType("next_week"). ত্রৈমাসিক চুক্তিতে সেট করুনঃexchange.SetContractType("quarter"). পরবর্তী ত্রৈমাসিকের চুক্তিতে নির্ধারিতঃexchange.SetContractType("next_quarter"). চিরস্থায়ী চুক্তিতে সেট করুনঃexchange.SetContractType("swap"). এক্সচেঞ্জটি ইউএসডিটি-মার্জিনযুক্ত চুক্তি সমর্থন করে। উদাহরণস্বরূপ বিটিসি চুক্তি নিন। আপনি কেবলমাত্র ইউএসডিটি-মার্জিনযুক্ত চুক্তিতে স্যুইচ করতে পারেনexchange.SetCurrency("BTC_USDT"), অথবা বর্তমান ট্রেডিং জুটিকেBTC_USDTসরাসরি যখন আপনি লাইভ ট্রেডিং পরামিতি কনফিগার এবং বিনিময় বস্তু যোগ করুন. ট্রেডিং জোড়া স্যুইচ করার পরে, আপনি কল করতে হবেexchange.SetContractTypeচুক্তি সেট করতে আবার ফাংশন।

  • ফিউচার_ডেরিবিট চিরস্থায়ী চুক্তিতে সেট করুনঃexchange.SetContractType("BTC-PERPETUAL")ডেরিবিত ইউএসডিসি চুক্তি সমর্থন; কলexchange.SetContractType("ADA_USDC-PERPETUAL")এডিএ ইউএসডিসি-মার্জিনযুক্ত চিরস্থায়ী চুক্তি নির্ধারণ করা। চুক্তিটি একটি নির্দিষ্ট সময়ে নিষ্পত্তি করা হয়, এবং আরও বিস্তারিত জানার জন্য প্রতিটি চুক্তির কোড পরীক্ষা করতে ডেরিবিতের অফিসিয়াল ওয়েবসাইটে লগ ইন করুন, যেমনঃexchange.SetContractType("BTC-27APR18").

  • ফিউচার_কুকয়েন

    • 'ক্রিপ্টো-মার্জিনযুক্ত চুক্তি' উদাহরণস্বরূপ, ট্রেডিং জোড়া সেট করুনBTC_USD, এবং তারপর চুক্তি কোড সেট করুন, যা ক্রিপ্টো-মার্জিন চুক্তি বলা হয়। চিরস্থায়ী চুক্তিতে সেট করুনঃexchange.SetContractType("swap")ত্রৈমাসিক চুক্তিতে সেট করুনঃexchange.SetContractType("quarter")পরবর্তী ত্রৈমাসিকের চুক্তিতে নির্ধারিতঃexchange.SetContractType("next_quarter")
    • ইউএসডিটি-মার্জিনযুক্ত চুক্তিঃ উদাহরণস্বরূপ, ট্রেডিং জোড়া সেট করুনBTC_USDT, এবং তারপর চুক্তি কোড সেট করুন, যা ইউএসডিটি-মার্জিনযুক্ত চুক্তি। চিরস্থায়ী চুক্তিতে সেট করুনঃexchange.SetContractType("swap").
  • ফিউচার_বাইনান্স বিন্যান্স ফিউচার ডিফল্টরূপে কোন কনট্রাক্ট স্ট্যাটাস সেট করে না, তাই আপনাকে প্রথমে কনট্রাক্ট সেট করতে হবে। চিরস্থায়ী চুক্তিতে সেট করুনঃexchange.SetContractType("swap")Binance ফিউচারস চিরস্থায়ী চুক্তি USDT-মার্জিনযুক্ত চুক্তি হতে পারে। উদাহরণস্বরূপ,BTCইউএসডিটি-মার্জিনযুক্ত চুক্তি, ট্রেডিং জোড়া সেট করা হয়BTC_USDT. বিন্যান্স ফিউচারস চিরস্থায়ী চুক্তিতে ক্রিপ্টো-মার্জিনযুক্ত চুক্তিও অন্তর্ভুক্ত রয়েছে। উদাহরণস্বরূপ, ক্রিপ্টো-মার্জিনযুক্ত চুক্তিতে, ট্রেডিং জোড়াটি সেট করুনBTC_USD.

    ত্রৈমাসিক চুক্তিতে সেট করুনঃexchange.SetContractType("quarter")ডেলিভারি চুক্তিতে ক্রিপ্টো-মার্জিনযুক্ত চুক্তি অন্তর্ভুক্ত রয়েছে (যেমন ব্যবহৃত মুদ্রাকে মার্জিন হিসাবে নেওয়া) । উদাহরণস্বরূপ,BTC, ট্রেডিং জুটি সেট করা আছেBTC_USD, এবং তারপর চুক্তি কোড সেটexchange.SetContractType("quarter"), যা বিটিসি ক্রিপ্টো-মার্জিনযুক্ত ত্রৈমাসিক চুক্তি নির্ধারণ করছে।

    পরবর্তী ত্রৈমাসিকের চুক্তিতে নির্ধারিতঃexchange.SetContractType("next_quarter")উদাহরণস্বরূপ, ত্রৈমাসিক ক্রিপ্টো-মার্জিন চুক্তিতেBTC, ট্রেডিং জুটি সেট করা আছেBTC_USD, এবং তারপর চুক্তি কোড সেটexchange.SetContractType("next_quarter). বিয়ানান্স ইউএসডিটি-মার্জিনযুক্ত ডেলিভারি চুক্তির অংশকে সমর্থন করে, যেমন বিটিসি ট্রেডিং জোড়াকেBTC_USDT, এবং তারপর চুক্তি কোড সেট করুন.

  • ফিউচার_বিবক্স বিবক্স চিরস্থায়ী চুক্তির কোডঃswap. চিরস্থায়ী চুক্তিতে সেট করুনঃexchange.SetContractType("swap").

  • ফিউচার_এওফেক্স AOFEX চিরস্থায়ী চুক্তির কোডঃswap. চিরস্থায়ী চুক্তিতে সেট করুনঃexchange.SetContractType("swap").

  • ফিউচার_BFX BFX চিরস্থায়ী চুক্তির কোডঃswap. চিরস্থায়ী চুক্তিতে সেট করুনঃexchange.SetContractType("swap").

  • ফিউচার_বিবিট বাইবিট বর্তমান ট্রেডিং জোড়ার চিরস্থায়ী চুক্তির জন্য ডিফল্ট। চুক্তি কোডঃswap. ত্রৈমাসিক চুক্তির কোডঃquarter. পরবর্তী ত্রৈমাসিকের চুক্তির কোডঃnext_quarter.

  • ফিউচার_ক্রাকেন ক্র্যাকেন ডিফল্টরূপে কোন চুক্তির অবস্থা সেট করে না, তাই আপনাকে চুক্তির কোড সেট করতে হবে। চুক্তির কোডঃswap: চিরস্থায়ী চুক্তি।month: মাসিক চুক্তি।quarter: ত্রৈমাসিক চুক্তি।next_quarter: পরের ত্রৈমাসিকের চুক্তি।

  • ফিউচারস_বিটফাইনেক্স বিটফিনেক্স বর্তমান ট্রেডিং জোড়ার চিরস্থায়ী চুক্তির জন্য ডিফল্ট। চুক্তি কোডঃswap.

  • ফিউচার_বিটজেট বিটগেট বর্তমান ট্রেডিং জোড়ার চিরস্থায়ী চুক্তিতে ডিফল্ট। চুক্তি কোডঃswap. ট্রেডিং জোড়া সেট করা আছেBTC_USD, ক্রিপ্টো-মার্জিনযুক্ত চুক্তি নির্দেশ করে; ট্রেডিং জোড়াটিBTC_USDT, যা USDT-মার্জিনযুক্ত চুক্তি নির্দেশ করে। সিমুলেটেড চুক্তিগুলি ট্রেডিং জোড়াগুলিতে সেট করতে পারেঃSBTC_USDএবংBTC_SUSDT.

  • ফিউচার_ডিওয়াইডিএক্স dYdX চিরস্থায়ী চুক্তির চুক্তি কোডঃswap. চিরস্থায়ী চুক্তিতে সেট করুনঃexchange.SetContractType("swap"). ডিওয়াইডিএক্সের শুধুমাত্র ইউএসডিটি মার্জিনযুক্ত চুক্তি রয়েছে।

  • ফিউচার_MEXC মেক্সিকোর চিরস্থায়ী চুক্তির চুক্তির কোডঃswap. চিরস্থায়ী চুক্তিতে সেট করুনঃexchange.SetContractType("swap"). ট্রেডিং জোড়া সেট করা আছেBTC_USD, ক্রিপ্টো-মার্জিনযুক্ত চুক্তি নির্দেশ করে; ট্রেডিং জোড়াটিBTC_USDT, USDT-মার্জিনযুক্ত চুক্তি নির্দেশ করে।

ক্রিপ্টোকারেন্সি কৌশল লেখার সময়, কলexchange.SetContractType(ContractType)ফাংশন এবং চুক্তি প্যারামিটার দ্বারা সেট বিস্তারিত চুক্তি তথ্যContractTypeফেরত দেওয়া হবে।

উদাহরণস্বরূপ, এক্সচেঞ্জ অবজেক্ট হিসাবে সেট করা OKX চুক্তির কৌশল কোড চালানোঃ

function main(){
    // Set to weekly contract
    var ret = exchange.SetContractType("this_week")     
    // Return the information of the weekly contract
    Log(ret)
}
def main():
    ret = exchange.SetContractType("this_week")
    Log(ret)
void main() {
    auto ret = exchange.SetContractType("this_week");
    Log(ret);
}

কৌশল চালানJavaScriptভাষা, এবং মুদ্রণretতথ্য, যথা বিস্তারিত তথ্যthis_weekচুক্তিঃ

{
    "instrument":"BTC-USD-191101",
    "InstrumentID":"BTC-USD-191101"
}   

exchange.GetContractType (()

exchange.GetContractType()এক্সচেঞ্জ অবজেক্টের বর্তমানে সেট করা চুক্তি কোড প্রদান করে (exchange), রিটার্ন ভ্যালুঃ স্ট্রিং।

function main () {
    Log(exchange.SetContractType("this_week")) 
    Log(exchange.GetContractType())
}
def main():
    Log(exchange.SetContractType("this_week"))
    Log(exchange.GetContractType())
void main() {
    Log(exchange.SetContractType("this_week"));
    Log(exchange.GetContractType());
}

Futures_OP ত্রুটি

নিম্নলিখিত টেবিলটি ক্রিপ্টোকারেন্সি ফিউচার চুক্তির বিনিময় বস্তুর সাথে সম্পর্কিত ত্রুটি তথ্য বর্ণনা করেঃ

মূল্য ফাংশন প্রদর্শন ত্রুটি ট্রিগার ফাংশন বর্ণনা
0 ফিউচার_ওপি ০ exchange.SetMarginLevel লিভারেজ ফাংশন কল করার ত্রুটি
1 ফিউচার_ওপি ১ exchange.SetDirection ফিউচার ট্রেডিং দিক ফাংশন সেট করার ত্রুটি
2 ফিউচার_ওপি ২ exchange.SetContractType চুক্তি ফাংশন সেট করার ত্রুটি
3 ফিউচার_ওপি ৩ exchange.GetPosition অবস্থান ফাংশন পাওয়ার ত্রুটি
4 ফিউচার_ওপি ৪ exchange.IO আইও ফাংশন কল করার ত্রুটি

অপশন ট্রেডিং

ক্রিপ্টোকারেন্সি অপশন

ব্যবহারexchange.SetContractTypeবিভিন্ন এক্সচেঞ্জের বিভিন্ন অপশন চুক্তি কোড রয়েছে।

এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্ম দ্বারা সমর্থিত ক্রিপ্টোকারেন্সি অপশন এক্সচেঞ্জ

  • ডেরিবিত ডেরিবিত এক্সচেঞ্জের জন্য, কেবলমাত্রexchange.SetContractTypeএকটি বিকল্প চুক্তি হিসাবে চুক্তি সেট করার জন্য ফাংশন। বিকল্প চুক্তি সেট আপ করার পরে, যখন বাজারের ইন্টারফেস যেমন কলGetTicker, অপশন চুক্তির সমস্ত বাজার তথ্য পাওয়া যায়।exchange.Sellএবংexchange.Buyএকটি অর্ডার স্থাপন করার জন্য ফাংশন, এবং একটি অর্ডার স্থাপন করার সময় ট্রেডিং দিক মনোযোগ দিতে, এবং দ্বারা ট্রেডিং দিক সেটexchange.SetDirection.exchange.Cancelএকটি অর্ডার বাতিল করার জন্য ফাংশন;exchange.GetPositionঅবস্থান অনুসন্ধান করার ফাংশন।

    রেফারেন্সের জন্য কৌশল কোডঃডেরিবিট অপশনের পরীক্ষার কৌশল

  • ঠিক আছে চুক্তি স্থাপন, অর্ডার দেওয়া, অর্ডার বাতিল করা, অর্ডার অনুসন্ধান করা, বাজার কোট পাওয়া ইত্যাদি একই অপারেশনDeribit, এবং চুক্তির কোড ফরম্যাট হলBTC-USD-200626-4500-C. আপনি ইন্টারফেসের মাধ্যমে চুক্তি সম্পর্কিত তথ্য অনুসন্ধান করতে পারেনhttps://www.okx.com/api/v5/public/instruments.

    উদাহরণস্বরূপ, বিটিসি অপশন চুক্তির তথ্য অনুসন্ধান করতেঃ

    function main() {
        Log(HttpQuery("https://www.okx.com/api/v5/public/instruments?instType=OPTION&uly=BTC-USD"))
    }
    
    import json
    import urllib.request
    def main():
        ret = json.loads(urllib.request.urlopen("https://www.okx.com/api/v5/public/instruments?instType=OPTION&uly=BTC-USD").read().decode('utf-8'))
        Log(ret)
    
    void main() {
        Log(HttpQuery("https://www.okx.com/api/v5/public/instruments?instType=OPTION&uly=BTC-USD"));
    }
    
  • ফিউচার_হুওবিডিএম উদাহরণস্বরূপ, Huobi বিকল্প চুক্তি কোডঃBTC-USDT-201225-P-13000; চুক্তি একটিBTCচুক্তি; অনুশীলনের তারিখ 25 ডিসেম্বর, 2020; বিকল্পগুলি হল Put Options (PUT); স্ট্রাইক মূল্য $ 13,000. ক্রেতার দ্বারা প্রদত্ত প্রিমিয়াম হল USDT, যার মানে অ্যাকাউন্টের সম্পদগুলিতে ব্যবহৃত USDT; বিক্রেতার মার্জিন হল মুদ্রা, যা সম্পদগুলির মুদ্রার দ্বারা গ্যারান্টিযুক্ত। বিক্রয় বিকল্পগুলির জন্য, ক্রেতা দ্বারা প্রদত্ত প্রিমিয়ামটি ইউএসডিটি, যা অ্যাকাউন্টের সম্পদগুলিতে ইউএসডিটি ব্যবহার করা হয় তা নির্দেশ করে; বিক্রেতার মার্জিনটি ইউএসডিটি, যা সম্পদগুলিতে ইউএসডিটি দ্বারা গ্যারান্টিযুক্ত।

  • ফিউচার_বিবিট এটি বাইবিট এক্সচেঞ্জের ইউএসডিসি বিকল্পকে সমর্থন করে এবং ট্রেডিং জোড়াটিকেETH_USDC, কল ফাংশনexchange.SetContractTypeবিকল্প চুক্তির কোডের উদাহরণঃETH-25NOV22-1375-P.

নেটওয়ার্ক সেটিংস

exchange.SetBase ((Base))

দ্যexchange.SetBase(Base)ফাংশনটি এক্সচেঞ্জ অবজেক্টে রেকর্ড করা এপিআই বেস ঠিকানাটি স্যুইচ করতে ব্যবহৃত হয়; উদাহরণস্বরূপ,OKXডোমেইন নামhttps://aws.okx.com, এর সাথে সামঞ্জস্যপূর্ণexchange.IO("base","https://aws.okx.com")সুইচিং পদ্ধতি। ব্যাকটেস্ট সিস্টেম এক্সচেঞ্জের এপিআই বেস ঠিকানা সুইচিং সমর্থন করে না (ব্যাকটেস্ট সিস্টেম একটি স্যান্ডবক্স পরিবেশ, এক্সচেঞ্জ অ্যাক্সেস করার জন্য একটি বাস্তব ইন্টারফেস নয়) ।

function main() {
    // Use the default base address
    Log(exchange.GetTicker())
    // Switch to https://aws.okx.com
    exchange.SetBase("https://aws.okx.com")
    Log(exchange.GetTicker())
}
def main():
    Log(exchange.GetTicker())
    exchange.SetBase("https://aws.okx.com")
    Log(exchange.GetTicker())
void main() {
    Log(exchange.GetTicker());
    exchange.SetBase("https://aws.okx.com");
    Log(exchange.GetTicker());
}

exchange.SetProxy ((...)

exchange.SetProxy(...)এক্সচেঞ্জ অ্যাক্সেস করতে প্রক্সি সার্ভারে স্যুইচ করে। এই ফাংশন কোন রিটার্ন মান আছে (ভেরিয়েবল দ্বারা প্রাপ্ত, এবং আপনি কি পেতে হয়undefined) যদি প্রক্সি সেটিং ব্যর্থ হয়, একটি শূন্য মান ফেরত দেওয়া হবে যখন ইন্টারফেস কল করা হয়, শুধুমাত্রবিশ্রামপ্রতিটি এক্সচেঞ্জ বস্তুexchanges[n]প্রক্সি সেট আপ করার পর, এক্সচেঞ্জ ইন্টারফেস প্রক্সি মাধ্যমে অ্যাক্সেস করা হবে.

প্রথম যোগ করা বিনিময় বস্তু নিনexchangeবিশেষ করে:exchanges[0]উদাহরণস্বরূপঃ

  • ব্যবহারকারীর নাম এবং পাসওয়ার্ড ছাড়াই প্রক্সি সেট করুনঃexchange.SetProxy("socks5://127.0.0.1:8889")
  • প্রক্সি সেট করুন, এবং ব্যবহারকারীর নাম এবং পাসওয়ার্ড লিখুনঃexchange.SetProxy("socks5://username:password@127.0.0.1:8889") (usernameব্যবহারকারীর নাম,passwordপাসওয়ার্ড)
  • প্রক্সি ছাড়াই স্বাভাবিক মোডে স্যুইচ করুন:exchange.SetProxy("")

এক্সচেঞ্জ অবজেক্ট দ্বারা অনুরোধ করা আইপি ঠিকানা সেট করার জন্য সমর্থন।

  • গ্লোবাল স্পেসিফিকেশন ডকারwindowsসিস্টেম ইন্টারফেস সংস্করণ সরাসরি সেট করতে পারেন, যা নিম্নলিখিত চিত্র হিসাবে দেখানো হয়ঃ

img

কমান্ড প্রম্পট ব্যবহারের পরামিতি দ্বারা পরিচালিত অন্যান্য ডকার-Iআইপি ঠিকানা নির্দিষ্ট করতেঃ

img

  • এক্সচেঞ্জের উপর ভিত্তি করেঃ

    function main(){
        exchange.SetProxy("ip://10.0.3.15")
        exchange.GetTicker()                      // The reque

আরো