حال ہی میں ، بائننس فیوچر نے دوسرا
بائننس چیمپئن شپ کے لئے تیار کردہ حکمت عملی فراہمی کے معاہدے کی تتلی ہیجنگ ہے۔ یہ مضمون حکمت عملی کی تحقیقاتی رپورٹ ہے۔ توجہ: حکمت عملی صرف حوالہ کے لئے ہیں۔ آپ اس بنیاد پر اصلاح کے ل your اپنے خیالات پیش کرسکتے ہیں۔ آپ کا اشتراک کرنے کا بھی خیرمقدم ہے۔ رپورٹ کو براہ راست ایف ایم زیڈ کی ویب سائٹ کے تحقیقی ماحول میں استعمال کیا جاسکتا ہے (ڈاؤن لوڈ کرنے کے لئے اوپری دائیں کونے پر کلک کریں ، اور
ہیجنگ کو مستحکم قیمت کا فرق تلاش کرنے کی ضرورت ہے۔ جب قیمت کا فرق بہت بڑا ہو تو ، قیمت کا فرق مختصر کرنا۔ جب قیمت کا فرق بہت چھوٹا ہو تو ، قیمت کا فرق طویل ہوجائیں۔ جب قیمت کا فرق پوزیشن کو بند کرنے کے لئے واپس آجائے تو ، آپ قیمت کا فرق کمائیں گے۔ اگر فیوچر اور اسپاٹ ہیجنگ کر رہے ہیں تو ، جب ناقابل فراہمی فیوچر کی قیمت اسپاٹ قیمت سے بہت زیادہ ہو تو ، آپ فیوچر کنٹریکٹ کو مختصر کرسکتے ہیں اور قیمت کے فرق کو مختصر کرنے کے لئے اسپاٹ قیمت کو طویل کرسکتے ہیں۔ مختلف ترسیل کے اوقات کے ساتھ معاہدوں کے مابین وقتی ہیجنگ بھی ہیں ، فیوچر اور اسپاٹ ہیجنگ کے ساتھ ، وہ قیمت کے فرق کو بھی طویل کرسکتے ہیں۔ فیوچر اور اسپاٹ اور کراس فیوچر شدید مقابلہ کے ساتھ عام حکمت عملی ہیں۔ جب مارکیٹ نہیں ہوتی ہے تو ، قیمت کا فرق نسبتا stable مستحکم ہوتا ہے۔ اگرچہ یہ ایک طویل مدتی مارکیٹ ہوسکتا ہے ، بہت کم مواقع ہیں ، اور دستی آپریشن بھی دیکھ رہا ہے۔ چونکہ وہ سبھی فرق ہیں ، جب قیمت کی قیمت کا موازنہ کیا جاتا ہے
بائننس کرنسی کے معیاری معاہدوں ، جیسے بی ٹی سی اور ای ٹی ایچ ، میں ایک ہی وقت میں تین معاہدے ہوتے ہیں ، یعنی ، مستقل بی ٹی سی یو ایس ڈی_ پی ای آر پی ، موجودہ سہ ماہی کا بی ٹی سی یو ایس ڈی_200925 ، اگلے سہ ماہی کا بی ٹی سی یو ایس ڈی_ 201225۔ مستقل معاہدوں کو اسپاٹ کے طور پر استعمال کیا جاسکتا ہے۔ عام طور پر ، دو معاہدوں کی ہیجنگ کے لئے تین قیمت کے فرق ہوتے ہیں: موجودہ سہ ماہی مستقل ، اگلی سہ ماہی مستقل ، اور اگلی سہ ماہی موجودہ سہ ماہی۔ تیتلی ثالثی کے لئے تین معاہدوں کی ضرورت ہوتی ہے۔ فرق (اگلی سہ ماہی - موجودہ سہ ماہی) - (موجودہ سہ ماہی - مستقل) ہے ، یعنی ، فرق = اگلی سہ ماہی + مستقل - 2 * موجودہ سہ ماہی کی قیمت۔ فرق کو طویل کرنے کے ل you ، آپ کو اگلی سہ ماہی اور مستقل معاہدوں کے لئے ایک طویل پوزیشن کا معاہدہ کھولنے کی ضرورت ہے ، اور موجودہ سہ ماہی کے لئے دو مختصر معاہدوں کی ضرورت ہے۔
میں نے بائننس کی 5 منٹ کی لائن کے اعداد و شمار کو 14 اگست سے 14 ستمبر تک کراؤ کیا ہے ، جسے براہ راست پڑھا جاسکتا ہے (وقت کے فرق کی وجہ سے ، دکھایا گیا وقت کا فرق 8h ہے) ۔
[4] میں:
# Libraries to be imported
import pandas as pd
import requests
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import time
%matplotlib inline
میں [12]:
#Read the data, you can also upload the data to the FMZ forum, which can be referenced in the "Analyze" directly
df = pd.read_csv('https://www.fmz.com/upload/asset/1420b2081ecd122522d.csv',index_col = 0)
df.index = pd.to_datetime(df.index)
df.tail(3)
آؤٹ [1]:
سب سے پہلے ، آئیے بٹ کوائن معاہدوں کے مابین قیمت کے فرق پر ایک نظر ڈالیں۔ 17 اگست کو ، بٹ کوائن کی قیمت میں تیزی سے 500u کا اضافہ ہوا۔ عام طور پر ، سپلائی شدہ معاہدہ اسپاٹ قیمت کے مقابلے میں پریمیم پر تھا ، اور اسپاٹ قیمت میں اضافہ ہوا۔ مستقبل کی توقع زیادہ پرامید ہوگی۔ ناقابل تسلی بخش معاہدے اور دائمی کے درمیان قیمت کا فرق زیادہ ہو جائے گا۔ مثال کے طور پر ، اگلی سہ ماہی اور دائمی کے درمیان قیمت کا فرق 700u ہوگا۔ ستمبر میں بٹ کوائن کی قیمت میں کمی کے ساتھ ، لوگوں کی توقعات تیزی سے خراب ہو جائیں گی ، اگلی سہ ماہی اور دائمی کے درمیان قیمت کا فرق تقریبا 150u تک گر گیا ، اور موجودہ سہ ماہی اور دائمی کے درمیان قیمت کا فرق تقریبا almost کوئی نہیں تھا۔ اگر اگلی سہ ماہی اور دائمی کے درمیان ہیجنگ کی گئی تو ، صرف طویل مدتی قیمت کی واپسی ہی کی جاسکتی ہے۔ اگر اگست میں 400-600 کے درمیان فرق کو انجام دینے کا فیصلہ کیا گیا تو ، اب ظاہر ہے کہ یہ ایک ریاست میں مقفل ہے۔
[18] میں:
#Perpetual price
df['BTCUSD_PERP'].dropna().plot(figsize=(15,6),grid=True);
باہر [1]:
[15] میں:
# Price difference of next quarter - perpetual
(df['BTCUSD_201225']-df['BTCUSD_PERP']).dropna().plot(figsize=(15,6),grid=True);
باہر[15]:
[16] میں:
# Price difference of current quarter - perpetual
(df['BTCUSD_200925']-df['BTCUSD_PERP']).dropna().plot(figsize=(15,6),grid=True);
باہر[16]:
[17] میں:
# Price difference of next quarter - current quarter
(df['BTCUSD_201225']-df['BTCUSD_200925']).dropna().plot(figsize=(15,6),grid=True);
باہر [1]:
تو اس وقت قیمت کا فرق کیسے بدلتا ہے؟ جیسا کہ نیچے دیئے گئے اعداد و شمار سے دیکھا جاسکتا ہے ، حالیہ قیمت کا فرق ایک طویل عرصے سے 100-200u پر مستحکم رہا ہے۔ یہاں تک کہ ستمبر کے آغاز میں شدید کمی نے بھی زیادہ اثر نہیں ڈالا ، جس سے ہمیں بار بار ثالثی کے لئے بہت زیادہ گنجائش ملتی ہے۔ فی الحال ، اگر قیمت کا فرق 100u تک گر جاتا ہے تو ، دستی طور پر طویل عرصے تک جانا ٹھیک ہے۔
جب اسپاٹ قیمت میں اتار چڑھاؤ ہوتا ہے تو ، دونوں غیر ختم ہونے والے معاہدوں میں ایک ہی وقت میں مستقبل کی توقع کی عکاسی ہوتی ہے۔ قیمت کے فرق کو کم کرنے کا عمل اس اتار چڑھاو کو بڑی حد تک معاوضہ دے سکتا ہے ، اور کارکردگی نسبتا stable مستحکم ہے۔ ای ٹی ایچ کا تیتلی ثالثی پھیلاؤ اسی طرح کی کارکردگی کا مظاہرہ کرتا ہے۔
[19] میں:
#(next quarter - current quarter)-(current quarter - perpetual)
(df['BTCUSD_201225']-df['BTCUSD_200925']-(df['BTCUSD_200925']-df['BTCUSD_PERP'])).dropna().plot(figsize=(15,6),grid=True);
باہر [1]:
[22] میں:
#The price difference of ETH
(df['ETHUSD_201225']+df['ETHUSD_PERP']-2*df['ETHUSD_200925']).dropna().plot(figsize=(15,6),grid=True);
باہر[22]:
وقت کی بچت (صرف تنگی) کے لئے ، بیک ٹیسٹ اب بھی آخری بائننس چیمپئن شپ حکمت عملی کے یو ایس ڈی ٹی معیاری انجن کا استعمال کرتا ہے۔ اگرچہ کچھ غلطیاں ہوسکتی ہیں ، لیکن یہ مسئلے کی وضاحت بھی کرسکتی ہے۔ بیک ٹیسٹنگ انجن اس رپورٹ کے آخر میں رکھا گیا ہے۔ کوڈ چلانے پر ، آپ کو مضمون کا اختتام دیکھنا چاہئے۔ اگر آپ یو ایس ڈی ٹی کمانا چاہتے ہیں تو کرنسی کی معیاری حکمت عملی ہیجنگ پر غور کرسکتی ہے ، اور یہ پیچیدہ نہیں ہے۔
قیمت کے فرق کی وسط لائن کو ای ایم اے کے ذریعہ ٹریک کیا جاتا ہے ، اور پوزیشن کو گرڈ کے ذریعہ کنٹرول کیا جاتا ہے ، یعنی ، جب بھی فرق کھولا جاتا ہے (جیسے 30) ، N حصص کو مختصر کریں ، اور اس کے برعکس۔ اگر قیمت کے فرق کی وسط لائن 100u ہے ، جب قیمت کا فرق 90 ہے تو ، 3 حصص کو مختصر کریں ، اور قیمت کا فرق 60 ہوجاتا ہے۔ ایک شیئر بند کریں۔ گرڈ کا سائز ایک اہم پیرامیٹر ہے۔
مندرجہ ذیل مخصوص بی ٹی سی اور ای ٹی ایچ بیک ٹیسٹنگ کوڈز اور نتائج ہیں۔ کارکردگی توقعات کے مطابق ہے۔ چونکہ ای ٹی ایچ اور لنک میں زیادہ اتار چڑھاؤ ہے اور قیمت کا فرق زیادہ مستحکم ہے ، لہذا کارکردگی بہتر ہے۔ نوٹ کریں کہ یہاں سروس چارج 0.02٪ ہے ، اور بائننس میں ڈیفالٹ وی آئی پی 0 لینے والے سروس چارج 0.04٪ ہے۔ سروس چارج بہت اہم ہے ، اور مندرجہ ذیل ابواب اس کا تجزیہ کریں گے۔
[39] میں:
trade_symbols = ['BTCUSD_201225', 'BTCUSD_200925', 'BTCUSD_PERP']
account = []
diff = df['BTCUSD_201225']+df['BTCUSD_PERP']-2*df['BTCUSD_200925']
diff_mean = diff.ewm(alpha=0.001).mean()
e = Exchange(trade_symbols,initial_balance=10000,taker_fee=0.0002)
for row in df[trade_symbols].dropna().iterrows():
date = row[0]
prices = row[1]
e.Update(date, trade_symbols, prices)
account.append([e.account['USDT']['margin'],e.account['USDT']['realised_profit']+e.account['USDT']['unrealised_profit']])
aim_amount = -round((diff[date] - diff_mean[date])/30,1)
now_amount = e.account['BTCUSD_PERP']['amount']
if aim_amount - now_amount < -1:
trade_amount = now_amount - aim_amount
e.Buy('BTCUSD_200925',prices['BTCUSD_200925'],2*trade_amount)
e.Sell('BTCUSD_201225',prices['BTCUSD_201225'],trade_amount)
e.Sell('BTCUSD_PERP',prices['BTCUSD_PERP'],trade_amount)
if aim_amount - now_amount > 1:
trade_amount = aim_amount - now_amount
e.Sell('BTCUSD_200925',prices['BTCUSD_200925'],2*trade_amount)
e.Buy('BTCUSD_201225',prices['BTCUSD_201225'],trade_amount)
e.Buy('BTCUSD_PERP',prices['BTCUSD_PERP'],trade_amount)
e.df = pd.DataFrame(index=df[trade_symbols].dropna().index,columns=['margin','profit'],data=account)
e.df['profit'].plot(figsize=(15,6),grid=True);
باہر [1]:
[59] میں:
symbol = 'ETH'
trade_symbols = [symbol+'USD_201225', symbol+'USD_200925', symbol+'USD_PERP']
fee = 0.0002
account = []
diff = df[trade_symbols[0]]+df[trade_symbols[2]]-2*df[trade_symbols[1]]
diff_mean = diff.ewm(alpha=0.001).mean()
e = Exchange(trade_symbols,initial_balance=10000,taker_fee=fee)
for row in df[trade_symbols].dropna().iloc[30:].iterrows():
date = row[0]
prices = row[1]
e.Update(date, trade_symbols, prices)
account.append([e.account['USDT']['margin'],e.account['USDT']['realised_profit']+e.account['USDT']['unrealised_profit']])
aim_amount = -round((diff[date] - diff_mean[date])/(15*prices[trade_symbols[2]]*fee),1)
now_amount = e.account[trade_symbols[2]]['amount']
if aim_amount - now_amount < -1:
trade_amount = 1
e.Buy(trade_symbols[1],prices[trade_symbols[1]],2*trade_amount)
e.Sell(trade_symbols[0],prices[trade_symbols[0]],trade_amount)
e.Sell(trade_symbols[2],prices[trade_symbols[2]],trade_amount)
if aim_amount - now_amount > 1:
trade_amount = 1
e.Sell(trade_symbols[1],prices[trade_symbols[1]],2*trade_amount)
e.Buy(trade_symbols[0],prices[trade_symbols[0]],trade_amount)
e.Buy(trade_symbols[2],prices[trade_symbols[2]],trade_amount)
e.df = pd.DataFrame(index=df[trade_symbols].dropna().iloc[30:].index,columns=['margin','profit'],data=account)
e.df['profit'].plot(figsize=(15,6),grid=True);
آؤٹ [59]:
[60] میں:
symbol = 'LINK'
trade_symbols = [symbol+'USD_201225', symbol+'USD_200925', symbol+'USD_PERP']
fee = 0.0002
account = []
diff = df[trade_symbols[0]]+df[trade_symbols[2]]-2*df[trade_symbols[1]]
diff_mean = diff.ewm(alpha=0.001).mean()
e = Exchange(trade_symbols,initial_balance=10000,taker_fee=fee)
for row in df[trade_symbols].dropna().iloc[30:].iterrows():
date = row[0]
prices = row[1]
e.Update(date, trade_symbols, prices)
account.append([e.account['USDT']['margin'],e.account['USDT']['realised_profit']+e.account['USDT']['unrealised_profit']])
aim_amount = -round((diff[date] - diff_mean[date])/(15*prices[trade_symbols[2]]*fee),1)
now_amount = e.account[trade_symbols[2]]['amount']
if aim_amount - now_amount < -1:
trade_amount = 1
e.Buy(trade_symbols[1],prices[trade_symbols[1]],2*trade_amount)
e.Sell(trade_symbols[0],prices[trade_symbols[0]],trade_amount)
e.Sell(trade_symbols[2],prices[trade_symbols[2]],trade_amount)
if aim_amount - now_amount > 1:
trade_amount = 1
e.Sell(trade_symbols[1],prices[trade_symbols[1]],2*trade_amount)
e.Buy(trade_symbols[0],prices[trade_symbols[0]],trade_amount)
e.Buy(trade_symbols[2],prices[trade_symbols[2]],trade_amount)
e.df = pd.DataFrame(index=df[trade_symbols].dropna().iloc[30:].index,columns=['margin','profit'],data=account)
e.df['profit'].plot(figsize=(15,6),grid=True);
باہر[60]:
چونکہ ایک ہی وقت میں 3 معاہدوں کو چلانے کی ضرورت ہے ، لہذا کھلنے کے بعد پوزیشن کو بند کرنے کے لئے 8 سروس چارجز کی ضرورت ہوتی ہے ، لہذا سروس چارجز کا حکمت عملی پر بہت اثر پڑتا ہے۔ اگر 0.01٪ کی سروس چارج ہے تو ، قیمت کے فرق کے گرڈ کے مابین فرق کو مزید کم کیا جاسکتا ہے۔ بی ٹی سی
اگر کمیشن 0.03٪ ہے تو ، بی ٹی سی بیک ٹیسٹ کے نتائج مندرجہ ذیل ہیں:
ETH کے بیک ٹیسٹ کے نتائج:
نئے رجسٹرڈ صارفین کے لئے وی آئی پی 0 کی وصول کنندہ شرح 0.0004 ہے ، دعوت دینے کے پہلے مہینے میں 10٪ کم کی جائے گی ، 30٪ واپس کردی جائے گی ، اور بی این بی کی کھپت کے لئے 10٪ کم کی جائے گی۔ اس طرح ، حتمی ہینڈلنگ فیس 0.0002268 ہے۔ بائننس ڈیلیوری کنٹریکٹ کی حالیہ بڑی ٹرانزیکشن رقم کے لئے بھی براہ راست انعام ہوگا۔ اس کے علاوہ ، بل کا ایک حصہ رکھا جاسکتا ہے اور بل کا ایک حصہ لیا جاسکتا ہے ، اور حتمی جامع شرح کو 0.02٪ تک کم کیا جاسکتا ہے۔ اس کے علاوہ ، ایف ایم زیڈ کے عہدیدار بائننس کے ساتھ سروس چارج ڈسکاؤنٹ کے معاملے پر بھی تبادلہ خیال کر رہے ہیں۔ آپ اس کے منتظر رہ سکتے ہیں۔
ثالثی کا مقصد مستحکم قیمت کا فرق تلاش کرنا ہے۔ قیمت کے فرق کا قیمت کا فرق زیادہ مستحکم ہے۔ لہذا ، تتلی ثالثی کراس مدت اور مستقبل کے مقام سے بہت کم خطرناک ہے ، اور اسے دستی طور پر بھی چلایا جاسکتا ہے۔ یہ حکمت عملی صرف تعارف کے طور پر کام کرتی ہے۔ اصلی بوٹ میں لکھتے وقت بہت سارے معاملات پر غور کرنے کی ضرورت ہے۔ آپ سب کو بات چیت کرنے کا خیرمقدم کرتے ہیں۔
[23] میں:
class Exchange:
def __init__(self, trade_symbols, leverage=20, maker_fee=0.0002,taker_fee=0.0004,log='',initial_balance=10000):
self.initial_balance = initial_balance #Initial assets
self.taker_fee = taker_fee
self.maker_fee = maker_fee
self.leverage = leverage
self.trade_symbols = trade_symbols
self.date = ''
self.log = log
self.df = pd.DataFrame()
self.account = {'USDT':{'realised_profit':0, 'margin':0, 'unrealised_profit':0,
'total':initial_balance, 'leverage':0, 'fee':0,'maker_fee':0,'taker_fee':0}}
for symbol in trade_symbols:
self.account[symbol] = {'amount':0, 'hold_price':0, 'value':0, 'price':0, 'realised_profit':0,
'margin':0, 'unrealised_profit':0,'fee':0}
def Trade(self, symbol, direction, price, amount, msg='', maker=True):
if (self.date and symbol == self.log) or self.log == 'all':
print('%-26s%-15s%-5s%-10.8s%-8.6s %s'%(str(self.date)[:24], symbol, 'buy' if direction == 1 else 'sell', price, amount, msg))
cover_amount = 0 if direction*self.account[symbol]['amount'] >=0 else min(abs(self.account[symbol]['amount']), amount)
open_amount = amount - cover_amount
if maker:
self.account['USDT']['realised_profit'] -= price*amount*self.maker_fee #Deduct service charge
self.account['USDT']['maker_fee'] += price*amount*self.maker_fee
self.account['USDT']['fee'] += price*amount*self.maker_fee
self.account[symbol]['fee'] += price*amount*self.maker_fee
else:
self.account['USDT']['realised_profit'] -= price*amount*self.taker_fee #Deduct service charge
self.account['USDT']['taker_fee'] += price*amount*self.taker_fee
self.account['USDT']['fee'] += price*amount*self.taker_fee
self.account[symbol]['fee'] += price*amount*self.taker_fee
if cover_amount > 0: #Close the position first
self.account['USDT']['realised_profit'] += -direction*(price - self.account[symbol]['hold_price'])*cover_amount #Profit
self.account['USDT']['margin'] -= cover_amount*self.account[symbol]['hold_price']/self.leverage #Release margin
self.account[symbol]['realised_profit'] += -direction*(price - self.account[symbol]['hold_price'])*cover_amount
self.account[symbol]['amount'] -= -direction*cover_amount
self.account[symbol]['margin'] -= cover_amount*self.account[symbol]['hold_price']/self.leverage
self.account[symbol]['hold_price'] = 0 if self.account[symbol]['amount'] == 0 else self.account[symbol]['hold_price']
if open_amount > 0:
total_cost = self.account[symbol]['hold_price']*direction*self.account[symbol]['amount'] + price*open_amount
total_amount = direction*self.account[symbol]['amount']+open_amount
self.account['USDT']['margin'] += open_amount*price/self.leverage
self.account[symbol]['hold_price'] = total_cost/total_amount
self.account[symbol]['amount'] += direction*open_amount
self.account[symbol]['margin'] += open_amount*price/self.leverage
self.account[symbol]['unrealised_profit'] = (price - self.account[symbol]['hold_price'])*self.account[symbol]['amount']
self.account[symbol]['price'] = price
self.account[symbol]['value'] = abs(self.account[symbol]['amount'])*price
def Buy(self, symbol, price, amount, msg='', maker=False):
self.Trade(symbol, 1, price, amount, msg, maker)
def Sell(self, symbol, price, amount, msg='', maker=False):
self.Trade(symbol, -1, price, amount, msg,maker)
def Update(self, date, symbols, close_price): #Update the assets
self.date = date
self.close = close_price
self.account['USDT']['unrealised_profit'] = 0
for symbol in symbols:
self.account[symbol]['unrealised_profit'] = (close_price[symbol] - self.account[symbol]['hold_price'])*self.account[symbol]['amount']
self.account[symbol]['price'] = close_price[symbol]
self.account[symbol]['value'] = abs(self.account[symbol]['amount'])*close_price[symbol]
self.account['USDT']['unrealised_profit'] += self.account[symbol]['unrealised_profit']
self.account['USDT']['total'] = round(self.account['USDT']['realised_profit'] + self.initial_balance + self.account['USDT']['unrealised_profit'],6)
self.account['USDT']['leverage'] = round(self.account['USDT']['margin']*self.leverage/self.account['USDT']['total'],4)
[ ] میں: