ডিজিটাল মুদ্রার জন্য স্থগিতাদেশের কৌশল ডিজাইন করা ((1)

লেখক:ছোট্ট স্বপ্ন, তৈরিঃ 2021-07-19 17:38:24, আপডেটঃ 2023-09-20 10:35:16

img

ডিজিটাল মুদ্রার জন্য স্থগিতাদেশের কৌশল ডিজাইন করা ((1)

এই নিবন্ধটি একটি সহজ কিন্তু বাস্তবসম্মত ডিজিটাল মুদ্রা হেক্সিং কৌশল বাস্তবায়ন করে, আশা করি নতুনদের কিছু নকশা অভিজ্ঞতা শিখতে হবে।

নীতিগত চাহিদার উপর ভিত্তি করে কিছু ফাংশন, নীতিগত ইন্টারফেস পরামিতি ডিজাইন করুন

প্রথমত, এটা পরিষ্কার করা যে, আমরা যে কৌশলটি তৈরি করতে যাচ্ছি তা হল ডিজিটাল মুদ্রার জন্য একটি বর্তমান হ্যাকিং কৌশল। আমরা সবচেয়ে সহজ হ্যাকিং ডিজাইন করেছি, যেখানে শুধুমাত্র দুটি বর্তমান এক্সচেঞ্জের মধ্যে উচ্চ মূল্যের এক্সচেঞ্জ বিক্রি হয় এবং কম দামের এক্সচেঞ্জটি কেনা হয়। যখন উচ্চ মূল্যের এক্সচেঞ্জগুলি সবই মূল্যবান হয় (কারণ উচ্চ মূল্যের মুদ্রা বিক্রি হয়) এবং কম দামের এক্সচেঞ্জগুলি সবই মুদ্রা হয় (কারণ কম দামের মুদ্রা কেনা হয়) তখন আমরা হ্যাকিং করতে পারি না।

হিজিংয়ের সময় অর্ডার দেওয়ার দাম, পরিমাণ, এক্সচেঞ্জের মধ্যে নির্ভুলতার সীমাবদ্ধতা রয়েছে এবং সর্বনিম্ন অর্ডার পরিমাণের সীমাবদ্ধতা রয়েছে। সর্বনিম্ন সীমাবদ্ধতা ছাড়াও, হিজিংয়ের কৌশলটি হ'ল হজিংয়ের সময় সর্বাধিক অর্ডার পরিমাণ বিবেচনা করা, খুব বড় পরিমাণে অর্ডার করার জন্য পর্যাপ্ত পরিমাণও থাকবে না। এছাড়াও বিবেচনা করা দরকার যে যদি দুটি ট্রেডিংয়ের মূল্যের মুদ্রা আলাদা হয় তবে কীভাবে বিনিময় হার রূপান্তর করা যায়। হিজিংয়ের সময় পরিচালনা ফি, একক পয়েন্ট খাওয়া হ'ল স্লিপ ট্রেডিংয়ের ব্যয়, এবং যতক্ষণ না কোনও পার্থক্য রয়েছে তা হিজিং করা যায় না, তাই হিজিংয়ের পার্থক্যেরও একটি ট্রিগার রয়েছে, একটি নির্দিষ্ট ব্যবধানের নীচে হ্রাস হ'ল ক্ষতি।

এই সমস্ত বিবেচনার ভিত্তিতে, কৌশলটি বেশ কয়েকটি পরামিতি ডিজাইন করতে হবেঃ

  • হেফাজত মূল্যঃhedgeDiffPrice, যখন দাম এই মান অতিক্রম করে, তখন হেজিং অপারেশনটি শুরু হয়।
  • ন্যূনতম হেজিংঃminHedgeAmount, হেকিংয়ের সর্বনিম্ন পরিমাণ (মুদ্রার সংখ্যা) ।
  • সর্বাধিক হেজিংঃmaxHedgeAmount, একটি হেজিংয়ের সর্বোচ্চ নিম্ন একক পরিমাণ ((কয়েন সংখ্যা) ।
  • A মূল্যের সঠিকতাঃpricePrecisionAA এক্সচেঞ্জের অর্ডার মূল্যের সঠিকতা (অল্প সংখ্যক সংখ্যা) ।
  • A নিম্নলিখিত একক পরিমাপের সঠিকতাঃamountPrecisionAA এক্সচেঞ্জের নিম্নতম একক পরিমাণের নির্ভুলতা (অল্প সংখ্যার সংখ্যা) ।
  • বি মূল্যের সঠিকতাঃpricePrecisionBবি এক্সচেঞ্জের অর্ডারের দামের সঠিকতা (খুব ছোট সংখ্যা) ।
  • B নিম্নলিখিত একক পরিমাণের সঠিকতাঃamountPrecisionB, বি এক্সচেঞ্জের নিম্ন একক পরিমাণের নির্ভুলতা (খুব কম সংখ্যার সংখ্যা) ।
  • A বিনিময় হারঃrateA, প্রথম যোগ করা এক্সচেঞ্জ অবজেক্টের বিনিময় হার রূপান্তর, ডিফল্ট 1 রূপান্তর করা হয় না.
  • বি বিনিময় হারঃ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)
                }
            }
        })
    }
    

মুদ্রা সংখ্যা সমতুল্য করার সময়, আমাদের একটি গভীরতার ডেটাতে একটি নির্দিষ্ট মুদ্রা সংখ্যার সাথে সামঞ্জস্যপূর্ণ দাম খুঁজে বের করতে হবে, তাই এটির জন্য একটি ফাংশন প্রয়োজন।

  • getDepthPrice
    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()
    }
    

অবশেষে, আমরা ভারসাম্য ফাংশনের নকশা শেষ করেছি, যা কিছুটা জটিল।

  • keepBalance ভারসাম্য বজায় রাখুন
    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)
    

    যদি বিনিময় হারrateArateBযদি 1 সেট করা হয় (ডিফল্ট হল 1), অর্থাৎrateA != 1অথবাrateB != 1এই ভিডিওতে, আপনি আপনার অ্যাকাউন্টের জন্য একটি নতুন অ্যাকাউন্ট খুলতে পারেন।

  • সমস্ত তথ্য পুনরায় সেট করুন

    img

    কখনও কখনও নীতি শুরু করার সময় সমস্ত লগ মুছে ফেলা প্রয়োজন। আপনি একটি নীতি ইন্টারফেস পরামিতি ডিজাইন করতে পারেন।isReset, তারপর নীতিতে ইনস্টল করা অংশগুলি পুনরায় ডিজাইন করুন, যেমনঃ

      if (isReset) {   // 当isReset为真时重置数据
          _G(null)
          LogReset(1)
          LogProfitReset()
          LogVacuum()
          Log("重置所有数据", "#FF0000")
      }
    
  • প্রাথমিক অ্যাকাউন্টের ডেটা পুনরুদ্ধার করুন, বর্তমান অ্যাকাউন্টের ডেটা আপডেট করুন ভারসাম্য নির্ধারণের জন্য, কৌশলটি মূল অ্যাকাউন্টের সম্পদগুলির বর্তমানের তুলনায় ব্যবহারের জন্য একটি চলমান রেকর্ডিং প্রয়োজন।nowAccsএই ভেরিয়েবলটি বর্তমান অ্যাকাউন্টের ডেটা রেকর্ড করার জন্য ব্যবহৃত হয়, আমরা যে ফাংশনটি তৈরি করেছি তা ব্যবহার করে।updateAccsবর্তমান এক্সচেঞ্জের অ্যাকাউন্টের তথ্য পান।initAccsপ্রথম অ্যাকাউন্টের অবস্থা (এক্সচেঞ্জ এ এবং এক্সচেঞ্জ বি এর মুদ্রার সংখ্যা, মুদ্রার মূল্য নির্ধারণের সংখ্যা ইত্যাদির তথ্য) রেকর্ড করার জন্য ব্যবহৃত হয়।initAccsপ্রথম ব্যবহার_G()ফাংশন পুনরুদ্ধার ((_G ফাংশনটি স্থায়ীভাবে ডেটা রেকর্ড করে এবং রেকর্ড করা ডেটা পুনরুদ্ধার করতে পারে, বিশেষত এপিআই ডকুমেন্টেশন দেখুনঃলিঙ্ক), যদি অনুসন্ধান না পাওয়া যায় তবে বর্তমান অ্যাকাউন্টের তথ্য দিয়ে বরাদ্দ করুন এবং ব্যবহার করুন_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 
              }            
          }
    

    এই হেক্সিংয়ের কয়েকটি কারণ রয়েছেঃ ১, প্রথমে হার্ডিংয়ের পার্থক্য পূরণ করা হয়, শুধুমাত্র যখন অ্যাকাউন্টের পার্থক্য সেট করা পার্থক্যের পরামিতি পূরণ করে তখনই হার্ডিং করা যায়; ২। ট্রেডিংয়ের জন্য হার্ডিংয়ের পরিমাণটি প্যারামিটারে সেট করা সর্বনিম্ন হার্ডিংয়ের সাথে মিলিত হতে হবে, কারণ বিভিন্ন এক্সচেঞ্জের মধ্যে সর্বনিম্ন হার্ডিংয়ের পরিমাণের সীমাবদ্ধতা আলাদা হতে পারে, তাই উভয়ই সর্বনিম্নটি নেওয়া উচিত। ৩। যে এক্সচেঞ্জে অপারেশন বিক্রি করা হয় সেখানে সম্পদ বিক্রি করা হয় এবং যে এক্সচেঞ্জে অপারেশন কেনা হয় সেখানে সম্পদ কেনা হয়। এই শর্তগুলি পূরণ হলে, হেজিং ফাংশনটি কার্যকর করা হয়। আমরা মূল ফাংশনের আগে একটি ভেরিয়েবল ঘোষণা করি।isTradeহেক্সিং হয়েছে কিনা তা চিহ্নিত করার জন্য, এখানে যদি হেক্সিং ট্রিগার হয় তবে এই ভেরিয়েবলটি সেট করুনtrueএবং গ্লোবাল ভেরিয়েবল রিসেট করুনlastKeepBalanceTS০ (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", 
              "当前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ফাংশন প্রেরণবর্তমান মুদ্রা থেকে লক্ষ্য মুদ্রার বিনিময় হার

পুরো কৌশলঃবিভিন্ন মুদ্রার মূল্য নির্ধারণের জন্য হেকিং কৌশল (পাঠ্য)


সম্পর্কিত

আরো

সিকিউরিটস ওয়ারহোস্ট_ ইউক্রেনের সাঁতারুদুর্দান্ত