بائننس فیوچر ملٹی کرنسی ہیجنگ حکمت عملی پر تحقیق حصہ 1
ڈیش بورڈ کے صفحے پر ریسرچ بٹن پر کلک کریں ، اور پھر داخل کرنے کے لئے تیر پر کلک کریں۔ اپ لوڈ کردہ.pynb پسدید فائل کھولیں اور قطار بہ قطار چلانے کے لئے شفٹ + انٹری دبائیں۔ ریسرچ ماحول کے استعمال کی مدد میں بنیادی سبق موجود ہیں۔
بائننس نے اسپاٹ پر بہت سارے الٹکوئن درج کیے ہیں۔ اگرچہ قلیل مدتی اتار چڑھاؤ غیر یقینی ہیں ، لیکن اگر آپ طویل عرصے تک روزانہ کی لائن کو دیکھیں تو ، آپ کو معلوم ہوگا کہ وہ بنیادی طور پر 90٪ سے زیادہ گر چکے ہیں ، اور کچھ میں سب سے زیادہ قیمت کے حصے کا صرف ایک حصہ ہے۔ تاہم ، اسپاٹ کے لئے کوئی عالمگیر مختصر فروخت کا طریقہ نہیں ہے ، اور الٹکوئن کو نہ چھونے کے علاوہ کوئی خاص سفارش نہیں ہے۔ پچھلے دو مہینوں میں ، بائننس فیوچر نے 20 سے زیادہ دائمی معاہدوں کا آغاز کیا ہے ، جن میں سے بیشتر مرکزی دھارے کی کرنسیاں ہیں ، اور کچھ نامعلوم ہیں۔ اس سے ہمیں ان الٹکوئن مجموعوں کو مختصر کرنے کا ذریعہ ملتا ہے۔ الٹکوئن اور بی ٹی سی کے مابین ارتباط گتانک کا استعمال ایک موثر تجزیہ کا طریقہ ہوگا ، دو حکمت عملی تیار کی جاسکتی ہیں۔
پہلی حکمت عملی: غیر مرکزی مساوی میں الٹکوئنز کی منتخب کردہ ٹوکری کو مختصر فروخت کرنا ، اور اسی وقت خطرات اور اتار چڑھاؤ کو کم کرنے کے ل position ہیج پوزیشن بی ٹی سی کی ایک ہی مقدار کو خریدنا۔ قیمتوں میں اتار چڑھاو کے ساتھ ، مختصر پوزیشنوں کی قیمتوں کو مستقل اور لمبی پوزیشنوں کے برابر رکھنے کے لئے پوزیشنوں کو مستقل طور پر ایڈجسٹ کریں۔ بنیادی طور پر یہ ایک آپریشن ہے جس میں الٹکوئن-بٹکوئن قیمت انڈیکس کو مختصر فروخت کرنا ہے۔
دوسری حکمت عملی: altcoin-bitcoin قیمت انڈیکس سے زیادہ قیمت والی کرنسیوں کو مختصر کرنا ، اور انڈیکس سے کم کرنسیوں کے ساتھ حسرت کرنا ، انحراف جتنا بڑا ہوگا ، پوزیشن اتنی ہی بڑی ہوگی۔ اسی وقت ، بی ٹی سی (یا نہیں) کے ساتھ غیر محفوظ پوزیشنوں کو ہیج کرنا۔
# Libraries to import
import pandas as pd
import requests
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
%matplotlib inline
بائننس پرتیوتھ کنٹریکٹ میں فی الحال درج کرنسیاں ، جو اس کے API انٹرفیس کا استعمال کرتے ہوئے حاصل کی جاسکتی ہیں ، ان کی کل تعداد 23 (بی ٹی سی کو چھوڑ کر) ہے۔
#Info = requests.get('https://fapi.binance.com/fapi/v1/exchangeInfo')
#symbols = [symbol_info['baseAsset'] for symbol_info in Info.json()['symbols']]
symbols = ['ETH', 'BCH', 'XRP', 'EOS', 'LTC', 'TRX', 'ETC', 'LINK', 'XLM', 'ADA', 'XMR', 'DASH', 'ZEC', 'XTZ', 'BNB', 'ATOM', 'ONT', 'IOTA', 'BAT', 'VET', 'NEO', 'QTUM', 'IOST']
سب سے پہلے ، آئیے پچھلے سال میں بٹ کوائن کے لئے الٹکوئنز کی قیمت کی نقل و حرکت کا مطالعہ کریں۔ میں نے پہلے سے ڈیٹا ڈاؤن لوڈ کیا ہے اور اسے فورم پر پوسٹ کیا ہے ، جسے براہ راست تحقیقی ماحول میں حوالہ دیا جاسکتا ہے۔
price_btc = pd.read_csv('https://www.fmz.com/upload/asset/1ef1af8ec28a75a2dcb.csv', index_col = 0)
price_btc.index = pd.to_datetime(price_btc.index,unit='ms') #Index date
price_btc.tail()
نتائج:
5 صفیں × 23 کالم
سب سے پہلے ان کرنسیوں کی قیمتیں کھینچیں تاکہ رجحان کو دیکھا جاسکے ، اعداد و شمار کو معمول پر لانا چاہئے۔ یہ دیکھا جاسکتا ہے کہ چار کرنسیوں کے علاوہ ، دیگر کرنسیوں کی قیمتوں کے رجحانات بنیادی طور پر ایک جیسے ہیں ، جس میں نیچے کی رجحان ظاہر ہوتا ہے۔
price_btc_norm = price_btc/price_btc.fillna(method='bfill').iloc[0,]
price_btc_norm.plot(figsize=(16,6),grid = True,legend=False);
آخری قیمت کی تبدیلیوں کو ترتیب دے کر ، آپ کو کئی سکے مل سکتے ہیں جو واضح طور پر مختلف ہیں ، یعنی LINK ، XTZ ، BCH ، ETH۔ وضاحت کریں کہ وہ اکثر اپنا رجحان چلا سکتے ہیں ، اور ان کو مختصر کرنا زیادہ خطرہ ہے اور اسے حکمت عملی سے خارج کرنے کی ضرورت ہے۔
باقی کرنسیوں کے تعلق کے ضریب کا گرمی کا نقشہ بنائیں، اور دیکھیں کہ ETC اور ATOM کا رجحان بھی نسبتا خاص ہے اور اسے خارج کیا جاسکتا ہے۔
price_btc_norm.iloc[-1,].sort_values()[-5:]
نتائج:
ETH 0.600417
ETC 0.661616
BCH 1.141961
XTZ 2.512195
LINK 2.764495
Name: 2020-03-25 00:00:00, dtype: float64
trade_symbols = list(set(symbols)-set(['LINK','XTZ','BCH', 'ETH'])) # Remaining currencies
plt.subplots(figsize=(12, 12)) # Set the screen size
sns.heatmap(price_btc[trade_symbols].corr(), annot=True, vmax=1, square=True, cmap="Blues");
آخری باقی کرنسی سالانہ اوسطا 66٪ گر گئی ، ظاہر ہے کہ شارٹ شیٹ کے لئے کافی گنجائش موجود ہے۔ ان سکے کے رجحان کو الٹکوئن قیمت انڈیکس میں مرتب کرتے ہوئے ، یہ معلوم ہوا کہ یہ بنیادی طور پر پورے راستے میں گر گیا ، یہ پچھلے سال کی دوسری ششماہی میں زیادہ مستحکم تھا ، اور اس سال پورے راستے میں گرنا شروع ہوا۔ اس مطالعہ میں
یہ نوٹ کیا جانا چاہئے کہ موجودہ الٹکوئن انڈیکس پچھلے سال کے نچلے مقام پر ہے۔ شاید یہ ایک مختصر موقع نہیں ہے ، بلکہ خریدنے کا ایک طویل موقع ہے۔ آپ کو خود ہی فیصلہ کرنا ہے۔
trade_symbols = list(set(symbols)-set(['LINK','XTZ','BCH', 'ETH', 'ETC','ATOM','BNB','EOS','LTC'])) # You can set the remaining currencies, which you want to subtract.
1-price_btc_norm[trade_symbols].iloc[-1,].mean()
نتائج:
0.6714306758250285
price_btc_norm[trade_symbols].mean(axis=1).plot(figsize=(16,6),grid = True,legend=False);
اسی طرح بائننس پائیداری کے اعداد و شمار کو بھی جمع کیا گیا ہے، آپ اسے براہ راست اپنی نوٹ بک میں بھی حوالہ دے سکتے ہیں، اعداد و شمار 28 جنوری سے 31 مارچ 2020 تک 1h مارکیٹ K لائن ہیں، کیونکہ بائننس کے زیادہ تر دائمی معاہدے صرف دو ماہ کے لئے دوپہر کے کھانے کے لئے جمع کیے گئے ہیں، لہذا ڈیٹا بیک ٹیسٹ کے لئے کافی ہے.
price_usdt = pd.read_csv('https://www.fmz.com/upload/asset/20227de6c1d10cb9dd1.csv ', index_col = 0)
price_usdt.index = pd.to_datetime(price_usdt.index)
price_usdt.tail()
نتائج:
سب سے پہلے معمول کے اعداد و شمار کے ساتھ مجموعی رجحان کو دیکھیں۔ مارچ کے زوال میں ، فروری کے اوائل کی قیمت کے مقابلے میں ، قیمت میں عام طور پر کمی واقع ہوئی ، جس سے یہ ظاہر ہوتا ہے کہ دائمی معاہدے کا خطرہ بھی بہت زیادہ ہے۔ کمی کی یہ لہر حکمت عملی کے لئے ایک بڑا چیلنج ٹیسٹ بھی ہے۔
price_usdt_norm = price_usdt/price_usdt.fillna(method='bfill').iloc[0,]
price_usdt_norm.plot(figsize=(16,6),grid = True,legend=False);
اس سکہ کی انڈیکس قیمت بنائیں جسے ہم بٹ کوائن کے مقابلے میں فروخت کرنا چاہتے ہیں، حکمت عملی کا اصول اس منحنی خطوط کو مختصر کرنا ہے، اور واپسی بنیادی طور پر اس منحنی خطوط کا الٹ ہے۔
price_usdt_btc = price_usdt.divide(price_usdt['BTC'],axis=0)
price_usdt_btc_norm = price_usdt_btc/price_usdt_btc.fillna(method='bfill').iloc[0,]
price_usdt_btc_norm[trade_symbols].mean(axis=1).plot(figsize=(16,6),grid = True);
#price_usdt_btc_norm.mean(axis=1).plot(figsize=(16,6),grid = True,legend=False);
چونکہ ایف ایم زیڈ لوکل بیک ٹیسٹ میں تمام کرنسیوں کے لئے ڈیٹا نہیں ہے اور ملٹی کرنسی بیک ٹیسٹ کی حمایت نہیں کرتا ہے ، لہذا بیک ٹیسٹ انجن کو دوبارہ نافذ کرنا ضروری ہے۔ لہذا میں نے ایک نیا بیک ٹیسٹ انجن لکھا ، یہ نسبتا simple آسان ہے ، لیکن بنیادی طور پر کافی ہے۔ لین دین کی فیس کو مدنظر رکھتے ہوئے ، لیکن بنیادی طور پر سرمایہ کی شرح کو نظرانداز کیا ، مارجن کی شرح کو برقرار رکھنے کی صورتحال پر غور نہیں کیا گیا۔ کل ایکویٹی ، مقبوضہ مارجن ، اور بیعانہ ریکارڈ کیا گیا۔ چونکہ اس حکمت عملی کی خصوصیت یہ ہے کہ لمبی پوزیشن مختصر پوزیشن کے برابر ہے ، لہذا سرمایہ کی شرحوں کا اثر اہم نہیں ہے۔
بیک ٹیسٹ میں قیمتوں میں کمی کی صورتحال کو مدنظر نہیں رکھا گیا ہے ، آپ خود ہی ٹرانزیکشن فیس کی نقالی کو بڑھا سکتے ہیں ، بائننس بنانے والے کی کم ٹرانزیکشن فیس کو مدنظر رکھتے ہوئے ، یہاں تک کہ غیر مقبول کرنسی مارکیٹ میں قیمت کا فرق بہت کم ہے ، آپ آرڈر دیتے وقت حقیقی مارکیٹ میں آئس برگ کمیشن کا طریقہ استعمال کرسکتے ہیں ، اس کا اثر اہم نہیں ہونا چاہئے۔
تبادلہ آبجیکٹ بناتے وقت ، آپ کو تجارت کرنے والی کرنسی کی وضاحت کرنے کی ضرورت ہے۔ خریدنا لمبا ہے اور فروخت کرنا مختصر ہے۔ مستقل معاہدے کی حد کی وجہ سے ، جب پوزیشن کھولنا ، تو لمبی اور مختصر پوزیشنیں خود بخود ایک ساتھ بند ہوجاتی ہیں۔ جب فروخت کرنا مختصر پوزیشن اور کرنسیوں کی تعداد منفی ہوتی ہے۔ پیرامیٹرز مندرجہ ذیل ہیں:
class Exchange:
def __init__(self, trade_symbols, leverage=20, commission=0.00005, initial_balance=10000, log=False):
self.initial_balance = initial_balance # Initial asset
self.commission = commission
self.leverage = leverage
self.trade_symbols = trade_symbols
self.date = ''
self.log = log
self.df = pd.DataFrame(columns=['margin','total','leverage','realised_profit','unrealised_profit'])
self.account = {'USDT':{'realised_profit':0, 'margin':0, 'unrealised_profit':0, 'total':initial_balance, 'leverage':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}
def Trade(self, symbol, direction, price, amount, msg=''):
if self.date and self.log:
print('%-20s%-5s%-5s%-10.8s%-8.6s %s'%(str(self.date), 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
self.account['USDT']['realised_profit'] -= price*amount*self.commission # Minus transaction fee
if cover_amount > 0: # close 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 # Free the 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
return True
def Buy(self, symbol, price, amount, msg=''):
self.Trade(symbol, 1, price, amount, msg)
def Sell(self, symbol, price, amount, msg=''):
self.Trade(symbol, -1, price, amount, msg)
def Update(self, date, close_price): # Update assets
self.date = date
self.close = close_price
self.account['USDT']['unrealised_profit'] = 0
for symbol in self.trade_symbols:
if np.isnan(close_price[symbol]):
continue
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']
if self.date.hour in [0,8,16]:
pass
self.account['USDT']['realised_profit'] += -self.account[symbol]['amount']*close_price[symbol]*0.01/100
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.account['USDT']['total'],4)*self.leverage
self.df.loc[self.date] = [self.account['USDT']['margin'],self.account['USDT']['total'],self.account['USDT']['leverage'],self.account['USDT']['realised_profit'],self.account['USDT']['unrealised_profit']]
# First test the backtest engine
e = Exchange(['BTC','XRP'],initial_balance=10000,commission=0,log=True)
e.Buy('BTC',100, 5)
e.Sell('XRP',10, 50)
e.Sell('BTC',105,e.account['BTC']['amount'])
e.Buy('XRP',9,-e.account['XRP']['amount'])
round(e.account['USDT']['realised_profit'],4)
75.0
حکمت عملی منطق:
مختصر trade_value پوزیشن پوزیشن کے سائز کا تعین کرتی ہے۔ سیٹنگ لاگ = سچ ٹرانزیکشن لاگ کو پرنٹ کرے گا
# Need to hedge with BTC
trade_symbols = list(set(symbols)-set(['LINK','XTZ','BCH', 'ETH', 'ETC','ATOM','BNB','EOS','LTC'])) # Remaining currencies
e = Exchange(trade_symbols+['BTC'],initial_balance=10000,commission=0.0005,log=False)
trade_value = 2000
for row in price_usdt.iloc[:].iterrows():
e.Update(row[0], row[1])
empty_value = 0
for symbol in trade_symbols:
price = row[1][symbol]
if np.isnan(price):
continue
if e.account[symbol]['value'] - trade_value < -20 :
e.Sell(symbol, price, round((trade_value-e.account[symbol]['value'])/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
if e.account[symbol]['value'] - trade_value > 20 :
e.Buy(symbol, price, round((e.account[symbol]['value']-trade_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
empty_value += e.account[symbol]['value']
price = row[1]['BTC']
if e.account['BTC']['value'] - empty_value < -20:
e.Buy('BTC', price, round((empty_value-e.account['BTC']['value'])/price,6),round(e.account['BTC']['realised_profit']+e.account['BTC']['unrealised_profit'],2))
if e.account['BTC']['value'] - empty_value > 20:
e.Sell('BTC', price, round((e.account['BTC']['value']-empty_value)/price,6),round(e.account['BTC']['realised_profit']+e.account['BTC']['unrealised_profit'],2))
stragey_1 = e
ہر کرنسی کا حتمی منافع مندرجہ ذیل ہے:
pd.DataFrame(stragey_1.account).T.apply(lambda x:round(x,3))
مندرجہ ذیل دو گراف خالص مالیت کے منحنی خطوط اور استعمال شدہ لیوریج ہیں.
خالص مالیت کے منحنی خطوط میں پیلا رنگ الٹکوئن انڈیکس کو مختصر کرنے والے 1x بیعانہ کے اثر کا ہے ۔ یہ دیکھا جاسکتا ہے کہ حکمت عملی بنیادی طور پر انڈیکس کی اتار چڑھاؤ کو بڑھا دیتی ہے ، جو توقعات کے مطابق ہے۔ آخری دو ماہ کی واپسی 60٪ ہے ، زیادہ سے زیادہ ریٹریکشن 20٪ ہے ، اور زیادہ سے زیادہ بیعانہ تقریبا 8 گنا ہے۔ زیادہ تر وقت ، یہ 6 گنا سے بھی کم ہے۔ یہ اب بھی محفوظ ہے۔ سب سے اہم بات ، مکمل ہیجنگ نے حکمت عملی کو 12 مارچ کے ڈوبنے میں بہت کم نقصان پہنچایا ہے۔
جب شارٹ سیل کرنسی کی قیمت بڑھتی ہے اور معاہدے کی قیمت میں اضافہ ہوتا ہے تو ، پوزیشن کم ہوجاتی ہے ، دوسری طرف ، جب منافع حاصل ہوتا ہے تو ، پوزیشن بڑھ جاتی ہے۔ اس سے معاہدے کی کل قیمت مستقل رہتی ہے ، یہاں تک کہ اگر آسمان میں گرنے سے محدود نقصانات ہوتے ہیں۔
لیکن خطرات کا ذکر پہلے بھی کیا گیا ہے ، الٹکوئنز کا اپنا رجحان چلنے کا بہت امکان ہے ، اور نیچے سے بہت زیادہ بڑھ سکتا ہے۔ اس کا انحصار اس بات پر ہے کہ آپ اسے کس طرح استعمال کرتے ہیں۔ اگر آپ الٹکوئن کے بارے میں پرامید ہیں اور سوچتے ہیں کہ یہ نیچے تک پہنچ گیا ہے تو ، آپ اس سمت میں کام کرسکتے ہیں اور اس انڈیکس کو طویل خرید سکتے ہیں۔ یا اگر آپ کچھ کرنسیوں کے بارے میں پرامید ہیں تو ، آپ ان کے ساتھ ہیج کرسکتے ہیں۔
(stragey_1.df['total']/stragey_1.initial_balance).plot(figsize=(18,6),grid = True); # Net worth curve
#(2-price_usdt_btc_norm[trade_symbols].mean(axis=1)).plot(figsize=(18,6),grid = True);
# Strategy leverage
stragey_1.df['leverage'].plot(figsize=(18,6),grid = True);
مزید برآں ، چونکہ USDT کے مقابلے میں altcoin کی قیمت بھی گر گئی ہے ، لہذا انتہائی منصوبہ ہیجڈ نہیں ہے ، براہ راست مختصر فروخت ، لیکن اتار چڑھاؤ بہت بڑا ہے اور ریٹریسیشن زیادہ ہے
trade_symbols = list(set(symbols)-set(['LINK','XTZ','BCH', 'ETH', 'ETC','ATOM','BNB','EOS','LTC'])) # Remaining currencies
e = Exchange(trade_symbols+['BTC'],initial_balance=10000,commission=0.0005,log=False)
trade_value = 2000
for row in price_usdt.iloc[:].iterrows():
e.Update(row[0], row[1])
empty_value = 0
for symbol in trade_symbols:
price = row[1][symbol]
if np.isnan(price):
continue
if e.account[symbol]['value'] - trade_value < -20 :
e.Sell(symbol, price, round((trade_value-e.account[symbol]['value'])/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
if e.account[symbol]['value'] - trade_value > 20 :
pass
#e.Buy(symbol, price, round((e.account[symbol]['value']-trade_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
empty_value += e.account[symbol]['value']
stragey_1b = e
(stragey_1b.df['total']/stragey_1.initial_balance).plot(figsize=(18,6),grid = True); # Net worth curve
(2-price_usdt_btc_norm[trade_symbols].mean(axis=1)).plot(figsize=(18,6),grid = True);
حکمت عملی منطق:
trade_value بھی کھلی پوزیشنوں کے سائز کو کنٹرول کرتا ہے. آپ بھی diff/0.001 کے تبادلوں کے عنصر کو تبدیل کر سکتے ہیں
trade_symbols = list(set(symbols)-set(['LINK','XTZ','BCH', 'ETH'])) # Remaining currencies
price_usdt_btc_norm_mean = price_usdt_btc_norm[trade_symbols].mean(axis=1)
e = Exchange(trade_symbols+['BTC'],initial_balance=10000,commission=0.0005,log=False)
trade_value = 300
for row in price_usdt.iloc[:].iterrows():
e.Update(row[0], row[1])
empty_value = 0
for symbol in trade_symbols:
price = row[1][symbol]
if np.isnan(price):
continue
diff = price_usdt_btc_norm.loc[row[0],symbol] - price_usdt_btc_norm_mean[row[0]]
aim_value = -trade_value*round(diff/0.01,0)
now_value = e.account[symbol]['value']*np.sign(e.account[symbol]['amount'])
empty_value += now_value
if aim_value - now_value > 50:
e.Buy(symbol, price, round((aim_value - now_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
if aim_value - now_value < -50:
e.Sell(symbol, price, -round((aim_value - now_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
price = row[1]['BTC']
aim_value = -empty_value
now_value = e.account['BTC']['value']*np.sign(e.account['BTC']['amount'])
if aim_value - now_value > 50:
e.Buy('BTC', price, round((aim_value - now_value)/price, 6),round(e.account['BTC']['realised_profit']+e.account['BTC']['unrealised_profit'],2))
if aim_value - now_value < -50:
e.Sell('BTC', price, -round((aim_value - now_value)/price, 6),round(e.account['BTC']['realised_profit']+e.account['BTC']['unrealised_profit'],2))
stragey_2 = e
دوسری حکمت عملی کی واپسی پہلی حکمت عملی سے بہت بہتر ہے۔ پچھلے دو مہینوں میں ، اس کی 100٪ واپسی ہے ، لیکن پھر بھی اس میں 20٪ کی واپسی ہے۔ پچھلے ہفتے ، مارکیٹ میں چھوٹے اتار چڑھاؤ کی وجہ سے ، واپسی واضح نہیں ہے۔ مجموعی طور پر فائدہ اٹھانا زیادہ نہیں ہے۔ یہ حکمت عملی کوشش کرنے کے قابل ہے۔ انحراف کی ڈگری پر منحصر ہے ، زیادہ سے زیادہ 7800 USDT پوزیشن کھولی گئی۔
نوٹ کریں کہ اگر ایک کرنسی ایک آزاد رجحان چلتی ہے، مثال کے طور پر، یہ انڈیکس کے سلسلے میں کئی گنا بڑھ گئی ہے، تو یہ کرنسی میں ایک بڑی تعداد میں مختصر پوزیشنوں کو جمع کرے گا، اور اسی تیز کمی بھی طویل خریدنے کی حکمت عملی کو بھی بنا دے گی، جو زیادہ سے زیادہ افتتاحی پوزیشن کو محدود کر سکتی ہے.
(stragey_2.df['total']/stragey_2.initial_balance).plot(figsize=(18,6),grid = True);
# Summary results by currency
pd.DataFrame(e.account).T.apply(lambda x:round(x,3))
e.df['leverage'].plot(figsize=(18,6),grid = True);
اگر ہیجنگ نہ کرنے کا نتیجہ مندرجہ ذیل ہے تو فرق دراصل بہت زیادہ نہیں ہے۔ کیونکہ لمبی اور مختصر پوزیشنیں بنیادی طور پر متوازن ہیں۔
trade_symbols = list(set(symbols)-set(['LINK','XTZ','BCH', 'ETH'])) # Remaining currencies
price_usdt_btc_norm_mean = price_usdt_btc_norm[trade_symbols].mean(axis=1)
e = Exchange(trade_symbols,initial_balance=10000,commission=0.0005,log=False)
trade_value = 300
for row in price_usdt.iloc[:].iterrows():
e.Update(row[0], row[1])
empty_value = 0
for symbol in trade_symbols:
price = row[1][symbol]
if np.isnan(price):
continue
diff = price_usdt_btc_norm.loc[row[0],symbol] - price_usdt_btc_norm_mean[row[0]]
aim_value = -trade_value*round(diff/0.01,1)
now_value = e.account[symbol]['value']*np.sign(e.account[symbol]['amount'])
empty_value += now_value
if aim_value - now_value > 20:
e.Buy(symbol, price, round((aim_value - now_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
if aim_value - now_value < -20:
e.Sell(symbol, price, -round((aim_value - now_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
stragey_2b = e
(stragey_2b.df['total']/stragey_2.initial_balance).plot(figsize=(18,6),grid = True);
#(stragey_2.df['total']/stragey_2.initial_balance).plot(figsize=(18,6),grid = True); # Can be stacked together
اگر آپ USDT قیمت رجسٹریشن کا حوالہ دیتے ہیں، تو اثر بہت بدتر ہوگا
trade_symbols = list(set(symbols)-set(['LINK','XTZ','BCH', 'ETH']))+['BTC'] #Remaining currencies
price_usdt_norm_mean = price_usdt_norm[trade_symbols].mean(axis=1)
e = Exchange(trade_symbols,initial_balance=10000,commission=0.0005,log=False)
trade_value = 300
for row in price_usdt.iloc[:].iterrows():
e.Update(row[0], row[1])
empty_value = 0
for symbol in trade_symbols+['BTC']:
price = row[1][symbol]
if np.isnan(price):
continue
diff = price_usdt_norm.loc[row[0],symbol] - price_usdt_norm_mean[row[0]]
aim_value = -trade_value*round(diff/0.01,1)
now_value = e.account[symbol]['value']*np.sign(e.account[symbol]['amount'])
empty_value += now_value
if aim_value - now_value > 20:
e.Buy(symbol, price, round((aim_value - now_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
if aim_value - now_value < -20:
e.Sell(symbol, price, -round((aim_value - now_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
stragey_2c = e
(stragey_2c.df['total']/stragey_2.initial_balance).plot(figsize=(18,6),grid = True);
(stragey_2b.df['total']/stragey_2.initial_balance).plot(figsize=(18,6),grid = True);
اگر آپ زیادہ سے زیادہ پوزیشن کی قیمت کو محدود، کارکردگی بدتر ہو جائے گا
trade_symbols = list(set(symbols)-set(['LINK','XTZ','BCH', 'ETH'])) #Remaining currencies
price_usdt_btc_norm_mean = price_usdt_btc_norm[trade_symbols].mean(axis=1)
e = Exchange(trade_symbols+['BTC'],initial_balance=10000,commission=0.0005,log=False)
trade_value = 300
for row in price_usdt.iloc[:].iterrows():
e.Update(row[0], row[1])
empty_value = 0
for symbol in trade_symbols:
price = row[1][symbol]
if np.isnan(price):
continue
diff = price_usdt_btc_norm.loc[row[0],symbol] - price_usdt_btc_norm_mean[row[0]]
aim_value = -trade_value*round(diff/0.01,1)
now_value = e.account[symbol]['value']*np.sign(e.account[symbol]['amount'])
empty_value += now_value
if aim_value - now_value > 20 and abs(aim_value)<3000:
e.Buy(symbol, price, round((aim_value - now_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
if aim_value - now_value < -20 and abs(aim_value)<3000:
e.Sell(symbol, price, -round((aim_value - now_value)/price, 6),round(e.account[symbol]['realised_profit']+e.account[symbol]['unrealised_profit'],2))
price = row[1]['BTC']
aim_value = -empty_value
now_value = e.account['BTC']['value']*np.sign(e.account['BTC']['amount'])
if aim_value - now_value > 20:
e.Buy('BTC', price, round((aim_value - now_value)/price, 6),round(e.account['BTC']['realised_profit']+e.account['BTC']['unrealised_profit'],2))
if aim_value - now_value < -20:
e.Sell('BTC', price, -round((aim_value - now_value)/price, 6),round(e.account['BTC']['realised_profit']+e.account['BTC']['unrealised_profit'],2))
stragey_2d = e
(stragey_2d.df['total']/stragey_2.initial_balance).plot(figsize=(17,6),grid = True);
پہلی حکمت عملی اس حقیقت کا فائدہ اٹھاتی ہے کہ الٹکوئنز کی مجموعی قیمت بٹ کوائنز کی طرح اچھی نہیں ہے۔ اگر آپ طویل بٹ کوائنز خریدتے ہیں تو ، آپ اس حکمت عملی پر طویل عرصے تک قائم رہنا چاہتے ہیں۔ طویل اور مختصر پوزیشنوں کے مساوات کی وجہ سے ، آپ بنیادی طور پر 8h کی فنڈنگ کی شرح سے نہیں ڈرتے ہیں۔ طویل مدتی میں ، جیت کی شرح نسبتا high زیادہ ہے۔ لیکن مجھے یہ بھی خدشہ ہے کہ الٹکوئن فی الحال نیچے ہے ، اور یہ بڑھتی ہوئی رجحان سے باہر چل سکتا ہے اور اس حکمت عملی کا نقصان ہوسکتا ہے۔
دوسری حکمت عملی میں الٹکوئن کی قیمت رجسٹریشن کی خصوصیت کا استعمال کیا جاتا ہے ، جو انڈیکس سے زیادہ بڑھتی ہے اور اس میں پیچھے ہٹنے کا امکان زیادہ ہوتا ہے۔ تاہم ، یہ ایک ہی کرنسی میں بہت ساری پوزیشنیں جمع کرسکتا ہے۔ اگر کوئی خاص کرنسی واقعی پیچھے نہیں گرتی ہے تو ، اس سے بڑا نقصان ہوگا۔
حکمت عملی کے شروع ہونے کے مختلف وقت اور مخصوص پیرامیٹرز کی وجہ سے ، اس حکمت عملی کو طویل عرصے تک استعمال کرنے والے لوگوں کا اثر زیادہ نہیں ہونا چاہئے۔
مختصر طور پر، کوئی کامل حکمت عملی نہیں ہے، صرف حکمت عملی کے لئے صحیح رویہ، یہ آخر میں صارف کے خطرات کی تفہیم اور مستقبل کے فیصلے پر منحصر ہے.