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

এফএমজেড কোয়ান্ট এপিআই আপগ্রেডের বিস্তারিত ব্যাখ্যাঃ কৌশল নকশা অভিজ্ঞতা উন্নত করা

লেখক:এফএমজেড-লিডিয়া, তৈরিঃ ২০২৪-০৭-০৫ ০৯ঃ৪৪ঃ০৮, আপডেটঃ ২০২৪-০৯-২০ ০৮ঃ৫২ঃ৩০

[TOC]

img

প্রিফেস

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

কৌশল নকশা আরও সুবিধাজনক, ট্রেডিং লজিক আরও পরিষ্কার এবং নতুনদের জন্য শুরু করা সহজ করার জন্য, প্ল্যাটফর্মটি কৌশল দ্বারা ব্যবহৃত এপিআই ইন্টারফেস আপগ্রেড করেছে। সর্বশেষতম সংস্করণ ব্যবহার করে ডকাররা এই নতুন বৈশিষ্ট্যগুলি সক্ষম করতে পারে। প্ল্যাটফর্মটি এখনও পুরানো ইন্টারফেস কলগুলির সাথে সর্বাধিক পরিমাণে সামঞ্জস্যপূর্ণ। এপিআই ইন্টারফেসটির নতুন বৈশিষ্ট্যগুলির তথ্য এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্মের এপিআই ডকুমেন্টেশনে আপডেট করা হয়েছেঃ

সিনট্যাক্স গাইডঃhttps://www.fmz.com/syntax-guideব্যবহারকারী নির্দেশিকাঃhttps://www.fmz.com/user-guide

সুতরাং আসুন দ্রুত দেখে নেওয়া যাক কোন ইন্টারফেসগুলি আপগ্রেড করা হয়েছে এবং বর্তমান এপিআইয়ের সাথে সামঞ্জস্যপূর্ণ করার জন্য পুরানো কৌশলগুলি ব্যবহার করার জন্য কী পরিবর্তন প্রয়োজন।

১. নতুন এপিআই ইন্টারফেস

এক্সচেঞ্জ যোগ করা হয়েছে.GetTickers ফাংশন

মাল্টি-পণ্য কৌশল এবং সম্পূর্ণ বাজার পর্যবেক্ষণ কৌশল ডিজাইন করার জন্য, সমষ্টিগত বাজার ইন্টারফেস অপরিহার্য। কৌশলটি বিকাশ করা সহজ করতে এবং ইভেন্টগুলি পুনরায় আবিষ্কার করা এড়াতে, এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্ম এই ধরণের এক্সচেঞ্জ এপিআইকে ক্যাপসুল করে।

যদি এক্সচেঞ্জের এই ইন্টারফেস না থাকে (ব্যক্তিগত এক্সচেঞ্জ), কল করার সময়exchange.GetTickers(), একটি ত্রুটি বার্তা প্রদর্শিত হয়ঃ সমর্থিত নয়।

এই ফাংশনের কোন পরামিতি নেই এবং এটি এক্সচেঞ্জের সমষ্টিগত বাজার ইন্টারফেসে সমস্ত জাতের রিয়েল-টাইম বাজার ডেটা ফেরত দেবে। এটি সহজভাবে বোঝা যায়ঃ

exchange.GetTickers()ফাংশন সম্পূর্ণ বৈশিষ্ট্যযুক্ত অনুরোধ সংস্করণexchange.GetTicker()ফাংশন (সাবধানে দেখুন, এই দুটি ফাংশন নামের মধ্যে পার্থক্য শুধুমাত্র একবচন এবং বহুবচন) ।

আমরা পরীক্ষার জন্য OKX স্পট সিমুলেশন পরিবেশ ব্যবহার করিঃ

function main() {
    exchange.IO("simulate", true)

    var tickers = exchange.GetTickers()
    if (!tickers) {
        throw "tickers error"
    }

    var tbl = {type: "table", title: "test tickers", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
    for (var i in tickers) {
        var ticker = tickers[i]
        tbl.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
    }

    LogStatus("`" + JSON.stringify(tbl) +  "`")
    return tickers.length
}

img

এক্সচেঞ্জ যোগ করা হয়েছে.CreateOrder ফাংশন

নতুন যোগ করাexchange.CreateOrder()ফাংশন এই আপগ্রেড ফোকাস।exchange.CreateOrder()অর্ডার টাইপ এবং দিক ফাংশন পরামিতি সরাসরি নির্দিষ্ট করা হয়. এই ভাবে, এটি বর্তমান ট্রেডিং জোড়া, চুক্তি কোড, ট্রেডিং দিক এবং সিস্টেমের অন্যান্য সেটিংস উপর নির্ভর করে না।

মাল্টি-প্রজাতির ট্রেডিং অর্ডার প্লেসমেন্টের দৃশ্যকল্প এবং সমান্তরাল দৃশ্যকল্পে, নকশা জটিলতা ব্যাপকভাবে হ্রাস পায়।exchange.CreateOrder()ফাংশন হলsymbol, side, price, amount.

OKX ফিউচার সিমুলেশন পরিবেশ ব্যবহার করে পরীক্ষাঃ

function main() {
    exchange.IO("simulate", true)

    var id1 = exchange.CreateOrder("ETH_USDT.swap", "buy", 3300, 1)
    var id2 = exchange.CreateOrder("BTC_USDC.swap", "closebuy", 70000, 1)
    var id3 = exchange.CreateOrder("LTC_USDT.swap", "sell", 110, 1)

    Log("id1:", id1, ", id2:", id2, ", id3:", id3)
}

img

এই ভাবে, মাত্র তিনজনexchange.CreateOrder()ফাংশন কলগুলি বিভিন্ন জাতের এবং দিকের তিনটি ফিউচার অর্ডার স্থাপন করতে ব্যবহৃত হয়েছিল।

এক্সচেঞ্জ.GetHistoryOrders ফাংশন যোগ করা হয়েছে

নতুন যোগ করাexchange.GetHistoryOrders()ফাংশন একটি নির্দিষ্ট বৈচিত্র্যের ঐতিহাসিক লেনদেন আদেশ পেতে ব্যবহৃত হয়। ফাংশন এছাড়াও বিনিময় ইন্টারফেসের সমর্থন প্রয়োজন।

ঐতিহাসিক অর্ডার অনুসন্ধানের জন্য, বিভিন্ন এক্সচেঞ্জ দ্বারা বাস্তবায়িত ইন্টারফেসগুলি ব্যাপকভাবে পরিবর্তিত হয়ঃ

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

বিস্তারিত ফাংশন বিবরণ এখানে পুনরাবৃত্তি করা হয় না, আপনি এপিআই ডকুমেন্টেশনে সিনট্যাক্স ম্যানুয়াল পড়ুন পারেনঃ

https://www.fmz.com/syntax-guide#fun_exchange.gethistoryorders

বিন্যান্স স্পট ট্রেডিং পরিবেশ ব্যবহার করে পরীক্ষা করা হয়েছেঃ

function main() {
    var orders = exchange.GetHistoryOrders("ETH_USDT")

    // Write to chart
    var tbl = {type: "table", title: "test GetHistoryOrders", cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}
    for (var order of orders) {
        tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
    }
    
    LogStatus("orders.length:", orders.length, "\n", "`" + JSON.stringify(tbl) +  "`")
}

img

এক্সচেঞ্জ যোগ করা হয়েছে.GetPositions ফাংশন

অবস্থান তথ্য সংগ্রহ ফাংশনের পুরানো সংস্করণ হলexchange.GetPosition(). এই আপগ্রেডটি ফাংশন নামকরণের অর্থনীতির সাথে আরও ভালভাবে মেলে এমন একটি নতুন অবস্থান অধিগ্রহণ ফাংশন যোগ করেঃexchange.GetPositions(). একই সময়ে, এটি এখনও GetPosition ফাংশনের সাথে সামঞ্জস্যপূর্ণ / আপগ্রেড করা হয়েছে।

মনে রাখবেন যে দুটি ফাংশন নাম শুধুমাত্র শেষ s দ্বারা পৃথক। কারণ GetPositions আরো অর্থগতভাবে সঠিক, এটি ভবিষ্যতে GetPositions ব্যবহার করার পরামর্শ দেওয়া হয়।

দ্যexchange.GetPositions()ফাংশনের তিনটি কলিং ফর্ম রয়েছেঃ

  • বিনিময়.GetPositions ((() যখন কোন পরামিতি পাস করা হয় না, বর্তমান মাত্রা সব জাতের অবস্থান তথ্য বর্তমান ডিভাইসের সেটিংস অনুযায়ী অনুরোধ করা হয়ট্রেডিং জুটি / চুক্তির কোড.

  • exchange.GetPositions ((ETH_USDT.swap) নির্দিষ্ট পণ্যের তথ্য নির্দিষ্ট করার সময় (ETH_USDT.swap এর বিন্যাসটি FMZ প্ল্যাটফর্ম দ্বারা সংজ্ঞায়িত করা হয়), নির্দিষ্ট পণ্যের অবস্থান তথ্য অনুরোধ করুন। উদাহরণস্বরূপঃBTC_USD.swap, ETH_USDT.swap, ETH_USDT.quarterইত্যাদি। BTC_USD.swap: BTC এর মুদ্রা ভিত্তিক চিরস্থায়ী চুক্তি। ETH_USDT.swap: ETH এর U-ভিত্তিক চিরস্থায়ী চুক্তি। ETH_USDT.quarter: ETH এর U ভিত্তিক ত্রৈমাসিক বিতরণ চুক্তি। BTC_USD.BTC-USD-201226-24250-C: BTC মুদ্রা ভিত্তিক বিকল্প চুক্তি।

  • exchange.GetPositions ((USDT.swap) নির্দিষ্ট মাত্রা পরিসীমা অনুযায়ী সমস্ত পণ্যের জন্য অবস্থান তথ্য অনুরোধ করুন। USDT.swap: U-ভিত্তিক স্থায়ী চুক্তি পরিসীমা। USDT.futures: U ভিত্তিক ডেলিভারি চুক্তির পরিসীমা। USD.swap: মুদ্রা ভিত্তিক স্থায়ী চুক্তি পরিসীমা। USD.futures: মুদ্রা ভিত্তিক বিতরণ চুক্তির পরিসীমা। USDT.option: U-ভিত্তিক বিকল্প চুক্তির পরিসীমা। USD.option: মুদ্রা ভিত্তিক বিকল্প চুক্তির পরিসীমা।

    কিছু বিশেষ বিনিময় চুক্তির মাত্রা বিভাগঃ USDT.futures_combo: Futures_Deribit exchange এর স্প্রেড সংমিশ্রণ চুক্তি। USD.futures_ff: Futures_Kraken exchange এর মিশ্র মার্জিন ডেলিভারি চুক্তি। USD.swap_pf: ফিউচারস_ক্রেকেন এক্সচেঞ্জের মিশ্র মার্জিন চিরস্থায়ী চুক্তি। এক্সচেঞ্জ এপিআই ইন্টারফেস দ্বারা সমর্থিত নয় এমন মাত্রার জন্য, একটি ত্রুটি রিপোর্ট করা হবে এবং কল করার সময় একটি শূন্য মান ফেরত দেওয়া হবে।

OKX ফিউচার সিমুলেশন পরিবেশ ব্যবহার করে পরীক্ষাঃ

function main() {
    exchange.IO("simulate", true)

    exchange.SetCurrency("BTC_USDT")
    exchange.SetContractType("swap")

    var p1 = exchange.GetPositions()
    var p2 = exchange.GetPositions("BTC_USDT.swap")

    var tbls = []
    for (var positions of [p1, p2]) {
        var tbl = {type: "table", title: "test GetPosition/GetPositions", cols: ["Symbol", "Amount", "Price", "FrozenAmount", "Type", "Profit", "Margin", "ContractType", "MarginLevel"], rows: []}
        for (var p of positions) {
            tbl.rows.push([p.Symbol, p.Amount, p.Price, p.FrozenAmount, p.Type, p.Profit, p.Margin, p.ContractType, p.MarginLevel])
        } 
        tbls.push(tbl)
    }

    LogStatus("`" + JSON.stringify(tbls) +  "`")
}

img

যখন প্যারামিটার পাসexchange.GetPositions()ফাংশন হলETH_USDT.swap, ETH এর U-ভিত্তিক চিরস্থায়ী চুক্তির অবস্থান তথ্য পাওয়া যাবে।

যখন প্যারামিটারexchange.GetPositions()এই ফাংশনগুলি পাস করা হয় না, এক্সচেঞ্জে তালিকাভুক্ত সমস্ত ইউ-ভিত্তিক চিরস্থায়ী চুক্তির অবস্থান তথ্য পাওয়া যায় (কারণ বর্তমান ট্রেডিং জোড়াটি BTC_USDT এবং চুক্তিটি স্যুপ, অনুরোধটি বর্তমান ট্রেডিং জোড়া এবং চুক্তির মাত্রার পরিসরের উপর ভিত্তি করে) । এটি কল করার সমতুল্যexchange.GetPositions("USDT.swap")এবং একটি অনুরোধ পরিসীমা নির্দিষ্ট.

2. এপিআই ইন্টারফেস আপগ্রেড

আপডেট এক্সচেঞ্জ.GetTicker ফাংশন

বাজার ফাংশনের প্রধান উন্নতিexchange.GetTicker()এটি বর্তমান ট্রেডিং জোড়া এবং চুক্তি কোড ছাড়াই প্যারামিটার দ্বারা নির্দিষ্ট পণ্য তথ্য অনুযায়ী সরাসরি বাজার তথ্য অনুরোধ করার অনুমতি দেয়। এটি কোড লেখার প্রক্রিয়াকে সহজ করে তোলে। একই সাথে, এটি এখনও প্যারামিটার পাস না করে কল পদ্ধতির সাথে সামঞ্জস্যপূর্ণ এবং পুরানো প্ল্যাটফর্ম কৌশলটির সাথে সর্বাধিক পরিমাণে সামঞ্জস্যপূর্ণ।

প্যারামিটারsymbolএক্সচেঞ্জ অবজেক্টের জন্য স্পট/ফ্যুচার ফরম্যাটের বিভিন্ন ফরম্যাট রয়েছেexchange:

  • স্পট এক্সচেঞ্জ অবজেক্ট ফরম্যাট হচ্ছে:AAA_BBB, এএএ মূল মুদ্রা, অর্থাৎ ট্রেডিং মুদ্রা এবং বিবিবি মূল্য মুদ্রা, অর্থাৎ মূল্য নির্ধারণের মুদ্রার প্রতিনিধিত্ব করে। মুদ্রার নামগুলি সব বড় অক্ষরে লেখা আছে। উদাহরণস্বরূপঃ BTC_USDT স্পট ট্রেডিং জোড়া।
  • ফিউচার এক্সচেঞ্জের উদ্দেশ্য ফরম্যাট হচ্ছে:AAA_BBB.XXX, এএএ বেস মুদ্রা, অর্থাৎ ট্রেডিং মুদ্রা, বিবিবি প্রতিনিধিত্ব করে কোট মুদ্রা, অর্থাৎ মূল্য নির্ধারণের মুদ্রা, এবং XXX প্রতিনিধিত্ব করে চুক্তি কোড, যেমন চিরস্থায়ী চুক্তি বিনিময়। মুদ্রার নামগুলি সব বড় অক্ষরে এবং চুক্তি কোডগুলি ছোট অক্ষরে রয়েছে। উদাহরণস্বরূপঃ BTC_USDT.swap, BTC এর U ভিত্তিক চিরস্থায়ী চুক্তি। বিন্যান্স ফিউচার লাইভ পরিবেশ ব্যবহার করে পরীক্ষা করা হয়েছেঃ
var symbols = ["BTC_USDT.swap", "BTC_USDT.quarter", "BTC_USD.swap", "BTC_USD.next_quarter", "ETH_USDT.swap"]

function main() {
    exchange.SetCurrency("ETH_USD")
    exchange.SetContractType("swap")

    var arr = []
    var t = exchange.GetTicker()
    arr.push(t)

    for (var symbol of symbols) {
        var ticker = exchange.GetTicker(symbol)
        arr.push(ticker)
    }

    var tbl = {type: "table", title: "test GetTicker", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
    for (var ticker of arr) {
        tbl.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
    }

    LogStatus("`" + JSON.stringify(tbl) +  "`")
    return arr
}

img

একটি নির্দিষ্ট প্রতীকের জন্য বাজার তথ্যের একটি ব্যাচ অনুরোধ করা অনেক সহজ হয়ে উঠেছে।

আপডেট এক্সচেঞ্জ.GetDepth ফাংশন

GetTicker ফাংশনের অনুরূপ,exchange.GetDepth()ফাংশন একটি প্রতীক প্যারামিটার যোগ করে। এটি আমাদের গভীরতা তথ্য অনুরোধ করার সময় সরাসরি প্রতীক নির্দিষ্ট করতে দেয়।

বিন্যান্স ফিউচার লাইভ পরিবেশ ব্যবহার করে পরীক্ষা করা হয়েছেঃ

function main() {
    exchange.SetCurrency("LTC_USD")
    exchange.SetContractType("swap")

    Log(exchange.GetDepth())
    Log(exchange.GetDepth("ETH_USDT.quarter"))
    Log(exchange.GetDepth("BTC_USD.swap"))
}

img

এক্সচেঞ্জ.গেটট্রেডস ফাংশন আপডেট করুন

GetTicker ফাংশনের অনুরূপ,exchange.GetTrades()এই ফাংশনটি একটি প্রতীক প্যারামিটারও যোগ করে। এটি আমাদের বাজারের লেনদেনের তথ্য অনুরোধ করার সময় সরাসরি প্রতীকটি নির্দিষ্ট করতে দেয়।

বিন্যান্স ফিউচার লাইভ পরিবেশ ব্যবহার করে পরীক্ষা করা হয়েছেঃ

function main() {
    var arr = []
    var arrR = []
    var symbols = ["LTC_USDT.swap", "ETH_USDT.quarter", "BTC_USD.swap"]    

    for (var symbol of symbols) {
        var r = exchange.Go("GetTrades", symbol)
        arrR.push(r)
    }

    for (var r of arrR) {
        arr.push(r.wait())
    }
    
    var tbls = []
    for (var i = 0; i < arr.length; i++) {
        var trades = arr[i]
        var symbol = symbols[i]

        var tbl = {type: "table", title: symbol, cols: ["Time", "Amount", "Price", "Type", "Id"], rows: []}
        for (var trade of trades) {
            tbl.rows.push([trade.Time, trade.Amount, trade.Price, trade.Type, trade.Id])
        }

        tbls.push(tbl)
    }

    LogStatus("`" + JSON.stringify(tbls) +  "`")
}

img

এই আপগ্রেড এছাড়াও চিহ্ন প্যারামিটার দ্বারা নির্দিষ্ট সঙ্গে সামঞ্জস্যপূর্ণexchange.Go()প্ল্যাটফর্ম এপিআই ইন্টারফেস একই সাথে কল করার সময় ফাংশন।

আপডেট এক্সচেঞ্জ.GetRecords ফাংশন

গেট রেকর্ডস ফাংশনটি এই সময় ব্যাপকভাবে সামঞ্জস্য করা হয়েছে। অনুরোধ করা কে-লাইন ডেটার টাইপ তথ্য সরাসরি নির্দিষ্ট করতে প্রতীক পরামিতি সমর্থন করার পাশাপাশি, মূল পিরিয়ড প্যারামিটারটি কে-লাইন সময় নির্দিষ্ট করতে বজায় রাখা হয় এবং অনুরোধ করার সময় প্রত্যাশিত কে-লাইন দৈর্ঘ্য নির্দিষ্ট করতে একটি সীমা প্যারামিটার যুক্ত করা হয়। একই সাথে, এটি গেট রেকর্ডস ফাংশনের পুরানো সংস্করণের সাথেও সামঞ্জস্যপূর্ণ যা কেবলমাত্র পিরিয়ড প্যারামিটারে পাস করে।

কলিং পদ্ধতিexchange.GetRecords()ফাংশন হলঃ

  • এক্সচেঞ্জ.গেট রেকর্ডস ((() যদি কোনও পরামিতি নির্দিষ্ট করা না হয়, তাহলে বর্তমান ট্রেডিং জোড়া/কন্ট্রাক্ট কোডের সাথে সামঞ্জস্যপূর্ণ পণ্যটির K-লাইন ডেটা অনুরোধ করা হয়। K-লাইন সময়কাল হল কৌশল ব্যাকটেস্টিং ইন্টারফেসে বা লাইভ ট্রেডিংয়ে সেট করা ডিফল্ট K-লাইন সময়কাল।
  • exchange.GetRecords ((60 * 15) যখন শুধুমাত্র K-লাইন সময়ের প্যারামিটার নির্দিষ্ট করা হয়, তখন বর্তমান ট্রেডিং জোড়া/চুক্তি কোডের সাথে সামঞ্জস্যপূর্ণ পণ্যের K-লাইন ডেটা অনুরোধ করা হয়।
  • exchange.GetRecords ((BTC_USDT.swap) যখন শুধুমাত্র পণ্য তথ্য নির্দিষ্ট করা হয়, নির্দিষ্ট পণ্যের K- লাইন তথ্য অনুরোধ করা হয়। K- লাইন সময়কাল কৌশল ব্যাকটেস্টিং ইন্টারফেসে বা লাইভ ট্রেডিংয়ে সেট করা ডিফল্ট K- লাইন সময়কাল।
  • exchange.GetRecords ((BTC_USDT.swap, 60 * 60) পণ্যের তথ্য এবং নির্দিষ্ট কে-লাইন সময়সূচী নির্দিষ্ট করুন যাতে কে-লাইন ডেটা অনুরোধ করা যায়।
  • exchange.GetRecords ((BTC_USDT.swap, 60, 1000) পণ্যের তথ্য নির্দিষ্ট করুন, নির্দিষ্ট কে-লাইন সময় নির্দিষ্ট করুন এবং কে-লাইন ডেটা অনুরোধ করার জন্য প্রত্যাশিত কে-লাইন দৈর্ঘ্য নির্দিষ্ট করুন। মনে রাখবেন যে যখন সীমা পরামিতি এক্সচেঞ্জ থেকে একটি একক অনুরোধের সর্বাধিক দৈর্ঘ্য অতিক্রম করে, তখন একটি পেজিং অনুরোধ তৈরি করা হবে (যেমন এক্সচেঞ্জ কে-লাইন ইন্টারফেসে একাধিক কল) ।

বিন্যান্স ফিউচার লাইভ পরিবেশ ব্যবহার করে পরীক্ষা করা হয়েছেঃ

function main() {
    exchange.SetCurrency("ETH_USDT")
    exchange.SetContractType("swap")
    
    var r1 = exchange.GetRecords()
    var r2 = exchange.GetRecords(60 * 60)
    var r3 = exchange.GetRecords("BTC_USDT.swap")
    var r4 = exchange.GetRecords("BTC_USDT.swap", 60)
    var r5 = exchange.GetRecords("LTC_USDT.swap", 60, 3000)

    Log("r1 time difference between adjacent bars:", r1[1].Time - r1[0].Time, "Milliseconds, Bar length:", r1.length)
    Log("r2 time difference between adjacent bars:", r2[1].Time - r2[0].Time, "Milliseconds, Bar length:", r2.length)
    Log("r3 time difference between adjacent bars:", r3[1].Time - r3[0].Time, "Milliseconds, Bar length:", r3.length)
    Log("r4 time difference between adjacent bars:", r4[1].Time - r4[0].Time, "Milliseconds, Bar length:", r4.length)
    Log("r5 time difference between adjacent bars:", r5[1].Time - r5[0].Time, "Milliseconds, Bar length:", r5.length)
}

img

এক্সচেঞ্জ.গেটঅর্ডার ফাংশন আপডেট করুন

GetOrders ফাংশন এছাড়াও যোগ করেsymbolপ্যারামিটার, যা একটি নির্দিষ্ট প্রতীক নির্দিষ্ট করতে এবং সেই প্রতীকের অসম্পূর্ণ আদেশ (অপেন্ডিং অর্ডার) অনুসন্ধান করতে ব্যবহার করা যেতে পারে; এটি নির্দিষ্ট মাত্রা পরিসীমা মধ্যে সমস্ত প্রতীক অসম্পূর্ণ আদেশ (অপেন্ডিং আদেশ) অনুসন্ধান সমর্থন করে।

দ্যexchange.GetOrders()ফাংশন নিম্নলিখিত উপায়ে কল করা যেতে পারেঃ

  • বিনিময়.GetOrders ((() ফিউচার এক্সচেঞ্জের জন্যঃ কোন প্যারামিটার পাস না হলে, বর্তমান মাত্রা পরিসীমা মধ্যে সব ইনস্ট্রুমেন্টের জন্য সমস্ত অসমাপ্ত অর্ডার (অপেন্ডিং অর্ডার) বর্তমান মান অনুযায়ী অনুরোধ করা হয়।ট্রেডিং জুটি / চুক্তির কোডসেটিংস. স্পট এক্সচেঞ্জের জন্যঃ যখন কোনও পরামিতি পাস করা হয় না, তখন সমস্ত স্পট পণ্যগুলির জন্য সমস্ত অসমাপ্ত অর্ডার (অপেন্ডিং অর্ডার) এর জন্য অনুরোধ করা হয়।
  • exchange.GetOrders ((BTC_USDT.swap) অথবা exchange.GetOrders ((BTC_USDT) ফিউচার এক্সচেঞ্জের জন্যঃ exchange.GetOrders ((BTC_USDT.swap), BTC এর USDT-ভিত্তিক চিরস্থায়ী চুক্তির জন্য সমস্ত অসমাপ্ত অর্ডার (অপেন্ডিং অর্ডার) অনুসন্ধান করুন। স্পট এক্সচেঞ্জের জন্যঃ exchange.GetOrders ((BTC_USDT), BTC_USDT স্পট ট্রেডিং জোড়ার জন্য সমস্ত অসমাপ্ত অর্ডার (অপেন্ডিং অর্ডার) অনুসন্ধান করুন।
  • শুধুমাত্র ফিউচার এক্সচেঞ্জের জন্য সমর্থিত exchange.GetOrders ((USDT.swap) সমস্ত জাতের জন্য অসমাপ্ত অর্ডার (অপেন্ডিং অর্ডার) অনুরোধ করার জন্য মাত্রা পরিসীমা নির্দিষ্ট করে মাত্রা পরিসীমা GetPositions ফাংশনে পরিসীমা সঙ্গে সামঞ্জস্যপূর্ণ। উদাহরণস্বরূপঃ exchange.GetOrders ((USDT.swap) ইউ-ভিত্তিক চিরস্থায়ী চুক্তি পরিসরের সমস্ত জাতের সমস্ত অসমাপ্ত আদেশ (অপেন্ডিং অর্ডার) অনুরোধ করে।

OKX ফিউচার সিমুলেশন পরিবেশ ব্যবহার করে পরীক্ষাঃ

function main() {
    exchange.IO("simulate", true)

    exchange.SetCurrency("BTC_USDT")
    exchange.SetContractType("swap")

    // Write to chart
    var tbls = []
    for (var symbol of ["null", "ETH_USDT.swap", "USDT.swap"]) {
        var tbl = {type: "table", title: symbol, cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}

        var orders = null
        if (symbol == "null") {
            orders = exchange.GetOrders()
        } else {
            orders = exchange.GetOrders(symbol)
        }

        for (var order of orders) {
            tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
        }

        tbls.push(tbl)
    }
    
    LogStatus("`" + JSON.stringify(tbls) +  "`")
}

যদি কোন প্যারামিটার পাস না করা হয়, তাহলে বর্তমান ট্রেডিং জোড়ার (BTC_USDT) এবং চুক্তির কোডের (সোয়াপ) মাত্রা পরিসরের সব ধরনের অপূর্ণ অর্ডার (অপেন্ডিং অর্ডার) অনুরোধ করা হয়।

যখন প্যারামিটারETH_USDT.swapযদি ETH এর USDT-ভিত্তিক চিরস্থায়ী কন্ট্রাক্টের অনির্ধারিত অর্ডার (অপেন্ডিং অর্ডার) অনুরোধ করা হয়।

যখন স্ট্রিং"USDT.swap"যদি USDT-ভিত্তিক চিরস্থায়ী চুক্তিগুলি পাস করা হয়, তাহলে সমস্ত USDT-ভিত্তিক চিরস্থায়ী চুক্তিগুলির অসম্পূর্ণ অর্ডার (অপেন্ডিং অর্ডার) অনুরোধ করা হবে।

এক্সচেঞ্জ.গেটপোজিশন ফাংশন আপডেট করুন

এটি এখনও পুরানো অবস্থান অধিগ্রহণ ফাংশন নামকরণের সাথে সামঞ্জস্যপূর্ণ, এবং প্রতীক প্যারামিটারও যুক্ত করে, যা নির্দিষ্ট অনুরোধ করা অবস্থান ডেটার টাইপ তথ্য নির্দিষ্ট করতে পারে। এই ফাংশনের ব্যবহার ঠিক একইexchange.GetPositions().

আপডেটexchange.IOফাংশন

জন্যexchange.IO("api", ...)ফাংশন কল, সমস্ত এক্সচেঞ্জ অবজেক্ট সম্পূর্ণ অনুরোধ ঠিকানা সরাসরি পাস সমর্থন আপগ্রেড করা হয়েছে। উদাহরণস্বরূপ, যদি আপনি OKX ইন্টারফেস কল করতে চানঃ

// GEThttps://www.okx.com/api/v5/account/max-withdrawal ccy: বিটিসি

বেস ঠিকানায় সরাসরি লেখা সমর্থন করেhttps://www.okx.comপ্রথমে বেস ঠিকানা পরিবর্তন না করে এবং তারপর IO ফাংশন কল না করে।

OKX ফিউচার সিমুলেশন পরিবেশ ব্যবহার করে পরীক্ষাঃ

function main() {
    exchange.IO("simulate", true)

    return exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
}

img

৩. এপিআই ইন্টারফেস প্রভাব

এক্সচেঞ্জ.GetOrder ফাংশন প্রভাবিত করে

এই আপগ্রেড প্রধানত প্যারামিটার প্রভাবিত করেidএরexchange.GetOrder(id)id প্যারামিটারটি মূল এক্সচেঞ্জ অর্ডার আইডি থেকে ট্রেডিং প্রোডাক্ট ধারণকারী স্ট্রিং ফরম্যাটে পরিবর্তন করা হয়। এফএমজেড প্ল্যাটফর্মের সমস্ত অর্ডার আইডি এই ফরম্যাটে রয়েছে।

উদাহরণস্বরূপঃ

  • এক্সচেঞ্জ অর্ডারে সংজ্ঞায়িত এক্সচেঞ্জের মূল অর্ডার আইডি হলঃ123456এই আপগ্রেড করার আগে, যদি আপনি GetOrder ফাংশন কল করতে চান, অর্ডার আইডি পাস করা হয়123456.
  • এক্সচেঞ্জ অর্ডারে সংজ্ঞায়িত এক্সচেঞ্জের নামকরণকৃত পণ্যের কোডঃBTC-USDT. মনে রাখবেন যে এটি এক্সচেঞ্জ দ্বারা নামকরণ করা ট্রেডিং পণ্য কোডকে বোঝায়, FMZ প্ল্যাটফর্ম দ্বারা সংজ্ঞায়িত ট্রেডিং জোড়া নয়।

এই আপগ্রেডের পরে, প্যারামিটার আইডি এর বিন্যাস যা পাস করা প্রয়োজনexchange.GetOrder(id)ফাংশনটি নিম্নরূপ নিয়ন্ত্রিত হয়ঃBTC-USDT,123456.

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

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

এক্সচেঞ্জকে প্রভাবিত করে। অর্ডার বাতিল করুন ফাংশন

এই আপগ্রেডের প্রভাবexchange.CancelOrder()ফাংশন একই হয়exchange.GetOrder() function.

এক্সচেঞ্জকে প্রভাবিত করে।

এই আপগ্রেডের প্রভাবexchange.Buy()ফাংশন একই হয়exchange.GetOrder()ফাংশন। অর্ডার আইডি দ্বারা ফিরেexchange.Buy()ফাংশন একটি নতুন কাঠামো, উদাহরণস্বরূপ, OKX এক্সচেঞ্জে একটি ফিউচার অর্ডার স্থাপন করার সময় ফিরে আসা আইডি হলঃLTC-USDT-SWAP,1578360858053058560.

বিনিময়কে প্রভাবিত করে। বিক্রয় ফাংশন

এই আপগ্রেডের প্রভাবexchange.Sell()ফাংশন একই হয়exchange.GetOrder()ফাংশন। অর্ডার আইডি দ্বারা ফিরেexchange.Sell()ফাংশন একটি নতুন কাঠামো, উদাহরণস্বরূপ, OKX এক্সচেঞ্জে একটি ফিউচার অর্ডার স্থাপন করার সময় ফিরে আসা আইডি হলঃETH-USDT-SWAP,1578360832820125696.

এক্সচেঞ্জ.GetPosition ফাংশন প্রভাবিত করে

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

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

উদাহরণস্বরূপ, বর্তমান ট্রেডিং জোড়া হল BTC_USDT এবং চুক্তি কোড হল swap। এই সময়ে, কল করুনঃ

exchange.GetPosition() // Equivalent to calling exchange.GetPosition("USDT.swap")

এই ফাংশনটি সকল মুদ্রার ইউ-ভিত্তিক চিরস্থায়ী চুক্তির অবস্থান তথ্য অনুরোধ করবে।

এক্সচেঞ্জ.GetOrders ফাংশন প্রভাবিত করে

  1. স্পট এক্সচেঞ্জের জন্যঃ

পুরানো সংজ্ঞাঃ exchange.GetOrders() ফাংশন, যখন কোনো পরামিতি নির্দিষ্ট না করেই কল করা হয়, তখন বর্তমান ট্রেডিং জোড়ার সমস্ত অসম্পূর্ণ অর্ডার পায়। সমন্বয় এবং সংশোধনের পরে, নতুন সংজ্ঞাটি হলঃ exchange.GetOrders (()) ফাংশন, যখন কোনও পরামিতি নির্দিষ্ট না করে কল করা হয়, তখন সমস্ত স্পট ট্রেডিং জোড়ার অসম্পূর্ণ আদেশগুলি পায়।

  1. ফিউচার এক্সচেঞ্জের জন্যঃ

পুরানো সংজ্ঞাঃ exchange.GetOrders() ফাংশন, যখন কোনো পরামিতি নির্দিষ্ট না করেই কল করা হয়, তখন বর্তমান ট্রেডিং জোড়া এবং চুক্তি কোড দ্বারা সেট করা নির্দিষ্ট চুক্তির সমস্ত অসম্পূর্ণ আদেশ পায়। সমন্বয় এবং সংশোধনের পরে, নতুন সংজ্ঞাটি হলঃ exchange.GetOrders() ফাংশন, যখন কোনও পরামিতি নির্দিষ্ট না করেই কল করা হয়, তখন বর্তমান ট্রেডিং জোড়া এবং চুক্তি কোড দ্বারা নির্ধারিত মাত্রা পরিসরের সমস্ত অসম্পূর্ণ অর্ডার পায়।

উদাহরণস্বরূপ, বর্তমান ট্রেডিং জোড়া হল BTC_USD এবং চুক্তি কোডটি চতুর্থাংশ। এই সময়ে, কল করুনঃ

exchange.GetOrders()   // Equivalent to calling exchange.GetOrders("USD.futures")

এই ফাংশনটি সমস্ত মুদ্রা ভিত্তিক ফিউচার কন্ট্রাক্টের অসমাপ্ত অর্ডার ডেটা অনুরোধ করবে।

৪. কাঠামোগত পরিবর্তন

টিকার গঠন

এই আপডেটটি টিকার কাঠামোতে একটি প্রতীক ক্ষেত্র যোগ করে, যা বর্তমান টিকার কাঠামোর বাজার তথ্য রেকর্ড করে। এই ক্ষেত্রের বিন্যাস ঠিক একই চিহ্ন প্যারামিটার বিন্যাসexchange.GetTicker() function.

অর্ডার কাঠামো

এই আপডেট অর্ডার কাঠামোর একটি প্রতীক ক্ষেত্র যোগ করে, এবং এই ক্ষেত্রের বিন্যাস ঠিক একই প্রতীক পরামিতি বিন্যাসexchange.GetTicker()ফাংশন এই আপডেটটি অর্ডার কাঠামোর আইডি ক্ষেত্রটিও সংশোধন করে, নতুন অর্ডার আইডি ফর্ম্যাটে পণ্যের তথ্য এবং মূল অর্ডার তথ্য রেকর্ড করে।exchange.GetOrder()ফাংশন, যা এখানে পুনরাবৃত্তি করা হবে না।

অবস্থান কাঠামো

এই আপডেট অবস্থান কাঠামোর একটি প্রতীক ক্ষেত্র যোগ করে. এই ক্ষেত্রের বিন্যাস ঠিক একইexchange.GetTicker() function.

৫. ব্যাকটেস্টিং সিস্টেম

প্ল্যাটফর্ম কৌশল এপিআই ইন্টারফেস আপগ্রেড অনুযায়ী, প্ল্যাটফর্মের ব্যাকটেস্টিং সিস্টেমটি সিঙ্ক্রোনাইজ আপডেট করা হয়েছে; এছাড়াও ব্যাকটেস্টিং সিস্টেমটি নিম্নলিখিতগুলির জন্য সমর্থন যুক্ত করেছেঃ

  • আরও এক্সচেঞ্জ ব্যাকটেস্টিং ডেটা সমর্থন করে।
  • সমস্ত ধরণের এক্সচেঞ্জের জন্য ব্যাকটেস্টিং ডেটা সমর্থন করে।
  • ইউ-ভিত্তিক, মুদ্রাভিত্তিক ডেলিভারি এবং চিরস্থায়ী চুক্তির জন্য মিশ্র ট্রেডিং।
  • ফিউচার এক্সচেঞ্জ অবজেক্টগুলি ব্যাকটেস্টিংয়ের সময় ট্রেডিং জোড়া স্যুইচিং সমর্থন করে।

অতিরিক্ত আপডেট

১. অ্যাকাউন্ট কাঠামোতে নতুন ক্ষেত্র ইক্যুইটি এবং ইউপিএনএল

জমির মাঠAccountগঠন দ্বারা ফিরেGetAccountফিউচার এক্সচেঞ্জ অবজেক্টের সদস্য ফাংশন প্রসারিত হয়েছে।

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

  • ইউপিএনএল বর্তমান মার্জিন সম্পদের মুদ্রায় থাকা সমস্ত পজিশনের অব্যবহৃত লাভ এবং ক্ষতি। বেশিরভাগ ফিউচার এক্সচেঞ্জ এই ক্ষেত্রটি সমর্থন করে, কয়েকটি ব্যতীত যা করে না।

2. সেটমার্জিনলেভেল ফাংশনটি প্রতীক পরামিতি সমর্থন করতে আপগ্রেড করা হয়েছে

ফিউচার এক্সচেঞ্জ অবজেক্টের সদস্য ফাংশন SetMarginLevel আপগ্রেড করা হয়েছে এবং প্যারামিটার প্রতীক যোগ করা হয়েছে।

পরীক্ষার উদাহরণঃ

function main() {
    exchange.SetCurrency("ETH_USDT")
    exchange.SetContractType("swap")
    
    // The current trading pair is ETH_USDT, the contract code is swap, and the leverage value is set to 10
    exchange.SetMarginLevel(10)
    
    // Directly specify the trading pair BTC_USDT, contract code swap, and set the leverage value to 20
    exchange.SetMarginLevel("BTC_USDT.swap", 20)
}

3. GetMarkets ফাংশন দ্বারা ফেরত বাজারের কাঠামো CtValCcy ক্ষেত্র যোগ

মাঠCtValCcyএকটি চুক্তির মান একক রেকর্ড করে। একটি চুক্তির মান একক হতে পারেঃ বিটিসি, ইউএসডি, ইটিএইচ ইত্যাদি। মাঠCtValএক্সচেঞ্জে ট্রেডিং প্রোডাক্টের একটি চুক্তির মূল্য রেকর্ড করে, এবং ইউনিটটি মুদ্রা যা এক্সচেঞ্জে রেকর্ড করা হয়CtValCcyউদাহরণস্বরূপঃCtValহল ০.০১, এবংCtValCcyবিটিসি, যার অর্থ হল যে একটি চুক্তির মূল্য ০.০১ বিটিসি।


আরো