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

کریپٹوکرنسی اسپاٹ ہیجنگ حکمت عملی (1)

مصنف:نینا باداس, تخلیق: 2022-04-14 11:57:46, تازہ کاری: 2022-04-14 16:32:56

کریپٹوکرنسی اسپاٹ ہیجنگ حکمت عملی (1)

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

حکمت عملی کی ضرورت کے مطابق ڈیزائن افعال اور پیرامیٹرز

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

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

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

  • ہیج اسپریڈ:hedgeDiffPriceجب پھیلاؤ قیمت سے زیادہ ہو جائے گا تو ایک ہیجنگ شروع ہو جائے گا.
  • کم از کم ہیجنگ کی رقم:minHedgeAmount، ایک ہیج کے لئے دستیاب کم سے کم آرڈر کی رقم (علامت کی رقم) ۔
  • زیادہ سے زیادہ ہیجنگ کی رقم:maxHedgeAmount، ایک ہیج کے لئے دستیاب زیادہ سے زیادہ آرڈر کی رقم (علامت کی رقم) ۔
  • قیمت کی درستگی A:pricePrecisionA، پلیٹ فارم اے کی آرڈر کی قیمت کی درستگی (عشری ہندسوں) ۔
  • آرڈر کی مقدار کی درستگی A:amountPrecisionA، پلیٹ فارم A کے آرڈر کی رقم کی درستگی (عشری ہندسوں)
  • قیمت کی درستگی B:pricePrecisionB، پلیٹ فارم بی کی آرڈر کی قیمت کی درستگی (عشری ہندسوں) ۔
  • آرڈر کی مقدار کی درستگی B:amountPrecisionB، پلیٹ فارم بی کے آرڈر کی رقم کی درستگی (عشری ہندسوں)
  • زر مبادلہ کی شرح 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
        // 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کا مطلب یہ ہے کہ اس کا استعمال نہیں کیا گیا ہے، اور اس کی شرح تبادلہ تبدیل نہیں کی جا سکتی۔

  • تمام تاریخوں کو ری سیٹ کریں

    img

    کبھی کبھی، یہ ضروری ہے کہ تمام نوشتہ جات کو حذف کریں اور ڈیٹا ریکارڈز کو ویکیوم کریں جب حکمت عملی شروع کی جائے۔ آپ حکمت عملی انٹرفیس پیرامیٹر ڈیزائن کرسکتے ہیں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()فنکشن کو بحال کرنے کے لئے ( _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.GoFMZ پلیٹ فارم کے متوازی اشیاء تخلیق کرنے کے لئے استعمال کیا جاتا ہے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.

    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 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 
              }            
          }
    

    ہیجنگ کے لئے کئی ٹرگر شرائط ہیں: 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 
                  }                
              }            
          }
    

    یہ دیکھا جا سکتا ہے کہ توازن تقریب کو باقاعدگی سے عملدرآمد کیا جاتا ہے، لیکن اگر توازن کی تقریب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.

مکمل حکمت عملی:مختلف کوٹیشن کرنسی کی اسپاٹ ہیجنگ حکمت عملی (تعلیم)


مزید