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

مصنف:چھوٹا سا خواب, تخلیق: 2021-07-19 17:38:24, تازہ کاری: 2023-09-20 10:35:16

img

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

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

پالیسی کی ضروریات کے مطابق کچھ افعال، پالیسی انٹرفیس پیرامیٹرز ڈیزائن کریں

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

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

ان خیالات کی بنیاد پر ، حکمت عملی کو کئی پیرامیٹرز ڈیزائن کرنے کی ضرورت ہے۔

  • ہیجنگ کی قیمت:hedgeDiffPrice، جب قیمت اس قدر سے زیادہ ہو تو ، ہیجنگ آپریشن کو متحرک کریں۔
  • کم سے کم ہیجنگ:minHedgeAmountاس کے علاوہ ، آپ کو اس بات کا یقین کرنے کی ضرورت نہیں ہے کہ آپ کو اس کے بارے میں کیا سوچنا ہے۔
  • زیادہ سے زیادہ ہیجنگ:maxHedgeAmount، ایک ہی وقت میں زیادہ سے زیادہ کم سے کم رقم ((کوئن کی تعداد) ◄
  • A: قیمت کی درستگی:pricePrecisionA، A ایکسچینج میں آرڈر کی قیمت کی درستگی ((چھوٹے ہندسوں میں) ‖
  • A مندرجہ ذیل مقدار کی درستگی:amountPrecisionA، A ایکسچینج میں کم مقدار کی درستگی ((چھوٹے ہندسوں کی تعداد) ‖
  • بی قیمت کی درستگی:pricePrecisionBایکسچینج بی میں آرڈر کی قیمتوں کی درستگی (بچوں کی تعداد) ۔
  • B: ایک ہی مقدار کی درستگی:amountPrecisionB، B ایکسچینج میں کم یونٹ کی درستگی ((چھوٹے ہندسوں کی تعداد) ‖
  • A ایکسچینج کی شرح:rateA، پہلے شامل کردہ ایکسچینج آبجیکٹ کی شرح تبادلہ ، پہلے سے طے شدہ 1 تبدیل نہیں ہوتا ہے۔
  • B ایکسچینج کی شرح:rateB، دوسری شامل کردہ ایکسچینج آبجیکٹ کی شرح تبادلہ ، پہلے سے طے شدہ 1 تبدیل نہیں ہوتی ہے۔

ہیجنگ کی حکمت عملی میں دو اکاؤنٹس کی کرنسیوں کی تعداد کو ہمیشہ برقرار رکھنے کی ضرورت ہوتی ہے (یعنی کسی بھی سمت کی پوزیشن نہیں رکھتے ، غیر جانبدار رہتے ہیں) ، لہذا اس حکمت عملی میں توازن کی منطق کی ضرورت ہوتی ہے جو ہمیشہ توازن کا پتہ لگاتی ہے۔ توازن کا پتہ لگانے کے لئے ، ہم دونوں تبادلے کے اثاثوں کے اعداد و شمار کو حاصل کرنے سے گریز نہیں کرسکتے ہیں۔ ہمیں اس کے استعمال کے لئے ایک فنکشن لکھنے کی ضرورت ہے۔

  • اپ ڈیٹAccs
    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)
                }
            }
        })
    }
    

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

  • حاصل کریںDepthPrice
    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)
    

    اگر کرنسی کی شرح کے پیرامیٹرزrateArateB1 کے طور پر مقرر کیا گیا ہے ((مقرر کردہ ہے 1) ، یعنیrateA != 1یاrateB != 1اس کے علاوہ ، آپ کو اس کے بارے میں مزید جاننے کی ضرورت ہے۔

  • تمام اعداد و شمار کو دوبارہ ترتیب دیں

    img

    بعض اوقات پالیسی شروع ہونے پر تمام لاگ ان ، خالی ریکارڈ ڈیٹا کو حذف کرنے کی ضرورت ہوتی ہے۔ آپ پالیسی انٹرفیس پیرامیٹرز ڈیزائن کرسکتے ہیں۔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()انٹرفیس کے متوازی اشیاءdepthARoutinedepthBRoutine◎ جب یہ دو متوازی اشیاء تخلیق کی جاتی ہیں تو ، کال کریںGetDepth()اس کے بعد ، ایک بار پھر ، ایک انٹرفیس کا آغاز ہوا ، جس کے بعد دونوں درخواستیں گہرائی سے ڈیٹا حاصل کرنے کے لئے تبادلوں کو بھیج دی گئیں۔ پھر کال کریںdepthARoutinedepthBRoutineاشیاء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 کے پیرامیٹرز کسی پیرامیٹر پر مبنی ہوسکتے ہیں۔دکھائیںیاچھپا ہوااور پھر ہم ایک پیرامیٹر بنا سکتے ہیں جو فیصلہ کرے گا کہ کیا استعمال کرنا ہے.价格差یا差价比例

    img

    حکمت عملی انٹرفیس پیرامیٹرز میں ایک پیرامیٹر شامل کیا گیا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اور عالمی متغیرات کو دوبارہ ترتیب دیں.lastKeepBalanceTS0 (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 
                  }                
              }            
          }
    

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

  • اسٹیٹس ٹیب کی معلومات

          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فنکشن کی آمدموجودہ کرنسی سے ہدف کرنسی کی شرح تبادلہ

مکمل حکمت عملی:مختلف کرنسیوں کی قیمتوں کا تعین کرنے کے لئے موجودہ ہیجنگ کی حکمت عملی (تعلیم)


متعلقہ

مزید

سِکُوڑوس کی مہمان نوازی _ یوکرائن کا سِپاہیزبردست