如果你是一名加密貨幣交易員,你可能會發現每次有關比特幣或以太坊的負面消息都會導致市場全面崩盤時,你會感到沮喪。這讓我開始思考是否有任何可以抵禦崩盤的加密貨幣。
我開始這個實驗,看看我能找到一個ñ d的結果竟然是有趣的。請記住,我在牛市的高峰期進行了這項練習,看不到崩盤的跡象。我從未聽說過卡爾達諾(ADA),但數據表明它是最能抵禦全面市場崩盤的。我決定將部分投資轉移到Cardano(ADA),事實證明這絕對可以節省一天。即使現在市場完全混亂,卡爾達諾(ADA) 仍然保持強勁勢頭,幾乎每天都會在新聞聚合器加密貨幣Panic上發布積極消息。
實驗目的是什麼?
基本思想是尋找負相關的市場。例如,如果比特幣和以太坊崩盤,我想確定沒有崩盤的市場。我想找到一個“獨立”的市場,而不僅僅是鏡像主要市場。
設置實驗
從Coinbase Pro交易所檢索市場清單。
為每個市場計算兩個移動平均線以確定趨勢。如果較快的移動平均Eg SMA50高於較慢的移動平均Eg SMA200,則市場處於上漲趨勢。反之亦然,如果SMA50低於SMA200,則市場處於下跌趨勢。
出於分析的目的,我創建了一個具有二元指標“ up ”的功能,如果市場(條件)為正,則為1,如果市場(條件)為負,則為0。最終結果應該是一個矩陣,其中市場列表將是行,時間間隔將是列,結果將是1 或0,具體取決於市場是上漲還是下跌。
上述矩陣表應至少為我們提供比較的基礎。
入門
第一步是我們需要導入必要的庫並設置我們的環境。
從seaborn導入heatmap
從matplotlib.pyplot導入圖,
從savefig從熊市貓導入DataFrame
從numpy導入ndarray
從請求導入獲取
時間導入睡眠%matplotlib 內聯
下一步是我們需要一些函數來檢索和處理我們的數據。此函數將檢索Coinbase Pro 市場列表並返回一個Numpy 數組。
def get_markets_ndarray()-> ndarray:
resp = get(’ https://api.pro.coinbase.com/products’)
如果resp.status_code= 200:
返回
其他:
df = DataFrame(resp.json())
返回df [[‘id’]]。 values
這是函數返回的示例,目前有203 個市場。
市場= 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
這是函數返回的示例,該間隔返回300個數據間隔(在這種情況下為小時)。
market_data = get_market_data(‘BTC-GBP’, 3600)
打印(market_data)
現在進行一些特徵工程。我想添加上面討論的兩個移動平均值“ ma1 ”和“ ma2 ”。如果“ ma1 ”>“ ma2 ”,則“ up ”將為“ 1 ”,否則為“ 0 ”。
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
這是函數返回內容的示例。
我們現在想通過從Coinbase Pro 檢索市場列表、檢索每個市場的歷史市場數據並預處理每個市場來將它們放在一起。請注意,我必須在睡眠時減慢對Coinbase Pro 的API 調用,否則你將達到公共速率限制。
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)
(可選)如果要保存此文件的CSV副本。
df.to_csv(‘coinbasepro_market_analysis.csv’)
讓我們看看是否可以嘗試並可視化它。
圖(figsize =(20,15))
熱圖(df.T.corr())
這看起來是絕對的混亂我們需要對此加點關注,我將使用“ BTC-GBP ”,但是你可以使用任何喜歡的內容。
Figure(figsize =(30,50))
df_transpose = df.T
df_transpose.corr()[‘ BTC-GBP ‘] .sort_values(ascending = True).plot(kind =’barh’)
圖片作者
縮小圖像尺寸以提高可讀性
圖片作者
選擇最相關的市場。
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”)
我們最感興趣的是相關性最低的市場。我認為像Tether (USDT) 和USD Coin (USDC) 這樣的穩定幣出現並不奇怪。我傾向於刪除它們,因為它們的設計應該是穩定的。
df_filtered = df [〜df_transpose.keys()。str.contains(’USD [TC]’,regex = True)]df_filtered_transpose = df_filtered.T
並在沒有USDT 和USDC 的情況下重新創建我們的底部列表10。
索引([‘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.com並將這些市場與BTC-GBP 進行比較。
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 ” 從菜單中單擊“運行時”,然後單擊“全部運行”
祝你好運,我希望你對你有所幫助
如果你是一名加密貨幣交易員,你可能會發現每次有關比特幣或以太坊的負面消息都會導致市場全面崩盤時,你會感到沮喪。這讓我開始思考是否有任何可以抵禦崩盤的加密貨幣。
我開始這個實驗,看看我能找到一個ñ d的結果竟然是有趣的。請記住,我在牛市的高峰期進行了這項練習,看不到崩盤的跡象。我從未聽說過卡爾達諾(ADA),但數據表明它是最能抵禦全面市場崩盤的。我決定將部分投資轉移到Cardano(ADA),事實證明這絕對可以節省一天。即使現在市場完全混亂,卡爾達諾(ADA) 仍然保持強勁勢頭,幾乎每天都會在新聞聚合器加密貨幣Panic上發布積極消息。
實驗目的是什麼?
基本思想是尋找負相關的市場。例如,如果比特幣和以太坊崩盤,我想確定沒有崩盤的市場。我想找到一個“獨立”的市場,而不僅僅是鏡像主要市場。
設置實驗
從Coinbase Pro交易所檢索市場清單。
為每個市場計算兩個移動平均線以確定趨勢。如果較快的移動平均Eg SMA50高於較慢的移動平均Eg SMA200,則市場處於上漲趨勢。反之亦然,如果SMA50低於SMA200,則市場處於下跌趨勢。
出於分析的目的,我創建了一個具有二元指標“ up ”的功能,如果市場(條件)為正,則為1,如果市場(條件)為負,則為0。最終結果應該是一個矩陣,其中市場列表將是行,時間間隔將是列,結果將是1 或0,具體取決於市場是上漲還是下跌。
上述矩陣表應至少為我們提供比較的基礎。
入門
第一步是我們需要導入必要的庫並設置我們的環境。
從seaborn導入heatmap
從matplotlib.pyplot導入圖,
從savefig從熊市貓導入DataFrame
從numpy導入ndarray
從請求導入獲取
時間導入睡眠%matplotlib 內聯
下一步是我們需要一些函數來檢索和處理我們的數據。此函數將檢索Coinbase Pro 市場列表並返回一個Numpy 數組。
def get_markets_ndarray()-> ndarray:
resp = get(’ https://api.pro.coinbase.com/products’)
如果resp.status_code= 200:
返回
其他:
df = DataFrame(resp.json())
返回df [[‘id’]]。 values
這是函數返回的示例,目前有203 個市場。
市場= 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
這是函數返回的示例,該間隔返回300個數據間隔(在這種情況下為小時)。
market_data = get_market_data(‘BTC-GBP’, 3600)
打印(market_data)
現在進行一些特徵工程。我想添加上面討論的兩個移動平均值“ ma1 ”和“ ma2 ”。如果“ ma1 ”>“ ma2 ”,則“ up ”將為“ 1 ”,否則為“ 0 ”。
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
這是函數返回內容的示例。
我們現在想通過從Coinbase Pro 檢索市場列表、檢索每個市場的歷史市場數據並預處理每個市場來將它們放在一起。請注意,我必須在睡眠時減慢對Coinbase Pro 的API 調用,否則你將達到公共速率限制。
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)
(可選)如果要保存此文件的CSV副本。
df.to_csv(‘coinbasepro_market_analysis.csv’)
讓我們看看是否可以嘗試並可視化它。
圖(figsize =(20,15))
熱圖(df.T.corr())
這看起來是絕對的混亂我們需要對此加點關注,我將使用“ BTC-GBP ”,但是你可以使用任何喜歡的內容。
Figure(figsize =(30,50))
df_transpose = df.T
df_transpose.corr()[‘ BTC-GBP ‘] .sort_values(ascending = True).plot(kind =’barh’)
圖片作者
縮小圖像尺寸以提高可讀性
圖片作者
選擇最相關的市場。
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”)
我們最感興趣的是相關性最低的市場。我認為像Tether (USDT) 和USD Coin (USDC) 這樣的穩定幣出現並不奇怪。我傾向於刪除它們,因為它們的設計應該是穩定的。
df_filtered = df [〜df_transpose.keys()。str.contains(’USD [TC]’,regex = True)]
df_filtered_transpose = df_filtered.T
並在沒有USDT 和USDC 的情況下重新創建我們的底部列表10。
索引([‘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.com並將這些市場與BTC-GBP 進行比較。
Google Colab
我已經在上面為你提供了所有代碼,但是如果你想要源代碼,我已經創建了一個可以在Google Colab 中輕鬆運行的筆記本。
轉到“ https://colab.research.google.com ”
點擊GitHub標籤
對於“輸入GitHub URL 或按組織或用戶搜索”輸入“ https://github.com/whittlem/colabnotebooks ”並按Enter
存儲庫:“ whittlem/colabnotebooks ”,分支:“ main ”
點擊“ CoinbaseProMarketAnalysis.ipynp ”
從菜單中單擊“運行時”,然後單擊“全部運行”
祝你好運,我希望你對你有所幫助