如何使用 Python 提高比特幣的回報率

買賣虛擬貨幣

交叉指標

在金融背景下,黃金交叉和死亡交叉指標是一個衍生的的移動平均線,也被稱為交叉指標。

例如移動平均線,這兩個交叉指標中的任何一個將透過使用以下公式對特定時間段內的市場收盤價進行平均來計算。

在以上公式中,n對應於使用的週期數

該概念將包括組合兩個移動平均值(短期和長期)以獲得加密貨幣趨勢。當短期移動均線超過或回顧長期移動均線時,將出現買入或賣出訊號。

從數學上講,如果您選擇5個週期的短期移動平均線和20個週期的長期移動平均線,則我們將透過以下條件獲得買入訊號:

MA(5)和MA(20)分別等於:

CPrice對應於收盤價值

這些交叉指標是方程式的一部分,可幫助檢測所研究的加密貨幣的全球趨勢。這些CI(交叉指標)在全球範圍內被多個交易者和基金廣泛使用,以定義支撐,阻力位,止損和目標並瞭解潛在趨勢。

現在我們已經涵蓋了一些背景知識,讓我們開始測試,看看它們如何幫助預測市場。如果要以相同的速度編寫程式碼,則需要事先安裝一些配置和程式包。

先決條件

在開始之前,您需要在計算機上安裝Python 3版本和以下軟體包:

Pandas

NumPy

Yfinance

Plotly(這個您可以自主選擇安裝與否)

如果尚未安裝這些軟體包中的任何一個,則可以使用pip命令,如下所示。

pip install yfinancepip install plotly

一旦確保安裝了以下軟體包,我們就可以從我們的資料管道和資料模型開始。

資料管道和建模

現在,我們已經確認以上軟體包已安裝在我們的機器中,我們可以定義資料處理了。

資料模型將分為3個不同的步驟:

我們將使用Yahoo Finance API查詢實時加密貨幣的資料。

定義一個時間段,為我們的計算欄位建立新列,然後每秒更新這些值。

實時繪製此圖,並檢查我們的訊號是否準確。

現在我們可以開始編碼了!(如果您已經有使用Python的經驗,則可以跳到第二步。)

第一步:匯入所需軟體包

您將開始使用以下程式碼行匯入以前安裝的軟體包:

# Raw Packageimport numpy as npimport pandas as pd#Data Sourceimport yfinance as yf#Data vizimport plotly.graph_objs as go

上面的行是查詢numpy,pandas,yfinance和要匯入的圖

第二步:獲取實時市場資料

現在,所需的不同軟體包已被上傳。我們將以BTC-USD對為例,透過Yahoo Finance API設定匯入,可以擴充套件加密貨幣選擇的列表以及貨幣。

例如,如果您來自印度或加拿大,則可以使用INR或CAD;如果您來自印度或加拿大,則可以使用INR或CAD。兩者都將正常執行,以及您是否需要Ripple或Ethereum資料。

第三步:回到我們的API結構

Yahoo Finance API將按此順序需要三個強制性引數:

股票程式碼(1)

開始日期+結束日期或期間(2)

間隔(3)

對於我們的情況,股票程式碼(引數1)將為BTC-USD對。此外,在此示例中,我們將選擇最後7天作為時間段(引數2)。並設定一個間隔(引數3)的90分鐘。

要呼叫資料,您將必須使用以下結構:

上面描述了獲取我們感興趣的資料的結構

快速查詢可能的時間間隔

我想快速介紹一下您可以使用yahoo finance API設定的不同間隔。

下面詳細列出了可能需要的間隔可能性:

上面列出了可以選擇的不同間隔。

現在我們已經定義了三個引數,讓我們執行查詢並檢查輸出:

data = yf.download(tickers='BTC-USD',period = '8d', interval = '90m')

上面的行將向Yahoo Finance API請求BTC-USD。

這是您必須獲得的輸出:

每隔90分鐘輸出一次市場

現在,我們已經下載並儲存了資料,我們可以繼續並定義移動平均線,買賣訊號。

部署我們的演算法

現在,我們的實時資料已經下載並儲存在名為“ data”的變數中。下一步包括計算我們的移動平均線並設定我們的買入和賣出訊號。

我們將需要建立以下計算欄位:

馬(5)

馬(20)

為此,我們將使用Python中包含的滾動函式來獲取n個最新週期的平均值。關於MA(5),我們將在過去90分鐘的最後5分鐘內應用我們的策略。這意味著我們將計算最近7小時30分鐘(5次乘以90分鐘)的平均收盤價。

對於MA(20),我們將使用滾動功能,但我們將計算20個最近週期的平均值,而不是計算5個最近的90分鐘週期。

因此,讓我們在Python上進行編碼:

#Moving average using Python Rolling functiondata['MA5'] = data['Close'].rolling(5).mean()data['MA20'] = data['Close'].rolling(20).mean()

上面的程式碼行使用Python滾動功能獲取移動平均值

上面的程式碼一旦執行,將為您的資料框建立2個新列,如下所示:

現在您已經定義了波段,必須建立2個額外的列。

我們終於可以部署我們的策略並對其進行測試。在下圖中,我將綠色標記為良好的預測,將黑色預測為錯誤的預測。

帶有買賣訊號的預期輸出

現在您可以在家開發它了:

# Raw Packageimport numpy as npimport pandas as pd#Data Sourceimport yfinance as yf#Data vizimport plotly.graph_objs as go#Importing market datadata = yf.download(tickers='BTC-USD',period = '8d', interval = '90m')#Adding Moving average calculated fielddata['MA5'] = data['Close'].rolling(5).mean()data['MA20'] = data['Close'].rolling(20).mean()#declare figurefig = go.Figure()#Candlestickfig.add_trace(go.Candlestick(x=data.index,                open=data['Open'],                high=data['High'],                low=data['Low'],                close=data['Close'], name = 'market data'))#Add Moving average on the graphfig.add_trace(go.Scatter(x=data.index, y= data['MA20'],line=dict(color='blue', width=1.5), name = 'Long Term MA'))fig.add_trace(go.Scatter(x=data.index, y= data['MA5'],line=dict(color='orange', width=1.5), name = 'Short Term MA'))#Updating X axis and graph# X-Axesfig.update_xaxes(    rangeslider_visible=True,    rangeselector=dict(        buttons=list([            dict(count=3, label="3d", step="days", stepmode="backward"),            dict(count=5, label="5d", step="days", stepmode="backward"),            dict(count=7, label="WTD", step="days", stepmode="todate"),            dict(step="all")        ])    ))#Showfig.show()

結論

所以交易並不都完美,有時我們往往會滯後於進入或離開市場,但在比特幣穩定的時期,探索實時抵抗和支援水平的概念非常有趣,黃金交叉策略已成為提高我們利潤的有用策略。

經過簡短的計算並使用我的個人經紀人的手續費,我們將在一週內獲得7,1%的回報,而同期的比特幣穩定在1,7%左右。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读