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

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

مصنف:FMZ~Lydia, تخلیق: 2022-08-16 10:30:56, تازہ کاری: 2023-09-19 21:46:16

img

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

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

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

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

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

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

  • ہیج کا فرق:hedgeDiffPrice، جب فرق اس قدر سے تجاوز کرتا ہے تو ہیجنگ آپریشن شروع ہوتا ہے۔
  • کم از کم ہیجنگ کی رقم:minHedgeAmount، کم سے کم آرڈر کی رقم (سکے) جو ہیج کی جا سکتی ہے۔
  • زیادہ سے زیادہ ہیجنگ کی رقم:maxHedgeAmount، ایک ہیجنگ کے لئے زیادہ سے زیادہ آرڈر کی رقم (سکے) ۔
  • A کی قیمت کی درستگی:pricePrecisionA، ایکسچینج اے کی طرف سے رکھے گئے آرڈر کی قیمت کی درستگی (عشری مقامات کی تعداد) ۔
  • A کی مقدار کی درستگی:amountPrecisionA، ایکسچینج اے کے ذریعہ دیئے گئے آرڈر کی رقم کی درستگی (عشری مقامات کی تعداد) ۔
  • بی کی قیمت کی درستگی: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 the currency difference
        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("unable to balance")            
            } else {
                // balance order
                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("errors:", "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]
    

    اس سے بعد میں کوڈ لکھنا آسان ہو جاتا ہے۔

  • زر مبادلہ کی شرح، صحت سے متعلق ڈیزائن

      // precision, exchange rate settings
      if (rateA != 1) {
          // set exchange rate A
          exA.SetRate(rateA)
          Log("Exchange A sets the exchange rate:", rateA, "#FF0000")
      }
      if (rateB != 1) {
          // set exchange rate B
          exB.SetRate(rateB)
          Log("Exchange B sets the exchange rate:", rateB, "#FF0000")
      }
      exA.SetPrecision(pricePrecisionA, amountPrecisionA)
      exB.SetPrecision(pricePrecisionB, amountPrecisionB)
    

    اگر زر مبادلہ کی شرح پیرامیٹرزrateA, rateB1 پر مقرر ہیں (ڈیفالٹ 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 دستاویزات دیکھیں: [لنک](https://www.fmz.com/api#_gk-v)) ، اگر سوال کام نہیں کرتا ہے تو، موجودہ اکاؤنٹ کی معلومات کا استعمال کرتے ہوئے قدر تفویض کریں اور_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اہم لوپ دوبارہ چلانے کے لئے بیان کو متحرک کیا جاتا ہے.

  • استعمال کریںspread valueپیرامیٹر یا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 conditions are met            
              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("trigger A->B:", depthA.Bids[0].Price - depthB.Asks[0].Price, price, amount, nowAccs[1].Balance / price, nowAccs[0].Stocks)  // Tips
                  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 conditions are met
              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("trigger B->A:", depthB.Bids[0].Price - depthA.Asks[0].Price, price, amount, nowAccs[0].Balance / price, nowAccs[1].Stocks)  // Tips
                  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", 
              "current A, Stocks:", nowAccs[0].Stocks, "FrozenStocks:", nowAccs[0].FrozenStocks, "Balance:", nowAccs[0].Balance, "FrozenBalance", nowAccs[0].FrozenBalance, "\n", 
              "current B, Stocks:", nowAccs[1].Stocks, "FrozenStocks:", nowAccs[1].FrozenStocks, "Balance:", nowAccs[1].Balance, "FrozenBalance", nowAccs[1].FrozenBalance, "\n", 
              "initial A, Stocks:", initAccs[0].Stocks, "FrozenStocks:", initAccs[0].FrozenStocks, "Balance:", initAccs[0].Balance, "FrozenBalance", initAccs[0].FrozenBalance, "\n", 
              "initial 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 function.

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


متعلقہ

مزید