پچھلے مضمون میں ، ہم نے ایک ساتھ مل کر ایک سادہ ملٹی اسپیسیج گرڈ حکمت عملی کا سوچا اور ڈیزائن کیا۔ اگلا ، ہم مقداری تجارت کے راستے پر سیکھنا اور آگے بڑھنا جاری رکھیں گے۔ اس مضمون میں ، ہم ایک زیادہ پیچیدہ حکمت عملی ڈیزائن - ہیجنگ حکمت عملیوں کے ڈیزائن کی تلاش کریں گے۔ اس مضمون میں ایک ملٹی اسپیسیج انٹرٹیمپورل ہیجنگ حکمت عملی ڈیزائن کرنے کا ارادہ کیا گیا ہے۔ جب بات انٹرٹیمپورل ہیجنگ حکمت عملیوں کی ہو تو ، جو لوگ فیوچر ٹریڈنگ سے واقف ہیں انہیں اس سے واقف ہونا چاہئے۔ ابتدائیوں کے لئے ، وہ ان تصورات کو سمجھ نہیں سکتے ہیں ، لہذا آئیے انٹرٹیمپورل ہیجنگ کے تصور کی مختصر وضاحت سے شروع کریں۔
سادہ الفاظ میں ، انٹر ٹائمپورل ہیجنگ ایک معاہدے کو طویل کرنا ہے ، ایک معاہدے کو مختصر کرنا ہے ، اور پوزیشن کو ایک ہی وقت میں بند کرنے کے لئے تین حالات (طویل اور مختصر) کا انتظار کرنا ہے:
دوسرے معاملات میں فلوٹنگ نقصانات ہوتے ہیں ، پوزیشن میں لے جانے یا اسکیل کرنے کا سلسلہ جاری رکھتے ہیں۔ (کیونکہ اسپریڈ میں اتار چڑھاؤ یکطرفہ اتار چڑھاؤ سے زیادہ معتدل ہوتا ہے ، لہذا رشتہ دار خطرہ کم ہوتا ہے ، نوٹ کریں کہ صرف رشتہ دار!)
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.
چونکہ کریپٹوکرنسی تبادلے میں ترسیل کے معاہدے اور دائمی معاہدے دونوں ہوتے ہیں۔ اور فنڈنگ کی شرح کی وجہ سے دائمی معاہدوں کی قیمت ہمیشہ اسپاٹ قیمت کے قریب ہوتی ہے۔ پھر ہم ہیج arbitrage کے لئے ترسیل کے معاہدوں اور دائمی معاہدوں کا استعمال کرنے کا انتخاب کرتے ہیں۔ ترسیل کا معاہدہ طویل مدتی معاہدہ کا انتخاب کرتا ہے ، تاکہ ہیجنگ معاہدے کو کثرت سے طے کرنے کی ضرورت نہ ہو۔
ایک بار جب آپ بنیادی اصولوں سے واقف ہوجاتے ہیں تو ، آپ کو حکمت عملی لکھنے میں جلدی کرنے کی ضرورت نہیں ہے۔ سب سے پہلے ، آپ پھیلاؤ کا اعدادوشمار حاصل کرسکتے ہیں ، چارٹ تیار کرسکتے ہیں اور پھیلاؤ کا مشاہدہ کرسکتے ہیں۔ آئیے مل کر سیکھیں کہ کثیر پرجاتی حکمت عملی کیسے تیار کی جائے۔
ہم ڈیزائن کی بنیاد پرOKEX معاہدہ. یہ FMZ پر ڈرائنگ کرنے کے لئے بہت آسان ہے. یہ ڈرائنگ کرنے کے لئے پیکڈ افعال کا استعمال کرنے کے لئے بہت آسان ہے. چارٹ لائبریری ہےہائی چارٹس. API دستاویزات پر ڈرائنگ تقریب کی وضاحت: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 ...
}
اگلا ، آئیے اعداد و شمار تیار کریں۔ ہم اوکیکس معاہدے کے مجموعی مارکیٹ انٹرفیس کا استعمال کرتے ہیں۔
یو ایس ڈی ٹی میں مستقل معاہدے:
https://www.okex.com/api/v5/market/tickers?instType=SWAP
USDT میں ترسیل کے معاہدے:
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]]
}
صرف یہ باقی ہے کہ حاصل کردہ اعداد و شمار کو تکرار سے جوڑنا ، پھیلاؤ کا حساب لگانا ، آؤٹ پٹ کا چارٹ ، وغیرہ۔ یہاں ٹیسٹ دوسری سہ ماہی کے معاہدے 210924 اور مستقل معاہدے کے درمیان فرق ہے. مکمل کوڈ:
// 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)
}
}
ایک وقت کے لئے بھاگ رہا ہے ~
پھیلاؤ کا مشاہدہ کریں اور پھر اس کے بارے میں بات کریں!