وسائل لوڈ ہو رہے ہیں... لوڈنگ...

ڈیجیٹل کرنسیوں کے لئے فوری طور پر ہیجنگ کی حکمت عملی کا ڈیزائن (2)

مصنف:ایجاد کاروں کی مقدار - خواب, تخلیق: 2021-07-30 16:36:48, تازہ کاری: 2023-09-20 10:36:43

img

ڈیجیٹل کرنسیوں کے لئے فوری طور پر ہیجنگ کی حکمت عملی کا ڈیزائن (2)

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

اس حکمت عملی کو بہتر بنانے کی ضرورت

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

اس کے بعد آئیے ان ڈیزائنوں کو ایک ایک کرکے لاگو کرتے ہیں۔

فوری طور پر تبادلہ کرنے والے اشیاء کے لئے لیورجنگ ماڈل

کرنسی کی نقد رقم کی حقیقی ڈسک کی مثال کے طور پر، نقد رقم کے لیورج موڈ میں تبدیل کرنے کے لئے کوڈ کا استعمال کرتے ہوئے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")
            }
        }
    }

یہاں کی حکمت عملی میں صرف کرنسی کی کرنسی کے لیول کوڈ کو شامل کیا گیا ہے ، لہذا حکمت عملی کے پیرامیٹرز پر سوئچ کرنا صرف کرنسی کی کرنسی پر لاگو ہوتا ہے۔

بڑھتی ہوئی قیمتوں کا چارٹ دکھاتا ہے

یہ بہت آسان ہے کہ آپ پہلے سے ہی پیکڈ پینٹنگ ٹیمپلیٹ استعمال کریں۔ ہم اس ٹیمپلیٹ کا نام استعمال کرتے ہیں画线类库اس کے علاوہ ، آپ کو اپنے پیغامات کو ایف ایم زیڈ پلیٹ فارم پر تلاش کرنے کی ضرورت ہے۔

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轴方向上的值
        }

اس طرح گراف کوڈ کی صرف چار لائنیں ہیں، اس طرح حکمت عملی چلتی ہے جب گراف ظاہر ہوتا ہے.

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

اس مضمون میں ذکر کیا گیا ہے کہ قیمتوں میں فرق کی ٹرگر لائن کو دو لائنوں میں تبدیل کر دیا گیا ہے ، جن میں سے ہر ایک کو کنٹرول کیا گیا ہے۔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

دوبارہ جانچ پڑتال

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

img

img

اسٹریٹجی کا ماخذ:https://www.fmz.com/strategy/302834


متعلقہ

مزید

15570686905یہ تجارت کی حکمت عملی ہے، اور یہ معاہدے کی خصوصیات کو شامل کرتا ہے، اور یہ اچھا ہے کہ آپ مستقل معاہدے اور سودے کی شرح کے معاہدوں کو شامل کرتے ہیں.

ہلکے بادلاہم: 127:9 - TypeError: Cannot read property 'SetPrecision of undefined' (ٹائپ ایرر: undefined کی سیٹ پریسیشن پراپرٹی نہیں پڑھ سکتا) مختلف کرنسیوں کے لئے فوری طور پر ہیجنگ کی حکمت عملی Ver1.1

ایجاد کاروں کی مقدار - خواباچھا، ایک سبق دینے کا موقع ہے۔

ہلکے بادلمیں سمجھ گیا، شکریہ ڈریم۔

ایجاد کاروں کی مقدار - خوابدو ایکسچینج آبجیکٹ شامل کرنے کی ضرورت ہے۔