حال ہی میں ، بائیو کے کوانٹیٹیٹڈ ڈائری میں کہا گیا ہے کہ منفی متعلقہ کرنسیوں کا استعمال کرکے کرنسیوں کا کاروبار کیا جاسکتا ہے ، اور قیمت کے فرق کے مطابق منافع حاصل کیا جاسکتا ہے۔ ڈیجیٹل کرنسیوں میں بنیادی طور پر مثبت وابستگی ہوتی ہے ، منفی وابستگی چند کرنسیوں میں ہوتی ہے ، اکثر خصوصی مارکیٹ ہوتی ہے ، جیسے کچھ عرصے پہلے MEME کرنسیوں کا آزاد بازار ، بڑے ڈسک کے رجحانات کی پیروی نہیں کرتا ہے ، ان کرنسیوں کو منتخب کرتا ہے ، اور توڑنے کے بعد زیادہ کرتا ہے ، یہ طریقہ مخصوص حالات میں منافع بخش ہوسکتا ہے۔ لیکن کوانٹیٹیٹڈ ٹریڈنگ کے شعبے میں سب سے زیادہ عام وابستگی کا استعمال یا تو مثبت تجارت کرنے کے لئے تجارت کرنا ہے ، اس مضمون میں اس حکمت عملی کا خلاصہ کیا جائے گا۔
ڈیجیٹل کرنسی کے جوڑے تجارت ایک تجارتی حکمت عملی ہے جو اعداد و شمار پر مبنی منافع پر مبنی ہے ، جس میں قیمت میں انحراف سے منافع حاصل کرنے کے لئے دو انتہائی متعلقہ ڈیجیٹل کرنسی کے مستقل معاہدوں کو بیک وقت خریدنے اور فروخت کرنے کی کوشش کی جاتی ہے۔ اس مضمون میں اس حکمت عملی کے اصول ، منافع بخش میکانزم ، سکوں کی قسم کو فلٹر کرنے کے طریقوں ، ممکنہ خطرات اور ان کو بہتر بنانے کے طریقوں کے بارے میں تفصیل سے بتایا گیا ہے ، اور کچھ عملی پیتھون کوڈ کی مثالیں فراہم کی گئیں۔
جوڑی ٹریڈنگ کی حکمت عملی دو ڈیجیٹل کرنسیوں کی قیمتوں کے مابین تاریخی وابستگی پر منحصر ہے۔ جب دو کرنسیوں کی قیمتیں مضبوط وابستگی کا مظاہرہ کرتی ہیں تو ، ان کی قیمتوں میں زیادہ تر ہم آہنگی ہوتی ہے۔ اگر کسی وقت ان دونوں کی قیمتوں کے تناسب میں نمایاں انحراف ہوتا ہے تو ، اسے عارضی طور پر غیر معمولی سمجھا جاسکتا ہے ، اور قیمتیں معمول کی سطح پر واپس آنے کا رجحان رکھتی ہیں۔ ڈیجیٹل کرنسیوں کی مارکیٹوں میں بہت زیادہ وابستگی ہوتی ہے ، جب ایک اہم ڈیجیٹل کرنسی جیسے بٹ کوائن میں بڑی اتار چڑھاؤ ہوتی ہے تو ، عام طور پر دوسری ڈیجیٹل کرنسیوں کے مابین وابستگی کا رد عمل پیدا ہوتا ہے۔ کچھ کرنسیوں میں ایک ہی سرمایہ کاری کی تنظیم ، ایک ہی مارکیٹر ، ایک ہی مقابلہ کی وجہ سے بہت واضح سیدھی وابستگی ہوسکتی ہے ، اور یہ مستقل رہ سکتی ہے۔ کچھ منفی وابستگی ہوتی ہے ، لیکن منفی وابستگی کم ہوتی ہے ، اور بہت ساری صورتوں میں حالات کا رخ ہوتا ہے ، کیونکہ دونوں بڑے بازاروں سے متاثر ہوتے ہیں۔
فرض کریں کہ کرنسی A اور کرنسی B میں قیمتوں میں زیادہ وابستگی ہے۔ کسی وقت ، A / B قیمت کے تناسب کی اوسط قیمت 1 ہے۔ اگر کسی وقت ، A / B قیمت کے تناسب میں اضافہ 0.001 سے زیادہ ، یعنی 1.001 سے زیادہ سے زیادہ ہو جاتا ہے تو ، اس وقت مندرجہ ذیل طریقوں سے تجارت کی جاسکتی ہے۔
منافع کی کلید قیمتوں میں انحراف کی واپسی پر فرق کی آمدنی ہے۔ چونکہ قیمتوں میں انحراف عام طور پر مختصر ہوتا ہے ، لہذا تاجروں کو قیمتوں میں واپسی پر فائدہ اٹھانے کے ل the منافع بخش ہونے کے ل.
یہ کوڈ براہ راست استعمال کیا جاسکتا ہے ، بہتر یہ ہے کہ انانکوڈا ڈاؤن لوڈ کریں اور جپیر نوٹ بک میں ڈیبگ کریں۔ براہ راست عام طور پر استعمال ہونے والے ڈیٹا تجزیہ کے پیکیج پر مشتمل ہے۔
import requests
from datetime import date,datetime
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import requests, zipfile, io
%matplotlib inline
Info = requests.get('https://fapi.binance.com/fapi/v1/exchangeInfo')
b_symbols = [s['symbol'] for s in Info.json()['symbols'] if s['contractType'] == 'PERPETUAL' and s['status'] == 'TRADING' and s['quoteAsset'] == 'USDT']
b_symbols = list(filter(lambda x: x[-4:] == 'USDT', [s.split('_')[0] for s in b_symbols]))
b_symbols = [x[:-4] for x in b_symbols]
print(b_symbols) # 获取所有的正在交易的交易对
گیٹ کلینز کا بنیادی فنکشن یہ ہے کہ وہ بِی این اے ایکسچینج سے مخصوص ٹرانزیکشنز کے لئے مستقل معاہدوں کے لئے تاریخی K لائن ڈیٹا حاصل کرے اور اس ڈیٹا کو پانڈا ڈیٹا فریم میں محفوظ کرے۔ K لائن ڈیٹا میں اوپن قیمت ، زیادہ سے زیادہ قیمت ، کم سے کم قیمت ، بند ہونے کی قیمت ، تجارت کی مقدار وغیرہ شامل ہیں۔ اس بار ہم بنیادی طور پر بند ہونے کی قیمت کے اعداد و شمار کا استعمال کرتے ہیں۔
def GetKlines(symbol='BTCUSDT',start='2020-8-10',end='2024-7-01',period='1h',base='fapi',v = 'v1'):
Klines = []
start_time = int(time.mktime(datetime.strptime(start, "%Y-%m-%d").timetuple()))*1000 + 8*60*60*1000
end_time = min(int(time.mktime(datetime.strptime(end, "%Y-%m-%d").timetuple()))*1000 + 8*60*60*1000,time.time()*1000)
intervel_map = {'m':60*1000,'h':60*60*1000,'d':24*60*60*1000}
while start_time < end_time:
time.sleep(0.3)
mid_time = start_time+1000*int(period[:-1])*intervel_map[period[-1]]
url = 'https://'+base+'.binance.com/'+base+'/'+v+'/klines?symbol=%s&interval=%s&startTime=%s&endTime=%s&limit=1000'%(symbol,period,start_time,mid_time)
res = requests.get(url)
res_list = res.json()
if type(res_list) == list and len(res_list) > 0:
start_time = res_list[-1][0]+int(period[:-1])*intervel_map[period[-1]]
Klines += res_list
if type(res_list) == list and len(res_list) == 0:
start_time = start_time+1000*int(period[:-1])*intervel_map[period[-1]]
if mid_time >= end_time:
break
df = pd.DataFrame(Klines,columns=['time','open','high','low','close','amount','end_time','volume','count','buy_amount','buy_volume','null']).astype('float')
df.index = pd.to_datetime(df.time,unit='ms')
return df
اعداد و شمار کی مقدار بہت بڑی ہے، اور تیزی سے ڈاؤن لوڈ کرنے کے لئے، صرف حالیہ 3 ماہ کے لئے گھنٹے کے لئے K لائن ڈیٹا حاصل کیا جاتا ہے۔df_close تمام کرنسیوں کے لئے اختتامی قیمت کے اعداد و شمار پر مشتمل ہے.
start_date = '2024-04-01'
end_date = '2024-07-05'
period = '1h'
df_dict = {}
for symbol in b_symbols:
print(symbol)
if symbol in df_dict.keys():
continue
df_s = GetKlines(symbol=symbol+'USDT',start=start_date,end=end_date,period=period)
if not df_s.empty:
df_dict[symbol] = df_s
df_close = pd.DataFrame(index=pd.date_range(start=start_date, end=end_date, freq=period),columns=df_dict.keys())
for symbol in symbols:
df_close[symbol] = df_dict[symbol].close
df_close = df_close.dropna(how='all')
ایک تبادلے کا اعتراض کی وضاحت کریں جو اگلے ٹیسٹ کے لئے استعمال کیا جاتا ہے
class Exchange:
def __init__(self, trade_symbols, fee=0.0002, initial_balance=10000):
self.initial_balance = initial_balance #初始的资产
self.fee = fee
self.trade_symbols = trade_symbols
self.account = {'USDT':{'realised_profit':0, 'unrealised_profit':0, 'total':initial_balance,
'fee':0, 'leverage':0, 'hold':0, 'long':0, 'short':0}}
for symbol in trade_symbols:
self.account[symbol] = {'amount':0, 'hold_price':0, 'value':0, 'price':0, 'realised_profit':0,'unrealised_profit':0,'fee':0}
def Trade(self, symbol, direction, price, amount):
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.fee #扣除手续费
self.account['USDT']['fee'] += price*amount*self.fee
self.account[symbol]['fee'] += price*amount*self.fee
if cover_amount > 0: #先平仓
self.account['USDT']['realised_profit'] += -direction*(price - self.account[symbol]['hold_price'])*cover_amount #利润
self.account[symbol]['realised_profit'] += -direction*(price - self.account[symbol]['hold_price'])*cover_amount
self.account[symbol]['amount'] -= -direction*cover_amount
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[symbol]['hold_price'] = total_cost/total_amount
self.account[symbol]['amount'] += direction*open_amount
def Buy(self, symbol, price, amount):
self.Trade(symbol, 1, price, amount)
def Sell(self, symbol, price, amount):
self.Trade(symbol, -1, price, amount)
def Update(self, close_price): #对资产进行更新
self.account['USDT']['unrealised_profit'] = 0
self.account['USDT']['hold'] = 0
self.account['USDT']['long'] = 0
self.account['USDT']['short'] = 0
for symbol in self.trade_symbols:
if not np.isnan(close_price[symbol]):
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'] = self.account[symbol]['amount']*close_price[symbol]
if self.account[symbol]['amount'] > 0:
self.account['USDT']['long'] += self.account[symbol]['value']
if self.account[symbol]['amount'] < 0:
self.account['USDT']['short'] += self.account[symbol]['value']
self.account['USDT']['hold'] += abs(self.account[symbol]['value'])
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']['hold']/self.account['USDT']['total'],3)
ربط کا حساب لگانا (انگریزی: correlational calculation) شماریات میں دو متغیرات کے مابین لکیری تعلقات کی پیمائش کرنے کا ایک طریقہ ہے۔ سب سے زیادہ استعمال ہونے والا ربط کا حساب لگانے کا طریقہ پیلرسن کے ربط کا حساب لگانا ہے۔ ذیل میں ربط کا حساب لگانے کے اصول ، فارمولے اور طریقہ کار ہیں۔ پیلرسن کے ربط کا حساب لگانا دو متغیرات کے مابین لکیری تعلقات کی پیمائش کرنے کے لئے استعمال ہوتا ہے ، جس کی قیمت 1 سے 1 کے درمیان ہوتی ہے۔
پیرسن کے متعلقہ گٹھ جوڑ کو دو متغیرات کے مابین مطابقت اور معیاری فرق کا حساب لگانے کے ذریعہ ان کے مابین تعلق کا تعین کیا جاتا ہے۔
[ \rho_{X,Y} = \frac{\text{cov}(X,Y) }{\sigma_X \sigma_Y}]
ان میں شامل ہیں:
ظاہر ہے، اس بات کی کوئی پرواہ نہیں ہے کہ یہ کس طرح شمار کیا جاتا ہے، پیڈون 1 لائن کوڈ کا استعمال کرتے ہوئے تمام کرنسیوں کے لئے متعلقہ حساب لگایا جا سکتا ہے۔ جیسا کہ اس طرح کے تعلق کی گرمی چارٹ دکھایا گیا ہے، سرخ نمائندہ مثبت متعلقہ ہے، نیلے نمائندہ منفی متعلقہ ہے، رنگ زیادہ گہرا ہے. آپ دیکھ سکتے ہیں کہ بڑے ٹکڑے گہرے سرخ ہیں، لہذا یہ کہا جاتا ہے کہ ڈیجیٹل کرنسیوں کی مثبت متعلقہ مضبوط ہے.
import seaborn as sns
corr = df_close.corr()
plt.figure(figsize=(20, 20))
sns.heatmap(corr, annot=False, cmap='coolwarm', vmin=-1, vmax=1)
plt.title('Correlation Heatmap of Cryptocurrency Closing Prices', fontsize=20);
سب سے زیادہ متعلقہ 20 کرنسی کے جوڑے متعلقہ کے لحاظ سے منتخب کیے گئے ہیں۔ نتائج مندرجہ ذیل ہیں۔ ان کی متعلقہ بہت مضبوط ہے ، سب 0.99 سے زیادہ ہیں۔
MANA SAND 0.996562
ICX ZIL 0.996000
STORJ FLOW 0.994193
FLOW SXP 0.993861
STORJ SXP 0.993822
IOTA ZIL 0.993204
SAND 0.993095
KAVA SAND 0.992303
ZIL SXP 0.992285
SAND 0.992103
DYDX ZIL 0.992053
DENT REEF 0.991789
RDNT MANTA 0.991690
STMX STORJ 0.991222
BIGTIME ACE 0.990987
RDNT HOOK 0.990718
IOST GAS 0.990643
ZIL HOOK 0.990576
MATIC FLOW 0.990564
MANTA HOOK 0.990563
اس کا کوڈ مندرجہ ذیل ہے:
corr_pairs = corr.unstack()
# 移除自身相关性(即对角线上的值)
corr_pairs = corr_pairs[corr_pairs != 1]
sorted_corr_pairs = corr_pairs.sort_values(kind="quicksort")
# 提取最相关和最不相关的前20个币种对
most_correlated = sorted_corr_pairs.tail(40)[::-2]
print("最相关的前20个币种对:")
print(most_correlated)
مخصوص ریورس کوڈ درج ذیل ہیں۔ ڈیمو سٹریٹجی کا بنیادی مشاہدہ دو کریپٹو کرنسیوں (IOTA اور ZIL) کی قیمت کا تناسب ہے اور اس تناسب میں ہونے والی تبدیلیوں کے مطابق تجارت کی جاتی ہے۔ مخصوص اقدامات درج ذیل ہیں۔
ابتدائیہ:
e
اس کے علاوہ ، آپ کے اکاؤنٹ میں ایک نیا اکاؤنٹ ہے ، جس میں آپ کے اکاؤنٹ میں ایک نیا اکاؤنٹ بھی ہے۔avg
。value = 1000
。قیمتوں کے اعداد و شمار کو بار بار پروسیس کرنا:
df_close
。diff
。aim_value
، ہر 0.01 انحراف کے لئے، ایک قدر کی تجارت کرتا ہے۔ اور موجودہ اکاؤنٹ ہولڈنگ اور قیمت کی صورتحال پر مبنی خرید و فروخت کی کارروائی کا فیصلہ کرتا ہے۔pair_a
اور خریدنےpair_b
آپریشن۔pair_a
اور فروختpair_b
آپریشن۔اوسط کو درست کریں:
avg
اس کے علاوہ ، آپ کو اپنی مرضی کے مطابق قیمتوں کا تعین کرنے کی ضرورت ہے۔اکاؤنٹس اور ریکارڈز کو اپ ڈیٹ کریں:
res_list
。نتائج کی پیداوار:
res_list
ڈیٹا فریم میں تبدیل کریںres
اس کے علاوہ ، ہم نے اس کے بارے میں مزید تجزیہ اور نمائش کے لئے ایک ویڈیو شیئر کی ہے۔pair_a = 'IOTA'
pair_b = "ZIL"
e = Exchange([pair_a,pair_b], fee=0.0002, initial_balance=10000) #Exchange定义放在评论区
res_list = []
index_list = []
avg = df_close[pair_a][0] / df_close[pair_b][0]
value = 1000
for idx, row in df_close.iterrows():
diff = (row[pair_a] / row[pair_b] - avg)/avg
aim_value = -value * diff / 0.01
if -aim_value + e.account[pair_a]['amount']*row[pair_a] > 0.5*value:
e.Sell(pair_a,row[pair_a],(-aim_value + e.account[pair_a]['amount']*row[pair_a])/row[pair_a])
e.Buy(pair_b,row[pair_b],(-aim_value - e.account[pair_b]['amount']*row[pair_b])/row[pair_b])
if -aim_value + e.account[pair_a]['amount']*row[pair_a] < -0.5*value:
e.Buy(pair_a, row[pair_a],(aim_value - e.account[pair_a]['amount']*row[pair_a])/row[pair_a])
e.Sell(pair_b, row[pair_b],(aim_value + e.account[pair_b]['amount']*row[pair_b])/row[pair_b])
avg = 0.99*avg + 0.01*row[pair_a] / row[pair_b]
index_list.append(idx)
e.Update(row)
res_list.append([e.account['USDT']['total'],e.account['USDT']['hold'],
e.account['USDT']['fee'],e.account['USDT']['long'],e.account['USDT']['short']])
res = pd.DataFrame(data=res_list, columns=['total','hold', 'fee', 'long', 'short'],index = index_list)
res['total'].plot(grid=True);
مجموعی طور پر چار کرنسیوں کے گروپوں کا دوبارہ ٹیسٹ کیا گیا ، نتیجہ نسبتا ideal مثالی تھا۔ موجودہ وابستگی کا حساب مستقبل کے اعداد و شمار کا استعمال کرتے ہوئے کیا جاتا ہے ، لہذا یہ بہت درست نہیں ہے۔ اس مضمون میں بھی اعداد و شمار کو دو حصوں میں تقسیم کیا گیا ہے ، اس کے مطابق پچھلے حساب سے وابستگی ، پچھلے دوبارہ ٹیسٹ ٹرانزیکشن کا نتیجہ۔ کچھ خراب لیکن اچھا ہے۔ صارف کو اپنی مشق کی توثیق کرنے دیں۔
اگرچہ جوڑی ٹریڈنگ کی حکمت عملی نظریاتی طور پر منافع بخش ہوسکتی ہے ، لیکن عملی طور پر کام کرنے میں کچھ خطرات موجود ہیں: کرنسیوں کے مابین وابستگی وقت کے ساتھ تبدیل ہوسکتی ہے ، جس کی وجہ سے حکمت عملی ناکام ہوجاتی ہے۔ انتہائی مارکیٹ کے حالات میں ، قیمتوں میں انحراف بڑھ سکتا ہے ، جس سے بڑے نقصانات ہوتے ہیں۔ کچھ کرنسیوں کی کم لچک ، جس کی وجہ سے تجارت کو انجام دینا مشکل یا لاگت میں اضافہ ہوسکتا ہے۔ کثرت سے تجارت سے پیدا ہونے والی انتظامی فیس منافع کو ختم کرسکتی ہے۔
خطرے کو کم کرنے اور حکمت عملی کے استحکام کو بڑھانے کے لئے ، مندرجہ ذیل اصلاحات پر غور کیا جاسکتا ہے: کرنسیوں کے مابین تعلقات کو باقاعدگی سے دوبارہ گننا ، بروقت تجارت کے جوڑے کو ایڈجسٹ کرنا۔ اسٹاپ نقصان اور اسٹاپ ٹارچ پوائنٹس مرتب کرنا ، جس سے ایک ہی تجارت میں زیادہ سے زیادہ نقصان کو کنٹرول کیا جاسکے۔ ایک ہی وقت میں متعدد کرنسیوں کے جوڑوں کی تجارت کرنا ، خطرے کو پھیلانا۔
ڈیجیٹل کرنسی کے جوڑے کی تجارت کی حکمت عملی منافع بخش ہونے کے لئے قیمتوں میں انحراف کے دوران سودے کی کارروائی کرنے کے لئے کرنسیوں کی قیمتوں کی وابستگی کا فائدہ اٹھاتی ہے۔ اس حکمت عملی کی نظریاتی صلاحیت زیادہ ہے۔ اس کے بعد اس حکمت عملی پر مبنی ایک سادہ ریئل اسٹیٹ حکمت عملی کا منبع کوڈ جاری کیا جائے گا۔ اگر مزید سوالات ہیں یا مزید گفتگو کی ضرورت ہے تو ، کسی بھی وقت بات چیت کا خیرمقدم کریں۔
77924998کیا یہ تحقیق کے قابل ہے، اور کوڈ سورس؟
پھلیاں 888چانگ جنرل اوور ٹائم - ہاہاہا!