কৌশল নকশায় নতুনদের জন্য, হেজিং কৌশল অনুশীলনের জন্য খুব ভাল। এই নিবন্ধটি একটি সহজ কিন্তু কঠিন ক্রিপ্টোকারেন্সি স্পট হেজিং কৌশল বাস্তবায়ন করে, আশা করে নতুনদের কিছু নকশা অভিজ্ঞতা শিখতে দেয়।
প্রথমত, আমাদের নিশ্চিত হওয়া দরকার যে যে কৌশলটি ডিজাইন করা হবে তা একটি ক্রিপ্টোকারেন্সি স্পট হেজিং কৌশল। আমরা সবচেয়ে সহজ হেজিং ডিজাইন করি। আমরা কেবল দুটি স্পট প্ল্যাটফর্মের মধ্যে উচ্চতর দামের প্ল্যাটফর্মে বিক্রি করি এবং দামের স্প্রেড অর্জনের জন্য কম দামের প্ল্যাটফর্মে কিনে থাকি। যখন উচ্চতর দামের প্ল্যাটফর্মটি উদ্ধৃতি মুদ্রার প্রতীকগুলিতে পূর্ণ হয় (কারণ দাম বেশি, সমস্ত মুদ্রার প্রতীক বিক্রি হয়), বা যখন কম দামের প্ল্যাটফর্মটি মুদ্রার প্রতীকগুলিতে পূর্ণ হয় (কারণ দাম কম, মুদ্রার প্রতীকগুলি সমস্ত সম্পদ দ্বারা কেনা হয়), এটি হেজ করা যায় না। এই সময়ে, আপনি কেবলমাত্র মূল্য বিপরীত হওয়ার জন্য হেজিংয়ের জন্য অপেক্ষা করতে পারেন।
হেজিংয়ের সময় অর্ডার মূল্য এবং পরিমাণের জন্য, প্রতিটি প্ল্যাটফর্মে নির্ভুলতার সীমা রয়েছে এবং সর্বনিম্ন অর্ডার পরিমাণেরও একটি সীমা রয়েছে। সর্বনিম্ন সীমা ছাড়াও, কৌশলটিও হেজিংয়ের জন্য সর্বোচ্চ অর্ডার পরিমাণ বিবেচনা করতে হবে। যদি অর্ডার পরিমাণ খুব বড় হয় তবে বাজারে এর জন্য পর্যাপ্ত অর্ডার ভলিউম থাকবে না। যদি দুটি প্ল্যাটফর্মের আলাদা কোট মুদ্রা থাকে তবে বিনিময় হার কীভাবে রূপান্তর করা যায় তাও বিবেচনা করা দরকার। হেজিংয়ের সময় হ্যান্ডলিং ফি এবং অর্ডার গ্রহণকারীর স্লিপিং হ'ল সমস্ত ট্রেডিং ব্যয়। দামের পার্থক্য থাকা পর্যন্ত হেজিং সর্বদা ঘটে না। অতএব, হেজিংয়ের দামের স্প্রেডেরও একটি ট্রিগার মান রয়েছে। যদি এটি একটি নির্দিষ্ট দামের স্প্রেডের চেয়ে কম হয় তবে হেজ ক্ষতি করবে।
এর উপর ভিত্তি করে, কৌশলটি বিভিন্ন পরামিতি সহ ডিজাইন করা দরকারঃ
hedgeDiffPrice
যখন স্প্রেডের মান অতিক্রম করে, তখন হেজিং সক্রিয় করা হবে।minHedgeAmount
, হেকজিংয়ের জন্য উপলব্ধ সর্বনিম্ন অর্ডার পরিমাণ (প্রতীক পরিমাণ) ।maxHedgeAmount
, হেকজিংয়ের জন্য সর্বোচ্চ অর্ডার পরিমাণ (প্রতীক পরিমাণ) ।pricePrecisionA
, প্ল্যাটফর্ম A এর অর্ডার মূল্যের সঠিকতা (দশমিক সংখ্যা) ।amountPrecisionA
, প্ল্যাটফর্ম A এর অর্ডার পরিমাণের নির্ভুলতা (দশমিক সংখ্যা) ।pricePrecisionB
, প্ল্যাটফর্ম বি এর অর্ডার মূল্যের সঠিকতা (দশমিক সংখ্যা) ।amountPrecisionB
, প্ল্যাটফর্ম বি এর অর্ডার পরিমাণের সঠিকতা (দশমিক সংখ্যা) ।rateA
, প্রথম যোগ করা বিনিময় বস্তুর বিনিময় হার রূপান্তর; ডিফল্ট হল 1, যা রূপান্তর না করার ইঙ্গিত দেয়।rateB
, দ্বিতীয় যোগ করা বিনিময় বস্তুর বিনিময় হার রূপান্তর; ডিফল্ট হল 1, যা রূপান্তর না করার ইঙ্গিত দেয়।হেজ কৌশল দুটি অ্যাকাউন্টের মুদ্রা প্রতীক পরিমাণ অপরিবর্তিত রাখতে হবে (যেমন, কোন দিকনির্দেশক অবস্থান রাখা না, এবং নিরপেক্ষ বজায় রাখা), তাই সবসময় ভারসাম্য সনাক্ত করার কৌশল একটি ভারসাম্য যুক্তি থাকতে হবে। ভারসাম্য চেক করার সময়, এটি অনিবার্য দুই প্ল্যাটফর্ম থেকে সম্পদ তথ্য পেতে হয়। অতএব, আমরা ব্যবহারের জন্য একটি ফাংশন লিখতে হবে।
function updateAccs(arrEx) {
var ret = []
for (var i = 0 ; i < arrEx.length ; i++) {
var acc = arrEx[i].GetAccount()
if (!acc) {
return null
}
ret.push(acc)
}
return ret
}
অর্ডার দেওয়ার পরে, যদি কোনও কার্যকর অর্ডার না থাকে তবে আমাদের এটি সময়মতো বাতিল করতে হবে এবং অর্ডারটি অপেক্ষমান রাখা যাবে না। এই ক্রিয়াকলাপটি ব্যালেন্স মডিউল এবং হেজ লজিক উভয় ক্ষেত্রেই প্রক্রিয়া করা দরকার, তাই সমস্ত অর্ডার বাতিল করার একটি ফাংশন ডিজাইন করাও প্রয়োজনীয়।
function cancelAll() {
_.each(exchanges, function(ex) {
while (true) {
var orders = _C(ex.GetOrders)
if (orders.length == 0) {
break
}
for (var i = 0 ; i < orders.length ; i++) {
ex.CancelOrder(orders[i].Id, orders[i])
Sleep(500)
}
}
})
}
মুদ্রা প্রতীকের পরিমাণ ভারসাম্য করার সময়, আমাদের একটি নির্দিষ্ট পরিমাণে একটি নির্দিষ্ট গভীরতার ডেটা দিয়ে মূল্য খুঁজে বের করতে হবে, তাই এটি পরিচালনা করার জন্য আমাদের এই ধরনের ফাংশন দরকার।
function getDepthPrice(depth, side, amount) {
var arr = depth[side]
var sum = 0
var price = null
for (var i = 0 ; i < arr.length ; i++) {
var ele = arr[i]
sum += ele.Amount
if (sum >= amount) {
price = ele.Price
break
}
}
return price
}
তারপরে আমাদের নির্দিষ্ট হেজিং অর্ডার অপারেশন ডিজাইন এবং লিখতে হবে, যা একই সাথে অর্ডার দেওয়ার জন্য ডিজাইন করা দরকারঃ
function hedge(buyEx, sellEx, price, amount) {
var buyRoutine = buyEx.Go("Buy", price, amount)
var sellRoutine = sellEx.Go("Sell", price, amount)
Sleep(500)
buyRoutine.wait()
sellRoutine.wait()
}
অবশেষে, আসুন ভারসাম্য ফাংশনের নকশাটি সম্পূর্ণ করি, যা কিছুটা জটিল।
function keepBalance(initAccs, nowAccs, depths) {
var initSumStocks = 0
var nowSumStocks = 0
_.each(initAccs, function(acc) {
initSumStocks += acc.Stocks + acc.FrozenStocks
})
_.each(nowAccs, function(acc) {
nowSumStocks += acc.Stocks + acc.FrozenStocks
})
var diff = nowSumStocks - initSumStocks
// calculate currency spread
if (Math.abs(diff) > minHedgeAmount && initAccs.length == nowAccs.length && nowAccs.length == depths.length) {
var index = -1
var available = []
var side = diff > 0 ? "Bids" : "Asks"
for (var i = 0 ; i < nowAccs.length ; i++) {
var price = getDepthPrice(depths[i], side, Math.abs(diff))
if (side == "Bids" && nowAccs[i].Stocks > Math.abs(diff)) {
available.push(i)
} else if (price && nowAccs[i].Balance / price > Math.abs(diff)) {
available.push(i)
}
}
for (var i = 0 ; i < available.length ; i++) {
if (index == -1) {
index = available[i]
} else {
var priceIndex = getDepthPrice(depths[index], side, Math.abs(diff))
var priceI = getDepthPrice(depths[available[i]], side, Math.abs(diff))
if (side == "Bids" && priceIndex && priceI && priceI > priceIndex) {
index = available[i]
} else if (priceIndex && priceI && priceI < priceIndex) {
index = available[i]
}
}
}
if (index == -1) {
Log("cannot balance")
} else {
// balanced ordering
var price = getDepthPrice(depths[index], side, Math.abs(diff))
if (price) {
var tradeFunc = side == "Bids" ? exchanges[index].Sell : exchanges[index].Buy
tradeFunc(price, Math.abs(diff))
} else {
Log("invalid price", price)
}
}
return false
} else if (!(initAccs.length == nowAccs.length && nowAccs.length == depths.length)) {
Log("error:", "initAccs.length:", initAccs.length, "nowAccs.length:", nowAccs.length, "depths.length:", depths.length)
return true
} else {
return true
}
}
এই ফাংশনগুলো কৌশলগত প্রয়োজনীয়তা অনুযায়ী ডিজাইন করা হয়েছে, এবং আমরা কৌশলটির প্রধান ফাংশন ডিজাইন করতে শুরু করতে পারি।
এফএমজেডে, কৌশলটিmain
কর্মের শুরুতেmain
ফাংশন, আমরা কৌশল কিছু initialization করতে হবে.
এক্সচেঞ্জ অবজেক্টের নাম কৌশল অনেক অপারেশন জন্য বিনিময় বস্তু ব্যবহার করুন, যেমন বাজারের উদ্ধৃতি পেতে, অর্ডার স্থাপন, এবং তাই উপর, তাই এটি একটি দীর্ঘ নাম ব্যবহার করতে অসুবিধাজনক হবে প্রতিটি সময়, আমার সামান্য কৌতুক পরিবর্তে একটি সহজ সংক্ষিপ্ত নাম ব্যবহার করা হয়, উদাহরণস্বরূপঃ
var exA = exchanges[0]
var exB = exchanges[1]
তাহলে, কোডটি পরে লিখতে আরও আরামদায়ক হবে।
বিনিময় হার ও নির্ভুলতা
// settings of precision and exchange rate
if (rateA != 1) {
// set exchange rate A
exA.SetRate(rateA)
Log("Platform A sets exchange rate:", rateA, "#FF0000")
}
if (rateB != 1) {
// set exchange rate B
exB.SetRate(rateB)
Log("Platform B sets exchange rate:", rateB, "#FF0000")
}
exA.SetPrecision(pricePrecisionA, amountPrecisionA)
exB.SetPrecision(pricePrecisionB, amountPrecisionB)
যদি বিনিময় হার পরামিতিগুলির মধ্যে একটি, যথাrateA
এবংrateB
, 1 এ সেট করা হয় (ডিফল্ট হল 1), অর্থাৎ,rateA != 1
অথবাrateB != 1
অর্থ সক্রিয় করা হয়নি, এবং বিনিময় হার রূপান্তর করা যাবে না।
সমস্ত তারিখ পুনরায় সেট করুন
কখনও কখনও, এটা সব লগ মুছে ফেলার প্রয়োজন হয় এবং কৌশল শুরু করার সময় ডাটা রেকর্ড ভ্যাকুয়াম. আপনি একটি কৌশল ইন্টারফেস পরামিতি ডিজাইন করতে পারেনisReset
, এবং তারপরে কৌশলটির সূচনা অংশে পুনরায় সেট কোডটি ডিজাইন করুন, উদাহরণস্বরূপঃ
if (isReset) { // when "isReset" is true, reset the data
_G(null)
LogReset(1)
LogProfitReset()
LogVacuum()
Log("Reset all data", "#FF0000")
}
প্রাথমিক অ্যাকাউন্ট ডেটা পুনরুদ্ধার করুন এবং বর্তমান অ্যাকাউন্ট ডেটা আপডেট করুন
ব্যালেন্সের মূল্যায়ন করার জন্য, কৌশলটি বর্তমানের সাথে তুলনা করার জন্য প্রাথমিক অ্যাকাউন্টের সম্পদ অবস্থার ক্রমাগত রেকর্ড করা প্রয়োজন।nowAccs
বর্তমান অ্যাকাউন্টের তথ্য রেকর্ড করার জন্য ব্যবহৃত হয়।updateAccs
বর্তমান প্ল্যাটফর্মের অ্যাকাউন্ট ডেটা পেতে আমরা যে ফাংশনটি ডিজাইন করেছি।initAccs
এটি প্রাথমিক অ্যাকাউন্টের অবস্থা রেকর্ড করতে ব্যবহৃত হয় (যেমন A এবং B উভয়ের মুদ্রা প্রতীক পরিমাণ, কোট মুদ্রার পরিমাণ ইত্যাদি) ।initAccs
, প্রথমে ব্যবহার করুন_G()
পুনরুদ্ধার করার ফাংশন ( _ জি ফাংশন ডেটা স্থায়ীভাবে রেকর্ড করবে এবং রেকর্ড করা ডেটা আবার ফিরিয়ে দিতে পারে; বিস্তারিত জানার জন্য API ডকুমেন্টেশন পড়ুনঃলিঙ্ক).
যদি আপনি তথ্য অনুসন্ধান করতে পারবেন না, বরাদ্দ এবং ব্যবহার করার জন্য বর্তমান অ্যাকাউন্ট তথ্য ব্যবহার_G()
রেকর্ড করার জন্য ফাংশন.
যেমন নিম্নলিখিত কোডঃ
var nowAccs = _C(updateAccs, exchanges)
var initAccs = _G("initAccs")
if (!initAccs) {
initAccs = nowAccs
_G("initAccs", initAccs)
}
প্রধান লুপের কোডটি কৌশল লজিক এক্সিকিউশনের প্রতিটি রাউন্ডের প্রক্রিয়া এবং নন-স্টপ পুনরাবৃত্তি এক্সিকিউশন কৌশল প্রধান লুপ তৈরি করে। আসুন প্রধান লুপের প্রোগ্রামের প্রতিটি এক্সিকিউশন প্রবাহের দিকে নজর দেওয়া যাক।
বাজারের উদ্ধৃতি পান এবং বৈধতা বিচার করুন
var ts = new Date().getTime()
var depthARoutine = exA.Go("GetDepth")
var depthBRoutine = exB.Go("GetDepth")
var depthA = depthARoutine.wait()
var depthB = depthBRoutine.wait()
if (!depthA || !depthB || depthA.Asks.length == 0 || depthA.Bids.length == 0 || depthB.Asks.length == 0 || depthB.Bids.length == 0) {
Sleep(500)
continue
}
এখানে আপনি দেখতে পারেন যে সমান্তরাল ফাংশনexchange.Go
FMZ প্ল্যাটফর্মের সমান্তরাল বস্তু তৈরি করতে ব্যবহৃত হয়depthARoutine
এবংdepthBRoutine
যে কলGetDepth()
ইন্টারফেস. যখন এই দুটি সমান্তরাল বস্তু তৈরি করা হয়,GetDepth()
ইন্টারফেস অবিলম্বে কল করা হয়, এবং উভয় গভীরতা তথ্যের জন্য অনুরোধ প্ল্যাটফর্ম পাঠানো হয়।
তাহলে, কল করুনwait()
বস্তুর পদ্ধতিdepthARoutine
এবং বস্তুdepthBRoutine
গভীরতার তথ্য পেতে।
গভীরতার তথ্য পাওয়ার পর, গভীরতার তথ্য যাচাই করা প্রয়োজন যাতে এর বৈধতা বিচার করা যায়।continue
প্রধান লুপ পুনরায় চালানোর জন্য স্ট্রিং ট্রিগার করা হয়।
ব্যবহারprice spread
অথবাspread ratio
?
var targetDiffPrice = hedgeDiffPrice
if (diffAsPercentage) {
targetDiffPrice = (depthA.Bids[0].Price + depthB.Asks[0].Price + depthB.Bids[0].Price + depthA.Asks[0].Price) / 4 * hedgeDiffPercentage
}
প্যারামিটার পরিপ্রেক্ষিতে, আমরা যেমন একটি নকশা তৈরি করেছি। FMZ প্যারামিটার হতে পারেপ্রদর্শনীঅথবালুকিয়ে থাকাএকটি প্যারামিটার উপর ভিত্তি করে, তাই আমরা একটি প্যারামিটার করতে পারেন সিদ্ধান্ত নিতে কিনা ব্যবহারprice spread
, অথবাspread ratio
.
প্যারামিটারdiffAsPercentage
কৌশল ইন্টারফেসের পরামিতি যোগ করা হয়েছে. অন্যান্য দুটি পরামিতি, যা প্যারামিটার উপর ভিত্তি করে প্রদর্শন বা লুকিয়ে রাখা হবেঃhedgeDiffPrice@!diffAsPercentage
যখনdiffAsPercentage
মিথ্যা, তা প্রমাণিত হবে।hedgeDiffPercentage@diffAsPercentage
যখনdiffAsPercentage
সত্য, এটা প্রদর্শিত হবে।
পরিকল্পনার পর, আমরাdiffAsPercentage
প্যারামিটার, যা হেজিং ট্রিগার শর্ত হিসাবে স্প্রেড অনুপাত ব্যবহার করা হয়।diffAsPercentage
প্যারামিটারটি চেক করা না হলে, হেক্জ ট্রিগার শর্ত হিসেবে দামের স্প্রেড ব্যবহার করা হয়।
বিচারক হেজ ট্রিগার
if (depthA.Bids[0].Price - depthB.Asks[0].Price > targetDiffPrice && Math.min(depthA.Bids[0].Amount, depthB.Asks[0].Amount) >= minHedgeAmount) { // A -> B market condition satisfied
var price = (depthA.Bids[0].Price + depthB.Asks[0].Price) / 2
var amount = Math.min(depthA.Bids[0].Amount, depthB.Asks[0].Amount)
if (nowAccs[0].Stocks > minHedgeAmount && nowAccs[1].Balance / price > minHedgeAmount) {
amount = Math.min(amount, nowAccs[0].Stocks, nowAccs[1].Balance / price, maxHedgeAmount)
Log("triggerA->B:", depthA.Bids[0].Price - depthB.Asks[0].Price, price, amount, nowAccs[1].Balance / price, nowAccs[0].Stocks) // prompt message
hedge(exB, exA, price, amount)
cancelAll()
lastKeepBalanceTS = 0
isTrade = true
}
} else if (depthB.Bids[0].Price - depthA.Asks[0].Price > targetDiffPrice && Math.min(depthB.Bids[0].Amount, depthA.Asks[0].Amount) >= minHedgeAmount) { // B -> A market condition satisfied
var price = (depthB.Bids[0].Price + depthA.Asks[0].Price) / 2
var amount = Math.min(depthB.Bids[0].Amount, depthA.Asks[0].Amount)
if (nowAccs[1].Stocks > minHedgeAmount && nowAccs[0].Balance / price > minHedgeAmount) {
amount = Math.min(amount, nowAccs[1].Stocks, nowAccs[0].Balance / price, maxHedgeAmount)
Log("triggerB->A:", depthB.Bids[0].Price - depthA.Asks[0].Price, price, amount, nowAccs[0].Balance / price, nowAccs[1].Stocks) // prompt message
hedge(exA, exB, price, amount)
cancelAll()
lastKeepBalanceTS = 0
isTrade = true
}
}
হিজিংয়ের জন্য বেশ কয়েকটি শর্ত রয়েছেঃ ১.প্রথমত, হেজ স্প্রেড পূরণ করুন; শুধুমাত্র যখন মার্কেট স্প্রেড সেট স্প্রেড প্যারামিটার পূরণ করে তখনই হেজিং সম্ভব।
২.বাজারের হেজিংয়ের পরিমাণটি পরামিতিগুলিতে নির্ধারিত সর্বনিম্ন হেজিংয়ের পরিমাণ পূরণ করা উচিত। যেহেতু বিভিন্ন প্ল্যাটফর্মের সর্বনিম্ন অর্ডার পরিমাণ আলাদা, তাই দুটি থেকে সর্বনিম্নটি নেওয়া উচিত।
৩.বিক্রয় অপারেশনের সাথে প্ল্যাটফর্মের সম্পদগুলি বিক্রয়ের জন্য যথেষ্ট, এবং ক্রয় অপারেশনের সাথে প্ল্যাটফর্মের সম্পদগুলি কেনার জন্য যথেষ্ট। যখন এই শর্তগুলি পূরণ হয়, হেজিং দ্বারা অর্ডার দেওয়ার জন্য হেজ ফাংশনটি সম্পাদন করুন। প্রধান ফাংশনের আগে, আমরা একটি পরিবর্তনশীল ঘোষণা করিisTrade
আগে থেকে চিহ্নিত করতে হবে কিনা হেজ ঘটেছে. এখানে, যদি হেজ ট্রিগার করা হয়, পরিবর্তনশীল সেট করা হয়true
. এবং গ্লোবাল ভেরিয়েবল রিসেট করুনlastKeepBalanceTS
0 (lastKeepBalanceTS ব্যবহার করা হয় সর্বশেষ ব্যালেন্স অপারেশনের টাইমস্ট্যাম্প চিহ্নিত করতে, এবং এটি 0 এ সেট করা হবে অবিলম্বে ব্যালেন্স অপারেশন ট্রিগার হবে), এবং তারপর সমস্ত অপেক্ষমান অর্ডার বাতিল করুন।
ব্যালেন্স অপারেশন
if (ts - lastKeepBalanceTS > keepBalanceCyc * 1000) {
nowAccs = _C(updateAccs, exchanges)
var isBalance = keepBalance(initAccs, nowAccs, [depthA, depthB])
cancelAll()
if (isBalance) {
lastKeepBalanceTS = ts
if (isTrade) {
var nowBalance = _.reduce(nowAccs, function(sumBalance, acc) {return sumBalance + acc.Balance}, 0)
var initBalance = _.reduce(initAccs, function(sumBalance, acc) {return sumBalance + acc.Balance}, 0)
LogProfit(nowBalance - initBalance, nowBalance, initBalance, nowAccs)
isTrade = false
}
}
}
এটা দেখা যায় যে ভারসাম্য ফাংশন পর্যায়ক্রমে সঞ্চালিত হয়, কিন্তু যদিlastKeepBalanceTS
হিজিং অপারেশন শুরু হওয়ার পর যদি রিসেট করা হয়, তাহলে অবিলম্বে ব্যালেন্স অপারেশন শুরু হবে। ব্যালেন্স সফল হলে রিটার্ন গণনা করা হবে।
অবস্থা বার তথ্য
LogStatus(_D(), "A->B:", depthA.Bids[0].Price - depthB.Asks[0].Price, " B->A:", depthB.Bids[0].Price - depthA.Asks[0].Price, " targetDiffPrice:", targetDiffPrice, "\n",
"currentA,Stocks:", nowAccs[0].Stocks, "FrozenStocks:", nowAccs[0].FrozenStocks, "Balance:", nowAccs[0].Balance, "FrozenBalance", nowAccs[0].FrozenBalance, "\n",
"currentB,Stocks:", nowAccs[1].Stocks, "FrozenStocks:", nowAccs[1].FrozenStocks, "Balance:", nowAccs[1].Balance, "FrozenBalance", nowAccs[1].FrozenBalance, "\n",
"initialA,Stocks:", initAccs[0].Stocks, "FrozenStocks:", initAccs[0].FrozenStocks, "Balance:", initAccs[0].Balance, "FrozenBalance", initAccs[0].FrozenBalance, "\n",
"initialB,Stocks:", initAccs[1].Stocks, "FrozenStocks:", initAccs[1].FrozenStocks, "Balance:", initAccs[1].Balance, "FrozenBalance", initAccs[1].FrozenBalance)
স্ট্যাটাস বারটি বিশেষত জটিল হওয়ার জন্য ডিজাইন করা হয়নি। এটি বর্তমান সময়, প্ল্যাটফর্ম এ থেকে প্ল্যাটফর্ম বি থেকে দামের স্প্রেড এবং বি থেকে এ পর্যন্ত দামের স্প্রেড প্রদর্শন করে; এটি বর্তমান হেজ লক্ষ্য স্প্রেড, প্ল্যাটফর্ম এ এর অ্যাকাউন্ট সম্পদ তথ্য এবং প্ল্যাটফর্ম বি এর অ্যাকাউন্ট সম্পদ তথ্য প্রদর্শন করে।
প্যারামিটারগুলির ক্ষেত্রে, আমরা বিনিময় হার মান রূপান্তর প্যারামিটার ডিজাইন করেছি, এবং আমরা প্রথম অপারেশন মধ্যে বিনিময় হার রূপান্তর ডিজাইন করেছিmain
এটি লক্ষ্য করা উচিত যে,SetRate
বিনিময় হার রূপান্তর ফাংশন প্রথম কার্যকর করা প্রয়োজন।
এই ফাংশন দুটি দিক প্রভাবিত করবেঃ
উদাহরণস্বরূপ, বর্তমান ট্রেডিং জোড়া হলBTC_USDT
, দামের একক হলUSDT
, এবং অ্যাকাউন্টের সম্পদগুলিতে উপলব্ধ কোট মুদ্রাটিওUSDT
. যদি আমি সম্পদ মান CNY রূপান্তর করতে চান, সেটexchange.SetRate(6.8)
কোডের অধীনে সমস্ত ফাংশন দ্বারা প্রাপ্ত তথ্য রূপান্তর করতেexchange
এবং তারপর CNY তে রূপান্তর করুন।
কোন কোট মুদ্রায় রূপান্তর করতে, আমদানিবর্তমান কোটিং মুদ্রার থেকে লক্ষ্য কোটিং মুদ্রার বিনিময় হারমধ্যেSetRate
function.
সম্পূর্ণ কৌশল:বিভিন্ন কোটেশন মুদ্রার স্পট হেজিং কৌশল (শিক্ষা)