সম্প্রতি, বিন্যান্স ফিউচার দ্বিতীয়
বিন্যান্স চ্যাম্পিয়নশিপের জন্য প্রস্তুত কৌশলটি ডেলিভারি চুক্তির প্রজাপতি হেজিং। এই নিবন্ধটি কৌশলটির গবেষণা প্রতিবেদন। মনোযোগ দিনঃ কৌশলগুলি কেবলমাত্র রেফারেন্সের জন্য। আপনি এই ভিত্তিতে অপ্টিমাইজেশনের জন্য আপনার নিজস্ব ধারণা উপস্থাপন করতে পারেন। আপনার ভাগ করে নেওয়ার জন্যও আপনাকে স্বাগত জানানো হচ্ছে। প্রতিবেদনটি সরাসরি এফএমজেড ওয়েবসাইটের গবেষণা পরিবেশে ব্যবহার করা যেতে পারে (ডাউনলোড করতে উপরের ডানদিকে কোণে ক্লিক করুন, এবং
হেজিংয়ের জন্য একটি স্থিতিশীল মূল্য পার্থক্য খুঁজে বের করতে হবে। যখন দামের পার্থক্য খুব বড় হয়, তখন দামের পার্থক্যকে শর্ট করা হয়। যখন দামের পার্থক্য খুব ছোট হয়, তখন দামের পার্থক্যকে দীর্ঘ করা হয়। যখন মূল্যের পার্থক্যটি অবস্থান বন্ধ করতে ফিরে আসে, তখন আপনি মূল্যের পার্থক্যটি উপার্জন করবেন। যদি ফিউচার এবং স্পটগুলি হেজিং হয়, যখন বিতরণ করা হয়নি এমন ফিউচারগুলির দাম স্পট মূল্যের চেয়ে অনেক বেশি হয়, আপনি ফিউচার চুক্তিটি শর্ট করতে পারেন এবং দামের পার্থক্যকে শর্ট করতে স্পট দামটি দীর্ঘ করতে পারেন। বিভিন্ন বিতরণ সময়ের সাথে চুক্তিগুলির আন্তঃসময়ের হেজিংও রয়েছে, ফিউচার এবং স্পট হেজিংয়ের সাথে, তারা দামের পার্থক্যও দীর্ঘ করতে পারে। ফিউচার এবং স্পট এবং ক্রস ফিউচারগুলি তীব্র প্রতিযোগিতার সাথে সাধারণ কৌশল। যখন কোনও বাজার নেই, দামের পার্থক্য তুলনামূলকভাবে স্থিতিশীল। যদিও এটি একটি দীর্ঘমেয়াদী বাজার হতে পারে, তবে কয়েকটি সুযোগ রয়েছে এবং ম্যানুয়াল অপারেশনও সন্ধান করা হয়। যেহেতু তারা সবই পার্থক্যের জন্য স্থিতিশীল, যখন
বিটিসি এবং ইটিএইচ এর মতো বাইনারেন্স মুদ্রা স্ট্যান্ডার্ড চুক্তিতে একই সময়ে তিনটি চুক্তি রয়েছে, যথা, চলতি ত্রৈমাসিকের চিরস্থায়ী বিটিসিইউএসডি_ পিইআরপি, বিটিসিইউএসডি_ ২০০৯২৫, পরবর্তী ত্রৈমাসিকের বিটিসিইউএসডি_ ২০১২২২৫। চিরস্থায়ী চুক্তিগুলি স্পট হিসাবে ব্যবহার করা যেতে পারে। সাধারণভাবে, দুটি চুক্তিকে হেজিং করার জন্য তিনটি দামের পার্থক্য রয়েছেঃ বর্তমান চতুর্থাংশ চিরস্থায়ী, পরবর্তী চতুর্থাংশ চিরস্থায়ী এবং পরবর্তী চতুর্থাংশ বর্তমান চতুর্থাংশ। বাটারফ্লাই সালিশের জন্য তিনটি চুক্তি প্রয়োজন। পার্থক্যটি হ'ল (পরবর্তী চতুর্থাংশ - বর্তমান চতুর্থাংশ) - (বর্তমান চতুর্থাংশ - চিরস্থায়ী), অর্থাৎ পার্থক্য = পরবর্তী চতুর্থাংশ + চিরস্থায়ী - ২ * বর্তমান চতুর্থাংশ। পার্থক্যটি দীর্ঘ করতে, আপনাকে পরবর্তী চতুর্থাংশ এবং চিরস্থায়ী চুক্তিগুলির জন্য একটি দীর্ঘ অবস্থান চুক্তি খুলতে হবে এবং বর্তমান চতুর্থাংশের জন্য
আমি ১৪ আগস্ট থেকে ১৪ সেপ্টেম্বর পর্যন্ত বাইনারেন্সের ৫ মিনিট কে-লাইনের তথ্য ক্রল করেছি, যা সরাসরি পড়তে পারে (সময় পার্থক্যের কারণে, প্রদর্শিত সময়ের পার্থক্য ৮ ঘন্টা) ।
[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
[১২] এঃ
#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)
আউট[১২]:
প্রথমত, আসুন বিটকয়েন চুক্তিগুলির মধ্যে মূল্য পার্থক্যটি একবার দেখে নেওয়া যাক। 17 আগস্ট, বিটকয়েনের দাম দ্রুত 500u বৃদ্ধি পেয়েছিল। সাধারণভাবে বলতে গেলে, বিতরণ করা চুক্তিটি স্পট দামের তুলনায় একটি প্রিমিয়ামে ছিল এবং স্পট দাম বেড়েছে। ভবিষ্যতের প্রত্যাশা আরও আশাবাদী হবে। বিতরণ করা চুক্তি এবং চিরস্থায়ী মধ্যে মূল্য পার্থক্য আরও বড় হবে। উদাহরণস্বরূপ, পরবর্তী ত্রৈমাসিক এবং চিরস্থায়ী মধ্যে মূল্য পার্থক্য 700u হবে। সেপ্টেম্বরে বিটকয়েনের দাম হ্রাসের সাথে সাথে, মানুষের প্রত্যাশা দ্রুত অবনতি হবে, পরবর্তী ত্রৈমাসিক এবং চিরস্থায়ী মধ্যে মূল্য পার্থক্য প্রায় 150u এ নেমে গেছে, এবং বর্তমান ত্রৈমাসিক এবং চিরস্থায়ী মধ্যে মূল্য পার্থক্য প্রায় ছিল না। যদি পরবর্তী ত্রৈমাসিক এবং চিরস্থায়ী মধ্যে হেজিং সম্পন্ন করা হয়, শুধুমাত্র দীর্ঘমেয়াদী মূল্যের বড় ফেরত সম্পন্ন করা যেতে পারে। যদি 400-600 আগস্টের মধ্যে পার্থক্যটি সম্পন্ন করার সিদ্ধান্ত নেওয়া হয়, এটি এখন একটি রাষ্ট্রের মধ্যে লক করা হয়েছে।
[18] এঃ
#Perpetual price
df['BTCUSD_PERP'].dropna().plot(figsize=(15,6),grid=True);
আউট[18]:
[15] এঃ
# Price difference of next quarter - perpetual
(df['BTCUSD_201225']-df['BTCUSD_PERP']).dropna().plot(figsize=(15,6),grid=True);
আউট[15]:
[১৬] এঃ
# 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);
আউট[17]:
সুতরাং এই সময়ে দামের পার্থক্য কীভাবে পরিবর্তিত হয়? নীচের চিত্র থেকে দেখা যায় যে, সাম্প্রতিক মূল্যের পার্থক্যটি দীর্ঘদিন ধরে 100-200u এ স্থিতিশীল ছিল। এমনকি সেপ্টেম্বরের শুরুতে তীব্র পতনও খুব বেশি প্রভাবিত করেনি, আমাদের পুনরাবৃত্তিমূলক সালিশের জন্য অনেক জায়গা দেয়। বর্তমানে, যদি দামের পার্থক্য 100u এ পড়ে তবে ম্যানুয়ালি দীর্ঘ যেতে ঠিক আছে।
যখন স্পট মূল্যের ওঠানামা হয়, তখন দুটি অব্যবহৃত চুক্তি একই সময়ে ভবিষ্যতের প্রত্যাশা প্রতিফলিত করে। মূল্য পার্থক্য হ্রাসের প্রক্রিয়াটি এই ওঠানামাটিকে ব্যাপকভাবে কমিয়ে দিতে পারে এবং পারফরম্যান্সটি তুলনামূলকভাবে স্থিতিশীল। ইটিএইচ এর প্রজাপতি সালিশ স্প্রেডের অনুরূপ পারফরম্যান্স রয়েছে।
[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);
আউট[19]:
[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);
আউট[39]:
[৫৯] এঃ
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]:
[৬০] এঃ
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 এর গ্রহণকারী হার 0.0004 হয়, আমন্ত্রণ জানানোর প্রথম মাসে 10% হ্রাস পাবে, 30% ফেরত দেওয়া হবে এবং বিএনবি ব্যবহারের জন্য 10% হ্রাস পাবে। সুতরাং, চূড়ান্ত হ্যান্ডলিং ফি 0.0002268। বাইনারেন্স ডেলিভারি চুক্তির সাম্প্রতিক বড় লেনদেনের পরিমাণের জন্য সরাসরি পুরষ্কারও থাকবে। এছাড়াও, বিলের একটি অংশ স্থাপন করা যেতে পারে এবং বিলের একটি অংশ নেওয়া যেতে পারে এবং চূড়ান্ত বিস্তৃত হার 0.0২% এ হ্রাস করা যেতে পারে। এছাড়াও, এফএমজেড কর্মকর্তা বাইনারেন্সের সাথে পরিষেবা চার্জ ছাড়ের বিষয়টিও আলোচনা করছেন। আপনি এটির অপেক্ষায় থাকতে পারেন।
আর্বিট্রেজের উদ্দেশ্য হল একটি স্থিতিশীল মূল্য পার্থক্য খুঁজে পাওয়া। মূল্য পার্থক্যের মূল্য পার্থক্য আরও স্থিতিশীল। অতএব, প্রজাপতি আর্বিট্রেজ ক্রস পিরিয়ড এবং ফিউচার-স্পটের তুলনায় অনেক কম ঝুঁকিপূর্ণ, এবং এটি ম্যানুয়ালিও পরিচালিত হতে পারে। এই কৌশলটি কেবল একটি ভূমিকা হিসাবে কাজ করে। বাস্তব বটে লেখার সময় অনেকগুলি বিষয় বিবেচনা করা দরকার। যোগাযোগের জন্য আপনাকে স্বাগতম।
[২৩] এঃ
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)
[ ] এঃ