রিসোর্স লোড হচ্ছে... লোডিং...

নতুনদের জন্য ক্রিপ্টোকারেন্সি পরিমাণগত ট্রেডিং - আপনাকে ক্রিপ্টোকারেন্সি পরিমাণগতের আরও কাছাকাছি নিয়ে যাওয়া (7)

লেখক:এফএমজেড-লিডিয়া, সৃষ্টিঃ ২০২২-০৮-০৯ ১১ঃ১৫ঃ২৩, আপডেটঃ ২০২৩-০৯-২১ ২১ঃ০০ঃ১০

img

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

অন্তর্বর্তীকালীন হেজিং

সহজভাবে বলতে গেলে, অন্তর্বর্তীকালীন হেজিং হল একটি চুক্তিতে দীর্ঘ যান, একটি চুক্তিতে যান, এবং একই সময়ে অবস্থান বন্ধ করার জন্য তিনটি পরিস্থিতির জন্য অপেক্ষা করুন (দীর্ঘ এবং সংক্ষিপ্ত):

  • আপনি যদি লম্বা হয়ে টাকা উপার্জন করেন এবং শর্ট হয়ে টাকা হারাবেন, এবং যখন লাভ (যেমন বলা হয়) ক্ষতির চেয়ে বেশি হয় তখন আপনার অবস্থানটি বন্ধ করুন (যেমন বলা হয়), আপনি লাভ / ক্ষতি ভারসাম্যের পরে লাভ করবেন।
  • লং পজিশন অর্থ হারাবে, শর্ট পজিশন অর্থ উপার্জন করবে, এবং যখন পজিশনটি হারানোর চেয়ে বেশি লাভজনক হবে তখন বন্ধ করবে,... (উপরের মতোই) ।
  • আপনি যদি লম্বা হয়ে যান তাহলে অর্থ উপার্জন করুন, এবং যদি আপনি শর্ট হয়ে যান তাহলে অর্থ উপার্জন করুন, তাই কেন দ্বিধা? আপনার অবস্থান বন্ধ করুন!

অন্যান্য ক্ষেত্রে, ফ্লোটিং লস হয়, বহন বা অবস্থান স্কেল অব্যাহত। (কারণ স্প্রেড ওঠানামা একতরফা ওঠানামা তুলনায় আরো মৃদু হয়, আপেক্ষিক ঝুঁকি ছোট, শুধুমাত্র আপেক্ষিক যে নোট করুন!

Let A1 be the price of contract A at moment 1, and set B1 to be the price of contract B at moment 1. At this time, short contract A, short price A1, long contract B, and long price B1.
Let A2 be the price of contract A at moment 2, and set B2 to be the price of contract B at moment 2. At this time, close the position contract A (short), close short A2, close the position B contract (long), and close long price B2.

Moment 1 difference:A1 - B1 = X 
Moment 2 difference:A2 - B2 = Y 
X - Y = A1 - B1 - (A2 - B2)
X - Y = A1 - B1 - A2 + B2
X - Y = A1 - A2 + B2 - B1

It can be seen that A1 - A2 is the profit difference in closing the position of contract A.
B2 - B1 is the profit spread of closing the position of contract B. As long as the two closed positions are overall positive, ie: A1 - A2 + B2 - B1 > 0 is profitable. That is, as long as X - Y > 0.
Because of: X - Y = A1 - A2 + B2 - B1

It is concluded that as long as the difference X of opening a position is greater than the difference Y of closing a position, it is profitable (note that it is short A, long B to open a position, the reverse will be the opposite), of course, this is theoretical, practical factors such as commission and slippage should also be considered.

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

প্রথমে মাল্টি-প্রজাতির ছড়িয়ে পড়া পরিসংখ্যান দিয়ে গরম করুন

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

আমরা ডিজাইন করিOKEX চুক্তি. এটি FMZ উপর আঁকা খুব সহজ. এটি আঁকা প্যাকেজ ফাংশন ব্যবহার করা খুব সহজ. চার্ট লাইব্রেরি হয়হাইচার্ট. এপিআই ডকুমেন্টেশনে অঙ্কন ফাংশন বর্ণনাঃhttps://www.fmz.com/api#chart...

যেহেতু এটি একটি মাল্টি-প্রজাতি, প্রথমত, অঙ্কন করার আগে এই প্রজাতির দামের পার্থক্য নির্ধারণ করা প্রয়োজন। কোডে, প্রথমে দুটি অ্যারে লিখুন, যা চুক্তিগুলিকে প্রতিনিধিত্ব করে।

var arrSwapContractType = ["BTC-USDT-SWAP", "LTC-USDT-SWAP", "ETH-USDT-SWAP", "ETC-USDT-SWAP"]   // Perpetual contracts
var arrDeliveryContractType = ["BTC-USDT-210924", "LTC-USDT-210924", "ETH-USDT-210924", "ETC-USDT-210924"]  // Delivery contracts

এখানে সেট করা কন্ট্রাক্ট কোড অনুযায়ী চার্ট কনফিগারেশন শুরু করুন। এই চার্ট কনফিগারেশন অবশ্যই হার্ড-কোড করা যাবে না, কারণ আপনি কি প্রজাতি এবং কত প্রজাতি করতে জানেন না (এগুলি arrDeliveryContractType এবং arrSwapContractType এর মান দ্বারা নির্ধারিত হয়), তাই চার্ট কনফিগারেশন একটি ফাংশন দ্বারা ফিরে আসে।

function createCfg(symbol) {
    var cfg = {
        extension: {
            // No grouping, displayed separately, default is 'group'
            layout: 'single', 
            // Specify the height, which can be set as a string, "300px", and the value 300 will be replaced with "300px" automatically
            height: 300,      
            // The unit value of the specified width, the total value is 12
            col: 6
        },
        title: {
            text: symbol
        },
        xAxis: {
            type: 'datetime'
        },
        series: [{
            name: 'plus',
            data: []
        }]
    }

    return cfg
}

function main() {
    // Declare arrCfg
    var arrCfg = []                                    // Declare an array to store chart configuration information
    _.each(arrSwapContractType, function(ct) {         // Record the array of perpetual contract codes iteratively, pass the XXX-USDT part of the contract name as a parameter to the createCfg function, construct the chart configuration information, and return
        arrCfg.push(createCfg(formatSymbol(ct)[0]))    // The chart configuration information returned by createCfg is pushed into the arrCfg array
    })
    var objCharts = Chart(arrCfg)                      // Call the chart function Chart of the FMZ platform to create the chart control object objCharts
    objCharts.reset()                                  // Initialize chart content
    
    // Hereafter omitted ...
}

এরপরে, আসুন তথ্য প্রস্তুত করি। আমরা OKEX চুক্তির সমষ্টিগত বাজার ইন্টারফেস ব্যবহার করিঃ

ইউএসডিটি চিরস্থায়ী চুক্তিঃ

https://www.okex.com/api/v5/market/tickers?instType=SWAP

ইউএসডিটি ডেলিভারি চুক্তিঃ

https://www.okex.com/api/v5/market/tickers?instType=FUTURES

আমরা এই দুটি ইন্টারফেসের কলগুলি পরিচালনা করার জন্য একটি ফাংশন লিখি এবং ডেটা একটি ফরম্যাটে রাখিঃ

function getTickers(url) {
    var ret = []
    try {
        var arr = JSON.parse(HttpQuery(url)).data
        _.each(arr, function(ele) {
            ret.push({
                bid1: parseFloat(ele.bidPx),             // Price of stock buy order
                bid1Vol: parseFloat(ele.bidSz),          // Amount for the price of stock buy order
                ask1: parseFloat(ele.askPx),             // Price of stock sell order
                ask1Vol: parseFloat(ele.askSz),          // Amount for the price of stock sell order
                symbol: formatSymbol(ele.instId)[0],     // Formats into trading pairs
                type: "Futures",                         // Type
                originalSymbol: ele.instId               // Original contract code
            })
        })
    } catch (e) {
        return null 
    }
    return ret 
}

চুক্তি কোড প্রক্রিয়া করার জন্য অন্য ফাংশন লিখুন

function formatSymbol(originalSymbol) {
    var arr = originalSymbol.split("-")
    return [arr[0] + "_" + arr[1], arr[0], arr[1]]
}

এখন যা বাকি আছে তা হল পুনরাবৃত্তিভাবে প্রাপ্ত তথ্যগুলিকে জোড়া দেওয়া, স্প্রেডগুলি গণনা করা, আউটপুটটি চার্ট করা ইত্যাদি এখানে পরীক্ষাটি হল দ্বিতীয় ত্রৈমাসিকের চুক্তি ২১০৯২৪ এবং চিরস্থায়ী চুক্তির মধ্যে পার্থক্য। সম্পূর্ণ কোডঃ

// Temporary parameters
var arrSwapContractType = ["BTC-USDT-SWAP", "LTC-USDT-SWAP", "ETH-USDT-SWAP", "ETC-USDT-SWAP"]
var arrDeliveryContractType = ["BTC-USDT-210924", "LTC-USDT-210924", "ETH-USDT-210924", "ETC-USDT-210924"]
var interval = 2000

function createCfg(symbol) {
    var cfg = {
        extension: {
            // No grouping, displayed separately, default is 'group'
            layout: 'single', 
            // Specify the height, which can be set as a string, "300px", and the value 300 will be replaced with "300px" automatically
            height: 300,      
            // The unit value of the specified width, the total value is 12
            col: 6
        },
        title: {
            text: symbol
        },
        xAxis: {
            type: 'datetime'
        },
        series: [{
            name: 'plus',
            data: []
        }]
    }

    return cfg
}

function formatSymbol(originalSymbol) {
    var arr = originalSymbol.split("-")
    return [arr[0] + "_" + arr[1], arr[0], arr[1]]
}

function getTickers(url) {
    var ret = []
    try {
        var arr = JSON.parse(HttpQuery(url)).data
        _.each(arr, function(ele) {
            ret.push({
                bid1: parseFloat(ele.bidPx), 
                bid1Vol: parseFloat(ele.bidSz), 
                ask1: parseFloat(ele.askPx), 
                ask1Vol: parseFloat(ele.askSz), 
                symbol: formatSymbol(ele.instId)[0], 
                type: "Futures", 
                originalSymbol: ele.instId
            })
        })
    } catch (e) {
        return null 
    }
    return ret 
}

function main() {
    // Declare arrCfg
    var arrCfg = []
    _.each(arrSwapContractType, function(ct) {
        arrCfg.push(createCfg(formatSymbol(ct)[0]))
    })
    var objCharts = Chart(arrCfg)
    objCharts.reset()
    
    while (true) {
        // Obtain market data        
        var deliveryTickers = getTickers("https://www.okex.com/api/v5/market/tickers?instType=FUTURES")
        var swapTickers = getTickers("https://www.okex.com/api/v5/market/tickers?instType=SWAP")
        if (!deliveryTickers || !swapTickers) {
            Sleep(2000)
            continue
        }

        var tbl = {
            type : "table",
            title : "delivery - perpetual spread",
            cols : ["trading pairs", "delivery", "perpetual", "positive hedging", "negative hedging"],
            rows : []
        }
        
        var subscribeDeliveryTickers = []
        var subscribeSwapTickers = []
        _.each(deliveryTickers, function(deliveryTicker) {
            _.each(arrDeliveryContractType, function(symbol) {
                if (deliveryTicker.originalSymbol == symbol) {
                    subscribeDeliveryTickers.push(deliveryTicker)
                }
            })
        })
        _.each(swapTickers, function(swapTicker) {
            _.each(arrSwapContractType, function(symbol) {
                if (swapTicker.originalSymbol == symbol) {
                    subscribeSwapTickers.push(swapTicker)
                }
            })
        })
        
        var pairs = []
        var ts = new Date().getTime()
        _.each(subscribeDeliveryTickers, function(deliveryTicker) {
            _.each(subscribeSwapTickers, function(swapTicker) {
                if (deliveryTicker.symbol == swapTicker.symbol) {
                    var pair = {symbol: swapTicker.symbol, swapTicker: swapTicker, deliveryTicker: deliveryTicker, plusDiff: deliveryTicker.bid1 - swapTicker.ask1, minusDiff: deliveryTicker.ask1 - swapTicker.bid1}
                    pairs.push(pair)
                    tbl.rows.push([pair.symbol, deliveryTicker.originalSymbol, swapTicker.originalSymbol, pair.plusDiff, pair.minusDiff])
                    for (var i = 0 ; i < arrCfg.length ; i++) {
                        if (arrCfg[i].title.text == pair.symbol) {
                            objCharts.add([i, [ts, pair.plusDiff]])
                        }                        
                    }                    
                }
            })
        })

        LogStatus(_D(), "\n`" + JSON.stringify(tbl) + "`")        
        Sleep(interval)
    }
}

আসল বট চলছে

img

কিছুক্ষণের জন্য দৌড়ানো~

img

ছড়িয়ে পড়া পর্যবেক্ষণ করুন এবং তারপর এটি সম্পর্কে কথা বলুন!img


সম্পর্কিত

আরো