交易市場非相關性


實驗目的是什麼?

基本思想是尋找負相關的市場。例如,如果比特幣和以太坊崩盤,我想確定沒有崩盤的市場。我想找到一個“獨立”的市場,而不僅僅是鏡像主要市場。

設置實驗
從Coinbase Pro交易所檢索市場清單。
為每個市場計算兩個移動平均線以確定趨勢。如果較快的移動平均Eg SMA50高於較慢的移動平均Eg SMA200,則市場處於上漲趨勢。反之亦然,如果SMA50低於SMA200,則市場處於下跌趨勢。
出於分析的目的,我創建了一個具有二元指標“ up ”的功能,如果市場(條件)為正,則為1,如果市場(條件)為負,則為0。最終結果應該是一個矩陣,其中市場列表將是行,時間間隔將是列,結果將是1 或0,具體取決於市場是上漲還是下跌。
上述矩陣表應至少為我們提供比較的基礎。
入門

第一步是我們需要導入必要的庫並設置我們的環境。

從seaborn導入heatmap
從matplotlib.pyplot導入圖,
從savefig從熊市貓導入DataFrame
從numpy導入ndarray
從請求導入獲取
時間導入睡眠
%matplotlib 內聯

def get_markets_ndarray()-> ndarray:
resp = get(’ https://api.pro.coinbase.com/products’
如果resp.status_code= 200:
返回
其他:
df = DataFrame(resp.json())
返回df [[‘id’]]。 values

市場= get_markets_ndarray()
打印(市場)
[[‘BCH-EUR’]
[‘BAT-EUR’]
[‘OMG-USD’]
[‘ZEC-USDC’]
[‘ALGO-GBP’]
[‘BAT-USDC’]

[‘USDC- GBP’]
[‘BAL-USD’]
[‘MANA-EUR’]
[‘COMP-BTC’]
[‘DAI-USDC’]]

高清get_market_data(市場:海峽= ‘BTC-GBP’,粒度:INT = 3600) – >數據框:
RESP = GET(F” https://api.pro.coinbase.com/products/{market}/candles?granularity ={str(granularity)}’)
if resp.status_code != 200:
raise Exception(format(resp.json()[‘message’]))
else:
df = DataFrame(resp.json(), columns=[ ‘ epoch’,’low’,’high’,’open’,’close’,’volume’])
df = df.iloc [::-1] .reset_index()
返回df

market_data = get_market_data(‘BTC-GBP’, 3600)
打印(market_data)

1UunkMb-Wc5I4zGn2Mh33rw-1

def preprocess_market(market:str=”BTC-GBP”,粒度:int = 3600)-> DataFrame:
df = get_market_data(market,粒度)
df [‘ma1’] = df.close.rolling(50,min_periods = 1) .mean()
df [‘ma2’] = df.close.rolling(200,min_periods = 1).mean()
df [‘up’] = df [‘ma1’]> df [‘ma2’]
df [‘ up’] = df[‘up’].astype(int)
df = df[[‘up’]]
df = df.rename(columns={‘up’: market})
返回df.T

1RSik7ST1LVDJSyvLNetL4g

df = pd.DataFrame()
for market in get_markets_ndarray():
print (‘Processing’, market[0])

tmp_df = df.append(preprocess_market(market[0], 3600))

if len(tmp_df.T) == 300:
df = df.append(preprocess_market(market[0], 3600))
sleep(0.1) # 避免超過公共費率

處理USDT-USDC
處理ZEC-USDC
處理ETC-BTC

處理BNT-USD
處理GRT-USD
處理SUSHI-GBP

df.dropna(inplace=True)
df = df.astype(int)

打印(df)

1S6a-XB1uhuhlHEWRPzPeIA

df.to_csv(‘coinbasepro_market_analysis.csv’)

圖(figsize =(20,15))
熱圖(df.T.corr())

1_mUUwJpk92K2_P9nd-wcZg

Figure(figsize =(30,50))
df_transpose = df.T
df_transpose.corr()[‘ BTC-GBP ‘] .sort_values(ascending = True).plot(kind =’barh’)

1hwoBUvu6tSbMLMYN2hvXQg
圖片作者

1zYpuY-ZAo2W2kscDeVwDcA
圖片作者

top_10 = df_transpose.corr()[‘BTC-GBP’]。 sort_values(ascending = False).keys()[0:20]
print(top_10)
指數([‘BTC-GBP’,’BTC-USD’,’WBTC-USD’,’BTC-EUR’,’BTC-USDT’,’BTC-USDC’,’ADA-USDC’,’ADA-USD’ , ‘YFI-USD’, ‘ADA-EUR’, ‘ADA-GBP’, ‘OXT-USD’, ‘ETH-GBP’, ‘WBTC-BTC’, ‘ETH-USD’, ‘ETH-DAI’, ‘ ETH-EUR’, ‘ETH-USDT’, ‘ETH-USDC’, ‘STORJ-USD’], dtype=”object”)

bottom_10 = df_transpose.corr()[‘BTC-GBP’]。 sort_values(ascending = True).keys()[0:20]
print(bottom_10)
指數([‘MIR-GBP’,’USDT-EUR’,’USDC-EUR’,’ZEC-BTC’,’DAI-USD’,’CRV-BTC’,’ADA-ETH’,’DAI-USDC’ , ‘UMA-BTC’, ‘COMP-BTC’, ‘USDC-GBP’, ‘MIR-BTC’, ‘USDT-GBP’, ‘REP-BTC’, ‘FIL-BTC’, ‘ICP-BTC’, ‘ SUSHI-ETH”,“ MIR-EUR”,“ MIR-USD”,“ BAT-ETH”],dtype=”object”)

df_filtered = df [〜df_transpose.keys()。str.contains(’USD [TC]’,regex = True)]df_filtered_transpose = df_filtered.T

索引([‘MIR-GBP’,’ZEC-BTC’,’DAI-USD’,’CRV-BTC’,’ADA-ETH’,’UMA-BTC’,’COMP-BTC’,’MIR-BTC’ ,“ REP-BTC”,“ FIL-BTC”,“ ICP-BTC”,“ SUSHI-ETH”,“ MIR-EUR”,“ MIR-USD”,“ BAT-ETH”,“ ZEC-USD”,“ FORTH-BTC’, ‘CRV-EUR’, ‘SUSHI-BTC’, ‘RLC-BTC’], dtype=”object”)
概括

所以你有它。我很想听聽你的想法。我可以在列表中看到ADA,這在某種程度上是我所期望的。它不能完全抵抗比特幣和以太坊崩盤,但往往受到的影響較小。我正在交易ADA-GBP,但根據此ADA-ETH,它是一個更好的選擇。這裡的問題通常是如果比特幣崩盤,以太坊也會發生同樣的情況。我傾向於忽略上面的ETH 選項。

TradingView.comK線走勢圖❤

……而且它是免費的(大部分)

levelup.gitconnected.com

Google Colab

我已經在上面為你提供了所有代碼,但是如果你想要源代碼,我已經創建了一個可以在Google Colab 中輕鬆運行的筆記本。

轉到“ https://colab.research.google.com ” 點擊GitHub標籤對於“輸入GitHub URL 或按組織或用戶搜索”輸入“ https://github.com/whittlem/colabnotebooks ”並按Enter 存儲庫:“ whittlem/colabnotebooks ”,分支:“ main ” 點擊“ CoinbaseProMarketAnalysis.ipynp ” 從菜單中單擊“運行時”,然後單擊“全部運行”

實驗目的是什麼?

基本思想是尋找負相關的市場。例如,如果比特幣和以太坊崩盤,我想確定沒有崩盤的市場。我想找到一個“獨立”的市場,而不僅僅是鏡像主要市場。

設置實驗
從Coinbase Pro交易所檢索市場清單。
為每個市場計算兩個移動平均線以確定趨勢。如果較快的移動平均Eg SMA50高於較慢的移動平均Eg SMA200,則市場處於上漲趨勢。反之亦然,如果SMA50低於SMA200,則市場處於下跌趨勢。
出於分析的目的,我創建了一個具有二元指標“ up ”的功能,如果市場(條件)為正,則為1,如果市場(條件)為負,則為0。最終結果應該是一個矩陣,其中市場列表將是行,時間間隔將是列,結果將是1 或0,具體取決於市場是上漲還是下跌。
上述矩陣表應至少為我們提供比較的基礎。
入門

第一步是我們需要導入必要的庫並設置我們的環境。

從seaborn導入heatmap
從matplotlib.pyplot導入圖,
從savefig從熊市貓導入DataFrame
從numpy導入ndarray
從請求導入獲取
時間導入睡眠
%matplotlib 內聯

def get_markets_ndarray()-> ndarray:
resp = get(’ https://api.pro.coinbase.com/products’
如果resp.status_code= 200:
返回
其他:
df = DataFrame(resp.json())
返回df [[‘id’]]。 values

市場= get_markets_ndarray()
打印(市場)
[[‘BCH-EUR’]
[‘BAT-EUR’]
[‘OMG-USD’]
[‘ZEC-USDC’]
[‘ALGO-GBP’]
[‘BAT-USDC’]

[‘USDC- GBP’]
[‘BAL-USD’]
[‘MANA-EUR’]
[‘COMP-BTC’]
[‘DAI-USDC’]]

高清get_market_data(市場:海峽= ‘BTC-GBP’,粒度:INT = 3600) – >數據框:
RESP = GET(F” https://api.pro.coinbase.com/products/{market}/candles?granularity ={str(granularity)}’)
if resp.status_code != 200:
raise Exception(format(resp.json()[‘message’]))
else:
df = DataFrame(resp.json(), columns=[ ‘ epoch’,’low’,’high’,’open’,’close’,’volume’])
df = df.iloc [::-1] .reset_index()
返回df

market_data = get_market_data(‘BTC-GBP’, 3600)
打印(market_data)

1UunkMb-Wc5I4zGn2Mh33rw

1UunkMb-Wc5I4zGn2Mh33rw-1

def preprocess_market(market:str=”BTC-GBP”,粒度:int = 3600)-> DataFrame:
df = get_market_data(market,粒度)
df [‘ma1’] = df.close.rolling(50,min_periods = 1) .mean()
df [‘ma2’] = df.close.rolling(200,min_periods = 1).mean()
df [‘up’] = df [‘ma1’]> df [‘ma2’]
df [‘ up’] = df[‘up’].astype(int)
df = df[[‘up’]]
df = df.rename(columns={‘up’: market})
返回df.T

1RSik7ST1LVDJSyvLNetL4g-1

1RSik7ST1LVDJSyvLNetL4g

df = pd.DataFrame()
for market in get_markets_ndarray():
print (‘Processing’, market[0])

tmp_df = df.append(preprocess_market(market[0], 3600))

if len(tmp_df.T) == 300:
df = df.append(preprocess_market(market[0], 3600))
sleep(0.1) # 避免超過公共費率

處理USDT-USDC
處理ZEC-USDC
處理ETC-BTC

處理BNT-USD
處理GRT-USD
處理SUSHI-GBP

df.dropna(inplace=True)
df = df.astype(int)

打印(df)

1S6a-XB1uhuhlHEWRPzPeIA

df.to_csv(‘coinbasepro_market_analysis.csv’)

圖(figsize =(20,15))
熱圖(df.T.corr())

1_mUUwJpk92K2_P9nd-wcZg

Figure(figsize =(30,50))
df_transpose = df.T
df_transpose.corr()[‘ BTC-GBP ‘] .sort_values(ascending = True).plot(kind =’barh’)

1hwoBUvu6tSbMLMYN2hvXQg
圖片作者

1zYpuY-ZAo2W2kscDeVwDcA
圖片作者

top_10 = df_transpose.corr()[‘BTC-GBP’]。 sort_values(ascending = False).keys()[0:20]
print(top_10)
指數([‘BTC-GBP’,’BTC-USD’,’WBTC-USD’,’BTC-EUR’,’BTC-USDT’,’BTC-USDC’,’ADA-USDC’,’ADA-USD’ , ‘YFI-USD’, ‘ADA-EUR’, ‘ADA-GBP’, ‘OXT-USD’, ‘ETH-GBP’, ‘WBTC-BTC’, ‘ETH-USD’, ‘ETH-DAI’, ‘ ETH-EUR’, ‘ETH-USDT’, ‘ETH-USDC’, ‘STORJ-USD’], dtype=”object”)

bottom_10 = df_transpose.corr()[‘BTC-GBP’]。 sort_values(ascending = True).keys()[0:20]
print(bottom_10)
指數([‘MIR-GBP’,’USDT-EUR’,’USDC-EUR’,’ZEC-BTC’,’DAI-USD’,’CRV-BTC’,’ADA-ETH’,’DAI-USDC’ , ‘UMA-BTC’, ‘COMP-BTC’, ‘USDC-GBP’, ‘MIR-BTC’, ‘USDT-GBP’, ‘REP-BTC’, ‘FIL-BTC’, ‘ICP-BTC’, ‘ SUSHI-ETH”,“ MIR-EUR”,“ MIR-USD”,“ BAT-ETH”],dtype=”object”)

df_filtered = df [〜df_transpose.keys()。str.contains(’USD [TC]’,regex = True)]
df_filtered_transpose = df_filtered.T

索引([‘MIR-GBP’,’ZEC-BTC’,’DAI-USD’,’CRV-BTC’,’ADA-ETH’,’UMA-BTC’,’COMP-BTC’,’MIR-BTC’ ,“ REP-BTC”,“ FIL-BTC”,“ ICP-BTC”,“ SUSHI-ETH”,“ MIR-EUR”,“ MIR-USD”,“ BAT-ETH”,“ ZEC-USD”,“ FORTH-BTC’, ‘CRV-EUR’, ‘SUSHI-BTC’, ‘RLC-BTC’], dtype=”object”)
概括

所以你有它。我很想听聽你的想法。我可以在列表中看到ADA,這在某種程度上是我所期望的。它不能完全抵抗比特幣和以太坊崩盤,但往往受到的影響較小。我正在交易ADA-GBP,但根據此ADA-ETH,它是一個更好的選擇。這裡的問題通常是如果比特幣崩盤,以太坊也會發生同樣的情況。我傾向於忽略上面的ETH 選項。

Google Colab

我已經在上面為你提供了所有代碼,但是如果你想要源代碼,我已經創建了一個可以在Google Colab 中輕鬆運行的筆記本。

轉到“ https://colab.research.google.com
點擊GitHub標籤
對於“輸入GitHub URL 或按組織或用戶搜索”輸入“ https://github.com/whittlem/colabnotebooks ”並按Enter
存儲庫:“ whittlem/colabnotebooks ”,分支:“ main
點擊“ CoinbaseProMarketAnalysis.ipynp
從菜單中單擊“運行時”,然後單擊“全部運行

Total
0
Shares
Related Posts