بائننس فیوچر ملٹی کرنسی ہیجنگ حکمت عملی پر تحقیق حصہ 1

مصنف:نیکی, تخلیق: 2020-05-09 11:14:50, تازہ کاری: 2023-11-04 19:49:01

img

بائننس فیوچر ملٹی کرنسی ہیجنگ حکمت عملی پر تحقیق حصہ 1

ڈیش بورڈ کے صفحے پر ریسرچ بٹن پر کلک کریں ، اور پھر داخل کرنے کے لئے تیر پر کلک کریں۔ اپ لوڈ کردہ.pynb پسدید فائل کھولیں اور قطار بہ قطار چلانے کے لئے شفٹ + انٹری دبائیں۔ ریسرچ ماحول کے استعمال کی مدد میں بنیادی سبق موجود ہیں۔

img

حکمت عملی کی وجوہات

بائننس نے اسپاٹ پر بہت سارے الٹکوئن درج کیے ہیں۔ اگرچہ قلیل مدتی اتار چڑھاؤ غیر یقینی ہیں ، لیکن اگر آپ طویل عرصے تک روزانہ کی لائن کو دیکھیں تو ، آپ کو معلوم ہوگا کہ وہ بنیادی طور پر 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()

نتائج:

img img

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);

img

آخری قیمت کی تبدیلیوں کو ترتیب دے کر ، آپ کو کئی سکے مل سکتے ہیں جو واضح طور پر مختلف ہیں ، یعنی 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");

img

آخری باقی کرنسی سالانہ اوسطا 66٪ گر گئی ، ظاہر ہے کہ شارٹ شیٹ کے لئے کافی گنجائش موجود ہے۔ ان سکے کے رجحان کو الٹکوئن قیمت انڈیکس میں مرتب کرتے ہوئے ، یہ معلوم ہوا کہ یہ بنیادی طور پر پورے راستے میں گر گیا ، یہ پچھلے سال کی دوسری ششماہی میں زیادہ مستحکم تھا ، اور اس سال پورے راستے میں گرنا شروع ہوا۔ اس مطالعہ میں LINK ، XTZ ، BCH ، ETH ، ETC ، ATOM ، BNB ، EOS ، LTC نے پہلی حکمت عملی کے مختصر میں حصہ نہیں لیا ، مخصوص تفصیلات کو خود ہی بیک ٹیسٹ کیا جاسکتا ہے۔

یہ نوٹ کیا جانا چاہئے کہ موجودہ الٹکوئن انڈیکس پچھلے سال کے نچلے مقام پر ہے۔ شاید یہ ایک مختصر موقع نہیں ہے ، بلکہ خریدنے کا ایک طویل موقع ہے۔ آپ کو خود ہی فیصلہ کرنا ہے۔

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);

img

بائننس پائیداری کے اعداد و شمار

اسی طرح بائننس پائیداری کے اعداد و شمار کو بھی جمع کیا گیا ہے، آپ اسے براہ راست اپنی نوٹ بک میں بھی حوالہ دے سکتے ہیں، اعداد و شمار 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()

نتائج:

img img

سب سے پہلے معمول کے اعداد و شمار کے ساتھ مجموعی رجحان کو دیکھیں۔ مارچ کے زوال میں ، فروری کے اوائل کی قیمت کے مقابلے میں ، قیمت میں عام طور پر کمی واقع ہوئی ، جس سے یہ ظاہر ہوتا ہے کہ دائمی معاہدے کا خطرہ بھی بہت زیادہ ہے۔ کمی کی یہ لہر حکمت عملی کے لئے ایک بڑا چیلنج ٹیسٹ بھی ہے۔

price_usdt_norm = price_usdt/price_usdt.fillna(method='bfill').iloc[0,]
price_usdt_norm.plot(figsize=(16,6),grid = True,legend=False);

img

اس سکہ کی انڈیکس قیمت بنائیں جسے ہم بٹ کوائن کے مقابلے میں فروخت کرنا چاہتے ہیں، حکمت عملی کا اصول اس منحنی خطوط کو مختصر کرنا ہے، اور واپسی بنیادی طور پر اس منحنی خطوط کا الٹ ہے۔

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);

img

بیک ٹسٹ انجن

چونکہ ایف ایم زیڈ لوکل بیک ٹیسٹ میں تمام کرنسیوں کے لئے ڈیٹا نہیں ہے اور ملٹی کرنسی بیک ٹیسٹ کی حمایت نہیں کرتا ہے ، لہذا بیک ٹیسٹ انجن کو دوبارہ نافذ کرنا ضروری ہے۔ لہذا میں نے ایک نیا بیک ٹیسٹ انجن لکھا ، یہ نسبتا simple آسان ہے ، لیکن بنیادی طور پر کافی ہے۔ لین دین کی فیس کو مدنظر رکھتے ہوئے ، لیکن بنیادی طور پر سرمایہ کی شرح کو نظرانداز کیا ، مارجن کی شرح کو برقرار رکھنے کی صورتحال پر غور نہیں کیا گیا۔ کل ایکویٹی ، مقبوضہ مارجن ، اور بیعانہ ریکارڈ کیا گیا۔ چونکہ اس حکمت عملی کی خصوصیت یہ ہے کہ لمبی پوزیشن مختصر پوزیشن کے برابر ہے ، لہذا سرمایہ کی شرحوں کا اثر اہم نہیں ہے۔

بیک ٹیسٹ میں قیمتوں میں کمی کی صورتحال کو مدنظر نہیں رکھا گیا ہے ، آپ خود ہی ٹرانزیکشن فیس کی نقالی کو بڑھا سکتے ہیں ، بائننس بنانے والے کی کم ٹرانزیکشن فیس کو مدنظر رکھتے ہوئے ، یہاں تک کہ غیر مقبول کرنسی مارکیٹ میں قیمت کا فرق بہت کم ہے ، آپ آرڈر دیتے وقت حقیقی مارکیٹ میں آئس برگ کمیشن کا طریقہ استعمال کرسکتے ہیں ، اس کا اثر اہم نہیں ہونا چاہئے۔

تبادلہ آبجیکٹ بناتے وقت ، آپ کو تجارت کرنے والی کرنسی کی وضاحت کرنے کی ضرورت ہے۔ خریدنا لمبا ہے اور فروخت کرنا مختصر ہے۔ مستقل معاہدے کی حد کی وجہ سے ، جب پوزیشن کھولنا ، تو لمبی اور مختصر پوزیشنیں خود بخود ایک ساتھ بند ہوجاتی ہیں۔ جب فروخت کرنا مختصر پوزیشن اور کرنسیوں کی تعداد منفی ہوتی ہے۔ پیرامیٹرز مندرجہ ذیل ہیں:

  • trade_symbols: تجارت کی جانے والی کرنسیوں کی فہرست
  • لیول: لیول، اثر مارجن،
  • کمیشن: ٹرانزیکشن فیس، ڈیفالٹ 0.00005
  • initial_balance: ابتدائی اثاثہ، USDT تشخیص
  • log: کیا ٹرانزیکشن ریکارڈ پرنٹ کرنا ہے
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

پہلی حکمت عملی کا کوڈ

حکمت عملی منطق:

  • کرنسی کی قیمت چیک کریں، اگر نہیں nan، آپ کی تجارت کر سکتے ہیں
  • الٹکوئن معاہدے کی قیمت چیک کریں۔ اگر یہ ہدف کی قیمت trade_value سے کم ہے تو ، اس کا مساوی فرق مختصر فروخت کیا جائے گا ، اور اگر یہ زیادہ ہے تو ، پوزیشن کو بند کرنے کے لئے مساوی رقم خریدی جائے گی۔
  • تمام altcoins کی مختصر قدر شامل کریں اور اس کے خلاف ہیج کرنے کے لئے بی ٹی سی کی پوزیشن کو ایڈجسٹ کریں۔

مختصر 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))

img

مندرجہ ذیل دو گراف خالص مالیت کے منحنی خطوط اور استعمال شدہ لیوریج ہیں.

خالص مالیت کے منحنی خطوط میں پیلا رنگ الٹکوئن انڈیکس کو مختصر کرنے والے 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);

img

# Strategy leverage
stragey_1.df['leverage'].plot(figsize=(18,6),grid = True);

img

مزید برآں ، چونکہ 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);

img

دوسری حکمت عملی کا کوڈ

حکمت عملی منطق:

  • چیک کریں کہ کیا قیمت ہے یا تجارت کرنے کی قیمت ہے
  • انڈیکس سے کرنسی کی قیمت کے انحراف کی جانچ پڑتال کریں
  • انحراف فیصلے کی بنیاد پر طویل اور مختصر جاؤ، اور انحراف کے سائز کے مطابق پوزیشن کا فیصلہ
  • غیر محفوظ پوزیشنوں کا حساب کتاب اور بی ٹی سی کے ساتھ ہیجنگ

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);

img

# Summary results by currency
pd.DataFrame(e.account).T.apply(lambda x:round(x,3))

img

e.df['leverage'].plot(figsize=(18,6),grid = True);

img

اگر ہیجنگ نہ کرنے کا نتیجہ مندرجہ ذیل ہے تو فرق دراصل بہت زیادہ نہیں ہے۔ کیونکہ لمبی اور مختصر پوزیشنیں بنیادی طور پر متوازن ہیں۔

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

img

اگر آپ 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);

img

اگر آپ زیادہ سے زیادہ پوزیشن کی قیمت کو محدود، کارکردگی بدتر ہو جائے گا

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);

img

خلاصہ اور خطرہ

پہلی حکمت عملی اس حقیقت کا فائدہ اٹھاتی ہے کہ الٹکوئنز کی مجموعی قیمت بٹ کوائنز کی طرح اچھی نہیں ہے۔ اگر آپ طویل بٹ کوائنز خریدتے ہیں تو ، آپ اس حکمت عملی پر طویل عرصے تک قائم رہنا چاہتے ہیں۔ طویل اور مختصر پوزیشنوں کے مساوات کی وجہ سے ، آپ بنیادی طور پر 8h کی فنڈنگ کی شرح سے نہیں ڈرتے ہیں۔ طویل مدتی میں ، جیت کی شرح نسبتا high زیادہ ہے۔ لیکن مجھے یہ بھی خدشہ ہے کہ الٹکوئن فی الحال نیچے ہے ، اور یہ بڑھتی ہوئی رجحان سے باہر چل سکتا ہے اور اس حکمت عملی کا نقصان ہوسکتا ہے۔

دوسری حکمت عملی میں الٹکوئن کی قیمت رجسٹریشن کی خصوصیت کا استعمال کیا جاتا ہے ، جو انڈیکس سے زیادہ بڑھتی ہے اور اس میں پیچھے ہٹنے کا امکان زیادہ ہوتا ہے۔ تاہم ، یہ ایک ہی کرنسی میں بہت ساری پوزیشنیں جمع کرسکتا ہے۔ اگر کوئی خاص کرنسی واقعی پیچھے نہیں گرتی ہے تو ، اس سے بڑا نقصان ہوگا۔

حکمت عملی کے شروع ہونے کے مختلف وقت اور مخصوص پیرامیٹرز کی وجہ سے ، اس حکمت عملی کو طویل عرصے تک استعمال کرنے والے لوگوں کا اثر زیادہ نہیں ہونا چاہئے۔

مختصر طور پر، کوئی کامل حکمت عملی نہیں ہے، صرف حکمت عملی کے لئے صحیح رویہ، یہ آخر میں صارف کے خطرات کی تفہیم اور مستقبل کے فیصلے پر منحصر ہے.


متعلقہ

مزید