Type/to search
8
Follow
1364
Followers
ڈیجیٹل کرنسی اسپاٹ ہیجنگ اسٹریٹجی ڈیزائن (2)
Original
Created 2021-07-30 16:36:48  Updated 2023-09-20 10:36:43
 5
 2731

img

ڈیجیٹل کرنسی اسپاٹ ہیجنگ اسٹریٹجی ڈیزائن (2)

پچھلے مضمون میں، ہم نے ہیجنگ کی ایک سادہ حکمت عملی کو نافذ کیا ہے، ہم اس حکمت عملی کو اپ گریڈ کرنے کا طریقہ سیکھیں گے۔
حکمت عملی میں تبدیلیاں بڑی نہیں ہوں گی لیکن تبدیلیوں کی تفصیلات پر توجہ کی ضرورت ہے۔ کوڈ میں کچھ حصوں کی تعریفیں پہلے سے بدل گئی ہیں اور انہیں سمجھنے کی ضرورت ہے۔

اس حکمت عملی کو اپ گریڈ کرنے کی ضرورت ہے۔

  • اسپاٹ ایکسچینج آبجیکٹ کے لیوریج موڈ کو سوئچ کریں۔
    یہ تبدیلی صرف حقیقی تجارت سے متعلق ہے۔ ایکسچینج آبجیکٹ کے لیے جو براہ راست FMZ اور سپورٹ اسپاٹ لیوریج پر انکیپسلیٹ کی گئی ہیں، آپ براہ راست موڈ کو سوئچ کر سکتے ہیں۔
  • اسپریڈ چارٹ ڈسپلے شامل کیا گیا۔
    اسپریڈ چارٹ ڈسپلے شامل کریں، کیونکہ صرف ڈراA交易所->B交易所B交易所->A交易所افقی لکیر کھینچیں جو پھیلنے کو متحرک کرتی ہے۔ ہم براہ راست استعمال کرتے ہیں۔画线类库فائدہ یہ ہے کہ یہ آسان اور استعمال میں آسان ہے یہاں ہم FMZ کو استعمال کرنے کا طریقہ بھی سیکھیں گے۔模版类库فنکشن
  • یک طرفہ ہیجنگ فنکشن
    یہ تبدیلی کافی اہم ہے کیونکہ مخصوص ہیجنگ ٹرانزیکشنز میں دو ایکسچینج کے درمیان قیمت کے فرق کو مکمل طور پر ریورس کرنا مشکل ہے۔ زیادہ تر وقت ایک ایکسچینج پر قیمت دوسرے ایکسچینج کی قیمت سے مسلسل زیادہ ہوتی ہے۔ اس وقت، اگر ہمارے تمام اثاثوں کو ہیج کیا گیا ہے (یعنی، سکے کم قیمت والے ایکسچینجز میں ہیں، اور پیسہ زیادہ قیمتوں والے ایکسچینج میں ہے)۔ ہیجنگ رک گئی ہے اور منافع کمانے کے لیے قیمتوں کے اتار چڑھاؤ پر انحصار کرنا اب ممکن نہیں رہا۔ اس وقت، حکمت عملی ایسی ہونی چاہیے کہ آپ سککوں کو ہیج کرنے کے لیے تھوڑی سی رقم کھو سکتے ہیں (سکوں کو زیادہ قیمت کے بدلے میں دوبارہ موجود رہنے دیں)، اور پھر قیمت میں فرق ہونے پر آپ ہیج کرنا اور منافع کما سکتے ہیں۔ دوبارہ بڑا ہو جاتا ہے.
  • انٹرایکٹو طریقے سے پیرامیٹرز میں ترمیم کریں جیسے ہیجنگ اسپریڈ لائنز
    حکمت عملی میں انٹرایکٹو فنکشنز شامل کریں، اور آپ ریئل ٹائم میں اسپریڈ ٹرگر لائن میں ترمیم کر سکتے ہیں۔
  • اسٹیٹس بار کی معلومات کو منظم کریں اور اسے ٹیبل کی شکل میں ڈسپلے کریں۔
    آسانی سے مشاہدے کے لیے ظاہر کیے جانے والے ڈیٹا کو منظم کریں۔

اگلا، آئیے ان ڈیزائنوں کو ایک ایک کرکے لاگو کرتے ہیں۔

اسپاٹ ایکسچینج آبجیکٹ کے لیوریج موڈ کو سوئچ کریں۔

بائننس اسپاٹ ٹریڈنگ کو بطور مثال لیتے ہوئے، کوڈ کا استعمال کرتے ہوئے اسپاٹ لیوریج موڈ پر جائیں۔exchanges[i].IO، پیرامیٹرز میں پاس کریں۔trade_normalلیوریجڈ پوزیشن بہ پوزیشن پر سوئچ کریں، اور پاس کریں۔trade_super_marginلیوریجڈ فل پوزیشن پر سوئچ کریں، بیک ٹیسٹنگ تعاون یافتہ نہیں ہے۔ یہ صرف حقیقی تجارت میں استعمال ہوتا ہے۔

موجودmainمندرجہ ذیل تیاری کے مرحلے کو فنکشن کے آغاز میں شامل کریں:

// 切换杠杆模式 for (var i = 0 ; i < exchanges.length ; i++) { // 遍历检测所有添加的交易所对象 if (exchanges[i].GetName() == "Binance" && marginType != 0) { // 如果当前i索引代表的交易所对象是币安现货,并且策略界面参数marginType选择的不是「普通币币」选项,执行切换 if (marginType == 1) { Log(exchanges[i].GetName(), "设置为杠杆逐仓") exchanges[i].IO("trade_normal") } else if (marginType == 2) { Log(exchanges[i].GetName(), "设置为杠杆全仓") exchanges[i].IO("trade_super_margin") } } }

یہاں کی حکمت عملی صرف بائنانس اسپاٹ کے لیے کوائن ٹو کوائن لیوریج موڈ کو سوئچ کرنے کے لیے کوڈ کا اضافہ کرتی ہے، اس لیے حکمت عملی کے پیرامیٹرز میں سیٹ کردہ سوئچ صرف بائنانس اسپاٹ کے لیے درست ہے۔

اسپریڈ چارٹ ڈسپلے شامل کیا گیا۔

پیکڈ ڈرائنگ ٹیمپلیٹس کو استعمال کرنا بہت آسان ہے۔ ہم جو ٹیمپلیٹ استعمال کرتے ہیں اس کا نام ہے۔画线类库. آپ اسے براہ راست FMZ پلیٹ فارم اسٹریٹجی اسکوائر پر تلاش اور حاصل کرسکتے ہیں۔

img

یا براہ راست لنک پر کلک کریں: https://www.fmz.com/strategy/27293 اس ٹیمپلیٹ کے کاپی پیج پر جانے کے لیے۔

img

اس ٹیمپلیٹ لائبریری کو اپنی حکمت عملی لائبریری میں کاپی کرنے کے لیے بٹن پر کلک کریں۔

img

پھر پالیسی میں ترمیم کے صفحے پر، آپ ٹیمپلیٹ لائبریری کو چیک کر سکتے ہیں جس کی آپ کو ٹیمپلیٹ کالم میں ضرورت ہے۔ باکس کو چیک کرنے اور پالیسی کو محفوظ کرنے کے بعد، یہ پالیسی اس ٹیمپلیٹ کا حوالہ دے گی۔ یہاں ہم ٹیمپلیٹ لائبریری کے استعمال کی مختصر وضاحت کرتے ہیں اس حکمت عملی نے پہلے ہی اس ٹیمپلیٹ کا حوالہ دیا ہے لہذا آپریشن کو دہرانے کی ضرورت نہیں ہے۔ اس حکمت عملی کو سٹریٹیجی اسکوائر میں کاپی کرنے کے بعد، آپ اسے حکمت عملی میں ترمیم کرنے والے صفحہ کے ٹیمپلیٹ کالم میں دیکھ سکتے ہیں۔画线类库پہلے ہی حوالہ دیا گیا ہے۔

ہم بنیادی طور پر استعمال کرنے کا طریقہ سیکھتے ہیں۔画线类库گراف کھینچنے کے لیے فنکشن۔

img

ہم منصوبہ بنا رہے ہیں۔A->Bقیمت کا فرق،B->Aقیمت کا فرق اور قیمت میں فرق ٹرگر لائن تیار کی گئی ہے۔ آپ کو دو منحنی خطوط کھینچنے کی ضرورت ہے (موجودہ قیمت کا فرق A سے B اور B سے A تک) اور دو افقی لائنیں (قیمت کے فرق کی لکیریں)، جیسا کہ اوپر کی تصویر میں دکھایا گیا ہے۔

کیونکہ ہمیں یکطرفہ ہیج ڈیزائن کرنے کی ضرورت ہے،A->BاورB->Aٹرگر لائن مختلف ہے۔ پچھلے مضمون کا ڈیزائن اب استعمال نہیں کیا جا سکتا۔
پچھلے مضمون میں:

var targetDiffPrice = hedgeDiffPrice if (diffAsPercentage) { targetDiffPrice = (depthA.Bids[0].Price + depthB.Asks[0].Price + depthB.Bids[0].Price + depthA.Asks[0].Price) / 4 * hedgeDiffPercentage }

صرف ایک محرک پھیلاؤ ہے۔targetDiffPrice
تو یہاں ہمیں کوڈ میں ترمیم کرنے کی ضرورت ہے، پہلے پیرامیٹرز میں ترمیم کریں۔

img

پھر کوڈ میں ترمیم کریں:

var targetDiffPriceA2B = hedgeDiffPriceA2B var targetDiffPriceB2A = hedgeDiffPriceB2A if (diffAsPercentage) { targetDiffPriceA2B = (depthA.Bids[0].Price + depthB.Asks[0].Price + depthB.Bids[0].Price + depthA.Asks[0].Price) / 4 * hedgeDiffPercentageA2B targetDiffPriceB2A = (depthA.Bids[0].Price + depthB.Asks[0].Price + depthB.Bids[0].Price + depthA.Asks[0].Price) / 4 * hedgeDiffPercentageB2A }

اس طرح، قیمت کے فرق کی محرک لائن پچھلی سے بدل جاتی ہے۔targetDiffPriceایک، دو ہو گئے۔targetDiffPriceA2BtargetDiffPriceB2A
اس کے بعد، آپ اس ڈیٹا کو چارٹ پر کھینچنے کے لیے لائن ڈرائنگ لائبریری کے لائن ڈرائنگ فنکشن کا استعمال کر سکتے ہیں۔

// 画图 $.PlotHLine(targetDiffPriceA2B, "A->B") // 该函数第一个参数是水平线在Y轴方向上的值,第二个参数是显示文本 $.PlotHLine(targetDiffPriceB2A, "B->A")

جب حکمت عملی چل رہی ہو گی تو اس طرح کا چارٹ ظاہر ہوگا۔

img

اگلا، اوور ڈرائنگ سے بچنے کے لیے ریئل ٹائم اسپریڈ وکر کھینچیں۔ بیلنس چیک میں ریئل ٹائم قیمت کے فرق کے اعداد و شمار کے منحنی خطوط کے لیے کوڈ ڈالیں۔

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 } } $.PlotLine("A2B", depthA.Bids[0].Price - depthB.Asks[0].Price) // 画实时差价曲线 $.PlotLine("B2A", depthB.Bids[0].Price - depthA.Asks[0].Price) // 第一个参数是曲线名称,第二个参数是曲线当前时刻的值,即当前时刻Y轴方向上的值 }

اس طرح، ڈرائنگ کوڈ کی صرف 4 لائنوں کے ساتھ، حکمت عملی چلتے وقت چارٹ دکھا سکتی ہے۔

یک طرفہ ہیجنگ فنکشن

جیسا کہ اوپر ذکر کیا گیا ہے، قیمت کے فرق کو ٹرگر لائن دو میں تبدیل کر دیا گیا ہے، کنٹرولنگA->Bہیج ٹرگرB->Aہیج کو متحرک کیا جاتا ہے۔ اس طرح، پچھلے آرڈر کی قیمت کا الگورتھم استعمال نہیں کیا جا سکتا، اور اس کی بجائے مارکیٹ پرائس پلس سلپج کا طریقہ استعمال کیا جاتا ہے۔

if (depthA.Bids[0].Price - depthB.Asks[0].Price > targetDiffPriceA2B && Math.min(depthA.Bids[0].Amount, depthB.Asks[0].Amount) >= minHedgeAmount) { // A -> B 盘口条件满足 var priceSell = depthA.Bids[0].Price - slidePrice var priceBuy = depthB.Asks[0].Price + slidePrice var amount = Math.min(depthA.Bids[0].Amount, depthB.Asks[0].Amount) if (nowAccs[0].Stocks > minHedgeAmount && nowAccs[1].Balance * 0.8 / priceSell > minHedgeAmount) { amount = Math.min(amount, nowAccs[0].Stocks, nowAccs[1].Balance * 0.8 / priceSell, maxHedgeAmount) Log("触发A->B:", depthA.Bids[0].Price - depthB.Asks[0].Price, priceBuy, priceSell, amount, nowAccs[1].Balance * 0.8 / priceSell, nowAccs[0].Stocks) // 提示信息 hedge(exB, exA, priceBuy, priceSell, amount) cancelAll() lastKeepBalanceTS = 0 isTrade = true } } else if (depthB.Bids[0].Price - depthA.Asks[0].Price > targetDiffPriceB2A && Math.min(depthB.Bids[0].Amount, depthA.Asks[0].Amount) >= minHedgeAmount) { // B -> A 盘口条件满足 var priceBuy = depthA.Asks[0].Price + slidePrice var priceSell = depthB.Bids[0].Price - slidePrice var amount = Math.min(depthB.Bids[0].Amount, depthA.Asks[0].Amount) if (nowAccs[1].Stocks > minHedgeAmount && nowAccs[0].Balance * 0.8 / priceBuy > minHedgeAmount) { amount = Math.min(amount, nowAccs[1].Stocks, nowAccs[0].Balance * 0.8 / priceBuy, maxHedgeAmount) Log("触发B->A:", depthB.Bids[0].Price - depthA.Asks[0].Price, priceBuy, priceSell, amount, nowAccs[0].Balance * 0.8 / priceBuy, nowAccs[1].Stocks) // 提示信息 hedge(exA, exB, priceBuy, priceSell, amount) cancelAll() lastKeepBalanceTS = 0 isTrade = true } }

چونکہ خرید و فروخت کی قیمتوں کو دو اعداد و شمار میں الگ کیا جاتا ہے، ہیجنگ فنکشنhedgeاس میں بھی ترمیم کی ضرورت ہے۔

function hedge(buyEx, sellEx, priceBuy, priceSell, amount) { var buyRoutine = buyEx.Go("Buy", priceBuy, amount) var sellRoutine = sellEx.Go("Sell", priceSell, amount) Sleep(500) buyRoutine.wait() sellRoutine.wait() }

ان تبدیلیوں کی بنیاد پر کچھ معمولی ایڈجسٹمنٹ بھی ہیں، جن میں میں یہاں نہیں جاؤں گا آپ تفصیلات کے لیے کوڈ کو دیکھ سکتے ہیں۔

انٹرایکٹو طریقے سے پیرامیٹرز میں ترمیم کریں جیسے ہیجنگ اسپریڈ لائنز

حکمت عملی میں تعاملات شامل کریں تاکہ حکمت عملی حقیقی وقت میں اسپریڈ ٹرگر لائن میں ترمیم کر سکے۔ یہ نیم خودکار حکمت عملی کے لیے ڈیزائن کی ضرورت ہے، جسے یہاں تدریسی مظاہرے کے طور پر بھی نافذ کیا جاتا ہے۔
حکمت عملی کے تعامل کا ڈیزائن بھی بہت آسان ہے، سب سے پہلے حکمت عملی میں ترمیم کرنے والے صفحہ پر انٹرایکٹو کنٹرولز شامل کریں۔

img

دو کنٹرولز شامل کیے گئے ہیں، ایک کو A2B اور دوسرے کو B2A کہا جاتا ہے۔ کنٹرول ان پٹ باکس میں قدر داخل کرنے کے بعد، ان پٹ باکس کے دائیں جانب بٹن پر کلک کریں۔ حکمت عملی کو فوری طور پر ایک ہدایت بھیجی جائے گی، مثال کے طور پر: ان پٹ باکس میں ایک قدر درج کریں۔123، کلک کریں۔A2Bیہ بٹن فوری طور پر حکمت عملی کو ہدایات بھیجے گا۔

A2B:123

حکمت عملی کوڈ میں تعامل کا پتہ لگانے اور پروسیسنگ کوڈ ڈیزائن کریں۔

// 交互 var cmd = GetCommand() // 每次循环执行到这里时,都检测有没有交互指令过来,没有则返回空字符串 if (cmd) { // 检测到有交互指令,例如:A2B:123 Log("接收到命令:", cmd) var arr = cmd.split(":") // 拆分出交互控件名称和输入框中的值,arr[0]就是A2B,arr[1]就是123 if (arr[0] == "A2B") { // 判断触发的交互控件是不是A2B Log("修改A2B的参数,", diffAsPercentage ? "参数为差价百分比" : "参数为差价:", arr[1]) if (diffAsPercentage) { hedgeDiffPercentageB2A = parseFloat(arr[1]) // 修改触发差价线 } else { hedgeDiffPriceA2B = parseFloat(arr[1]) // 修改触发差价线 } } else if (arr[0] == "B2A") { // 检测到触发的控件是B2A Log("修改B2A的参数,", diffAsPercentage ? "参数为差价百分比" : "参数为差价:", arr[1]) if (diffAsPercentage) { hedgeDiffPercentageA2B = parseFloat(arr[1]) } else { hedgeDiffPriceB2A = parseFloat(arr[1]) } } }

اسٹیٹس بار کی معلومات کو منظم کریں اور اسے ٹیبل کی شکل میں ڈسپلے کریں۔

اسٹیٹس بار کے ڈیٹا کو مزید منظم اور مشاہدہ کرنے میں آسان بنائیں۔

var tbl = { "type" : "table", "title" : "数据", "cols" : ["交易所", "币", "冻结币", "计价币", "冻结计价币", "触发差价", "当前差价"], "rows" : [], } tbl.rows.push(["A:" + exA.GetName(), nowAccs[0].Stocks, nowAccs[0].FrozenStocks, nowAccs[0].Balance, nowAccs[0].FrozenBalance, "A->B:" + targetDiffPriceA2B, "A->B:" + (depthA.Bids[0].Price - depthB.Asks[0].Price)]) tbl.rows.push(["B:" + exB.GetName(), nowAccs[1].Stocks, nowAccs[1].FrozenStocks, nowAccs[1].Balance, nowAccs[1].FrozenBalance, "B->A:" + targetDiffPriceB2A, "B->A:" + (depthB.Bids[0].Price - depthA.Asks[0].Price)]) LogStatus(_D(), "\n", "`" + JSON.stringify(tbl) + "`")

img

بیک ٹیسٹنگ

بیک ٹیسٹنگ صرف حکمت عملی کا ایک امتحان ہے اور فنکشنز کا ابتدائی پتہ لگانا دراصل بیک ٹیسٹنگ مرحلے کے دوران جانچا جا سکتا ہے۔ پس پردہ نتائج پر زیادہ توجہ دینے کی ضرورت نہیں ہے حتمی حکمت عملی کو ابھی بھی حقیقی ماحول میں جانچنے کی ضرورت ہے۔

img

img

حکمت عملی کا ماخذ کوڈ: https://www.fmz.com/strategy/302834

Related Recommendations
Comment
All comments (5)

    这个交易策略加入 合约功能 就好了 就是把永续合约 交割合约 都加进去

    4 years ago

    好的,有机会出个教程。

    4 years ago

    梦大,回测提示 main:127:9 - TypeError: Cannot read property 'SetPrecision' of undefined
    【不同计价币的现货对冲策略 Ver1.1】

    5 years ago

    要添加两个交易所对象。

    5 years ago

    明白了,谢谢梦大。

    5 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)