اسٹریٹجی ڈیزائن کرنے والے ابتدائی افراد کے لئے ہیجنگ کی حکمت عملی ایک عمدہ پریکٹیشنر حکمت عملی ہے۔ اس مضمون میں ایک سادہ لیکن عملی ڈیجیٹل کرنسی کی فوری طور پر ہیجنگ کی حکمت عملی کا نفاذ کیا گیا ہے ، جس سے امید ہے کہ ابتدائی افراد کو کچھ ڈیزائننگ کا تجربہ حاصل ہوگا۔
سب سے پہلے یہ واضح کرنا ہے کہ یہ آنے والی حکمت عملی ایک ڈیجیٹل کرنسی کے لئے فوری طور پر ہیجنگ کی حکمت عملی ہے ، ہم نے سب سے آسان ہیجنگ ڈیزائن کی ہے ، صرف دو فوری تبادلے کے مابین اعلی قیمت والے تبادلے فروخت کرتے ہیں ، کم قیمت والے تبادلے خریدتے ہیں تاکہ فرق حاصل کیا جاسکے۔ جب اعلی قیمت والے تبادلے میں سبھی قیمتیں ہیں (کیونکہ اعلی قیمت والے سکے فروخت ہوچکے ہیں) ، کم قیمت والے تبادلے میں سبھی سکے ہیں (کیونکہ کم قیمت والے سکے میں خریدے گئے ہیں) تو ہیجنگ نہیں ہوسکتی ہے۔ اس وقت صرف قیمتوں میں ہیجنگ کی جاسکتی ہے۔
ہیجنگ کے وقت آرڈر کی قیمت ، مقدار ، اور تبادلے کی درستگی کی حد ہوتی ہے ، اور یہاں تک کہ کم سے کم مقدار کی حد بھی ہوتی ہے۔ کم سے کم حد سے باہر کی حکمت عملی میں ہیجنگ کے وقت بھی ایک ہی وقت میں ہیجنگ کی زیادہ سے زیادہ مقدار پر غور کیا جاتا ہے ، اگر ایک ہی وقت میں بہت بڑی تعداد میں بھی کافی مقدار میں آرڈر نہیں ہوتا ہے۔ یہ بھی غور کرنے کی ضرورت ہے کہ اگر دو تجارت کی جانے والی کرنسیوں میں تبادلوں کی شرح تبدیل کرنے کا طریقہ مختلف ہے۔ ہیجنگ کے عمل کی فیس ، ایک نقطہ کھانے کے لئے سلائڈ ٹرانزیکشن لاگت ہیں ، اور جب تک کوئی فرق نہیں ہوتا ہے تو ہیجنگ کی جاسکتی ہے ، لہذا ہیجنگ کا فرق بھی ایک ٹرگر ہے ، اور کسی فرق سے کم ہونے پر ہیجنگ کا نقصان ہوتا ہے۔
ان خیالات کی بنیاد پر ، حکمت عملی کو کئی پیرامیٹرز ڈیزائن کرنے کی ضرورت ہے۔
hedgeDiffPrice
، جب قیمت اس قدر سے زیادہ ہو تو ، ہیجنگ آپریشن کو متحرک کریں۔minHedgeAmount
اس کے علاوہ ، آپ کو اس بات کا یقین کرنے کی ضرورت نہیں ہے کہ آپ کو اس کے بارے میں کیا سوچنا ہے۔maxHedgeAmount
، ایک ہی وقت میں زیادہ سے زیادہ کم سے کم رقم ((کوئن کی تعداد) ◄pricePrecisionA
، A ایکسچینج میں آرڈر کی قیمت کی درستگی ((چھوٹے ہندسوں میں) ‖amountPrecisionA
، A ایکسچینج میں کم مقدار کی درستگی ((چھوٹے ہندسوں کی تعداد) ‖pricePrecisionB
ایکسچینج بی میں آرڈر کی قیمتوں کی درستگی (بچوں کی تعداد) ۔amountPrecisionB
، B ایکسچینج میں کم یونٹ کی درستگی ((چھوٹے ہندسوں کی تعداد) ‖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
// 计算币差
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("无法平衡")
} else {
// 平衡下单
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("价格无效", price)
}
}
return false
} else if (!(initAccs.length == nowAccs.length && nowAccs.length == depths.length)) {
Log("错误:", "initAccs.length:", initAccs.length, "nowAccs.length:", nowAccs.length, "depths.length:", depths.length)
return true
} else {
return true
}
}
یہ افعال حکمت عملی کی ضروریات کے مطابق ڈیزائن کیے گئے ہیں ، ذیل میں حکمت عملی کے مرکزی افعال کو ڈیزائن کرنا شروع کیا جاسکتا ہے۔
ایف ایم زیڈ پر حکمت عملی یہ ہے کہmain
فنکشن شروع ہوتا ہے۔main
اس کے علاوہ، ہم نے پہلے سے ہی اس بات کا یقین کر لیا ہے کہ ہم نے پہلے سے ہی اس طرح کی حکمت عملی کی ابتدا کی ہے.
ایکسچینج کا نام چونکہ حکمت عملی میں بہت سی کارروائیوں کو تبادلے کے اعتراضات پر استعمال کیا جاتا ہے ، جیسے مارکیٹوں کو حاصل کرنا ، آرڈر کرنا وغیرہ۔ لہذا ہر بار ایک لمبا نام استعمال کرنا مشکل ہوسکتا ہے ، چھوٹی چال ایک سادہ نام کی جگہ لے لیتی ہے ، جیسے:
var exA = exchanges[0]
var exB = exchanges[1]
اس کے بعد، آپ کو کوڈ لکھنے کے لئے آرام دہ اور پرسکون ہو جائے گا.
زر مبادلہ کی شرح، درستگی سے متعلق ڈیزائن
// 精度,汇率设置
if (rateA != 1) {
// 设置汇率A
exA.SetRate(rateA)
Log("交易所A设置汇率:", rateA, "#FF0000")
}
if (rateB != 1) {
// 设置汇率B
exB.SetRate(rateB)
Log("交易所B设置汇率:", rateB, "#FF0000")
}
exA.SetPrecision(pricePrecisionA, amountPrecisionA)
exB.SetPrecision(pricePrecisionB, amountPrecisionB)
اگر کرنسی کی شرح کے پیرامیٹرزrateA
、rateB
1 کے طور پر مقرر کیا گیا ہے ((مقرر کردہ ہے 1) ، یعنیrateA != 1
یاrateB != 1
اس کے علاوہ ، آپ کو اس کے بارے میں مزید جاننے کی ضرورت ہے۔
تمام اعداد و شمار کو دوبارہ ترتیب دیں
بعض اوقات پالیسی شروع ہونے پر تمام لاگ ان ، خالی ریکارڈ ڈیٹا کو حذف کرنے کی ضرورت ہوتی ہے۔ آپ پالیسی انٹرفیس پیرامیٹرز ڈیزائن کرسکتے ہیں۔isReset
اس کے بعد اس پالیسی میں ابتدائیہ حصے کو دوبارہ ترتیب دینے کا کوڈ ڈیزائن کریں ، جیسے:
if (isReset) { // 当isReset为真时重置数据
_G(null)
LogReset(1)
LogProfitReset()
LogVacuum()
Log("重置所有数据", "#FF0000")
}
ابتدائی اکاؤنٹ ڈیٹا کو بحال کریں، موجودہ اکاؤنٹ ڈیٹا کو اپ ڈیٹ کریں
توازن کا تعین کرنے کے لئے ، حکمت عملی میں ابتدائی اکاؤنٹ کے اثاثوں کی موجودہ حالت کے مقابلے میں استعمال ہونے والے اثاثوں کا مستقل ریکارڈ لگانے کی ضرورت ہوتی ہے ، جس سے یہ ظاہر ہوتا ہے کہ موجودہ اثاثوں کے مقابلے میں موجودہ اثاثوں کے مقابلے میں موجودہ اثاثوں کے مقابلے میں موجودہ اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کے مقابلے میں اثاثوں کیnowAccs
یہ ایک متغیر ہے جو موجودہ اکاؤنٹ کے اعداد و شمار کو ریکارڈ کرنے کے لئے استعمال کیا جاتا ہے، اور ہم نے ابھی ایک فنکشن ڈیزائن کیا ہے.updateAccs
موجودہ تبادلے کے اکاؤنٹ کی معلومات حاصل کریں۔initAccs
ابتدائی اکاؤنٹ کی حالت کو ریکارڈ کرنے کے لئے استعمال کیا جاتا ہے (ایکسچینج اے اور ایکسچینج بی کے سکے کی تعداد، قیمتوں کا تعین کرنے والے سکے کی تعداد وغیرہ) ؛initAccs
پہلے استعمال کریں_G()
فنکشن کی بحالی ((_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
}
یہاں آپ کو FMZ پلیٹ فارم کا استعمال کرتے ہوئے ایک ساتھ مل کر افعال دیکھ سکتے ہیں.exchange.Go
، ایک کال بنائیGetDepth()
انٹرفیس کے متوازی اشیاءdepthARoutine
、depthBRoutine
◎ جب یہ دو متوازی اشیاء تخلیق کی جاتی ہیں تو ، کال کریںGetDepth()
اس کے بعد ، ایک بار پھر ، ایک انٹرفیس کا آغاز ہوا ، جس کے بعد دونوں درخواستیں گہرائی سے ڈیٹا حاصل کرنے کے لئے تبادلوں کو بھیج دی گئیں۔
پھر کال کریںdepthARoutine
、depthBRoutine
اشیاءwait()
گہرائی سے ڈیٹا حاصل کرنے کا طریقہ۔
گہرائی کے اعداد و شمار تک رسائی حاصل کرنے کے بعد ، گہرائی کے اعداد و شمار کی جانچ پڑتال کی ضرورت ہوتی ہے تاکہ اس کی تاثیر کا اندازہ لگایا جاسکے۔ اعداد و شمار کی غیر معمولی صورتحال کے لئے عملدرآمد کو متحرک کریں۔continue
جملے کو دوبارہ چلانے کے لئے اہم سائیکل.
استعمال价差值
کیا آپ کو اس کی وضاحت کرنا چاہئے؟差价比例
پیرامیٹرز؟
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 کے پیرامیٹرز کسی پیرامیٹر پر مبنی ہوسکتے ہیں۔دکھائیںیاچھپا ہوااور پھر ہم ایک پیرامیٹر بنا سکتے ہیں جو فیصلہ کرے گا کہ کیا استعمال کرنا ہے.价格差
یا差价比例
。
حکمت عملی انٹرفیس پیرامیٹرز میں ایک پیرامیٹر شامل کیا گیا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 盘口条件满足
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("触发A->B:", depthA.Bids[0].Price - depthB.Asks[0].Price, price, amount, nowAccs[1].Balance / price, nowAccs[0].Stocks) // 提示信息
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 盘口条件满足
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("触发B->A:", depthB.Bids[0].Price - depthA.Asks[0].Price, price, amount, nowAccs[0].Balance / price, nowAccs[1].Stocks) // 提示信息
hedge(exA, exB, price, amount)
cancelAll()
lastKeepBalanceTS = 0
isTrade = true
}
}
اس کے علاوہ ، اس کے بارے میں مزید معلومات حاصل کرنے کے لئے یہاں کلک کریں۔
1، سب سے پہلے ہیجنگ فرق کو پورا کیا جاتا ہے، اور صرف اس وقت ہیجنگ کیا جا سکتا ہے جب اشاعت کا فرق مقررہ فرق پیرامیٹرز کو پورا کرتا ہے۔
2، ٹرانزیکشن ہیجنگ کی مقدار کو پیرامیٹر پر مقرر کردہ کم سے کم ہیجنگ کو پورا کرنا چاہئے، کیونکہ مختلف تبادلے کی حد میں کم سے کم کم مقدار مختلف ہوسکتی ہے، لہذا دونوں میں سے کم سے کم لے لو.
3، تجارت کرنے والے تبادلے میں اثاثے فروخت کرنے کے لئے کافی ہیں اور تجارت کرنے والے تبادلے میں اثاثے خریدنے کے لئے کافی ہیں۔
جب یہ شرائط پوری ہو جاتی ہیں تو ، ہیجنگ فنکشن کو انجام دینے کے لئے ہیجنگ کا حکم دیا جاتا ہے۔ ہم مرکزی فنکشن سے پہلے ایک متغیر کا اعلان کرتے ہیں۔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
0 پر ری سیٹ کرنے پر توازن کی کارروائی فوری طور پر شروع ہو جاتی ہے۔ توازن کی کامیابی کے بعد منافع کا حساب لگایا جاتا ہے۔
اسٹیٹس ٹیب کی معلومات
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",
"当前A,Stocks:", nowAccs[0].Stocks, "FrozenStocks:", nowAccs[0].FrozenStocks, "Balance:", nowAccs[0].Balance, "FrozenBalance", nowAccs[0].FrozenBalance, "\n",
"当前B,Stocks:", nowAccs[1].Stocks, "FrozenStocks:", nowAccs[1].FrozenStocks, "Balance:", nowAccs[1].Balance, "FrozenBalance", nowAccs[1].FrozenBalance, "\n",
"初始A,Stocks:", initAccs[0].Stocks, "FrozenStocks:", initAccs[0].FrozenStocks, "Balance:", initAccs[0].Balance, "FrozenBalance", initAccs[0].FrozenBalance, "\n",
"初始B,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
فنکشن کی آمدموجودہ کرنسی سے ہدف کرنسی کی شرح تبادلہ。مکمل حکمت عملی:مختلف کرنسیوں کی قیمتوں کا تعین کرنے کے لئے موجودہ ہیجنگ کی حکمت عملی (تعلیم)
سِکُوڑوس کی مہمان نوازی _ یوکرائن کا سِپاہیزبردست