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

লেখক:ছোট্ট স্বপ্ন, তৈরিঃ 2021-07-30 16:36:48, আপডেটঃ 2023-09-20 10:36:43

img

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

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

এই কৌশলটি আপগ্রেড করার প্রয়োজন

  • স্যুইচিং এক্সচেঞ্জ অবজেক্ট লিভারেজ মোড এই পরিবর্তনটি শুধুমাত্র বাস্তব ডিস্কের সাথে সম্পর্কিত, কিছু এফএমজেড সমস্ত এফএমজেড লিভারেজ ইন্টারফেসের সাথে সম্পর্কিত। এফএমজেডে সরাসরি প্যাকেজ করা এবং এফএমজেড সমর্থনকারী এক্সচেঞ্জের বস্তুগুলির জন্য সরাসরি স্যুইচ মোড।
  • দাম বৃদ্ধি চার্ট দেখায় এবং এই চার্টটি দেখায় যে, আপনি শুধু অঙ্কন করতে পারেন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

পুনরায় পরীক্ষা

পুনঃনির্ধারণ কেবলমাত্র পরীক্ষার কৌশল, প্রাথমিক সনাক্তকরণ বৈশিষ্ট্য, অনেকগুলি বাগগুলি পুনঃনির্ধারণের পর্যায়ে পরীক্ষার জন্য উপলব্ধ। পুনঃনির্ধারণের ফলাফল সম্পর্কে খুব বেশি চিন্তা করার দরকার নেই, চূড়ান্ত কৌশলটি সত্যিকারের গুলির বাস্তব পরিবেশে সনাক্ত করা দরকার।

img

img

এই কৌশলটির উত্স কোডঃhttps://www.fmz.com/strategy/302834


সম্পর্কিত

আরো

15570686905এই লেনদেনের কৌশলটি চুক্তির সাথে যুক্ত করা হয়েছে, ঠিক আছে, স্থায়ী চুক্তি, বিনিময় হার চুক্তি যোগ করা হয়েছে।

হালকা মেঘমূলঃ ১২৭ঃ৯ - TypeError: Cannot read property 'SetPrecision' of undefined - টাইপ ত্রুটিঃ অপরিজ্ঞাতের বৈশিষ্ট্য 'SetPrecision' পড়তে পারে না বিভিন্ন মুদ্রার জন্য জামাতের বর্তমান হেজিং কৌশল Ver1.1 জামাত

ছোট্ট স্বপ্নভাল, একটি টিউটোরিয়াল দেওয়ার সুযোগ।

হালকা মেঘআমি বুঝতে পেরেছি, ধন্যবাদ।

ছোট্ট স্বপ্নআপনি দুটি এক্সচেঞ্জ অবজেক্ট যোগ করতে চান।