區塊鏈研究實驗室 | 如何使用Python判斷牛熊

買賣虛擬貨幣

有許多方法可以判斷誰是公牛還是空頭,而艾達透視指標的“牛熊力量指標”就是其中的一種,它使用簡單的公式來近似估算這種隱含的技術實力。今天,我們將對指標進行編碼和回測,然後從客觀的角度對其進行判斷。

建立牛市和熊市實力指數

上古雷指數MEAs數字購銷壓力量和兩個柱狀圖,其中一個就是所謂的多頭力量和其他的空頭力量的。直方圖是根據以下公式計算的:

EMA變數指的是指數移動平均線,它是一種移動平均線,將更多的權重放在最近的值上。

可以使用以下功能來計算指數移動平均值:

def ma(Data, lookback, what, where):  for i in range(len(Data)): try: Data[i, where] = (Data[i - lookback + 1:i + 1, what].mean())  except IndexError: pass return Datadef ema(Data, alpha, lookback, what, where):  # alpha is the smoothing factor # window is the lookback period # what is the column that needs to have its average calculated # where is where to put the exponential moving average  alpha = alpha / (lookback + 1.0) beta = 1 - alpha  # First value is a simple SMA Data = ma(Data, lookback, what, where)  # Calculating first EMA Data[lookback + 1, where] = (Data[lookback + 1, what] * alpha) + (Data[lookback, where] * beta)  # Calculating the rest of EMA for i in range(lookback + 2, len(Data)): try: Data[i, where] = (Data[i, what] * alpha) + (Data[i - 1, where] * beta)  except IndexError: pass return Data

第一個面板中的EURUSD和50週期的牛熊指標。

上面顯示了EURUSD每小時資料,第二個面板中有50個週期的牛熊指標。在繼續執行指標程式碼之前,我們必須編寫兩個簡單的函式:

def deleter(Data, index, times):  for i in range(1, times + 1):  Data = np.delete(Data, index, axis = 1)return Data def jump(Data, jump):  Data = Data[jump:, ]     return Data

現在,我們準備好程式碼了。記住要準備好OHLC陣列。

def bull_bear_power(Data, lookback, what, high, low, where):  # Adding the required columns Data = adder(Data, 3)  # Calculating the exponential moving average Data = ema(Data, 2, lookback, what, where)   # Calculating the Bull Power Data[:, where + 1] = Data[:, high] - Data[:, where]  # Calculating the Bear Power Data[:, where + 2] = Data[:, where] - Data[:, low]  # Deleting initial empty rows Data = jump(Data, lookback)  return Data

USDCHF位於第一個面板中,並且是50週期的牛熊指標。

要對上面的圖表進行編碼,我們可以使用以下函式:

def indicator_plot_double_bull_bear(Data, name = '', name_ind = '', window = 250): fig, ax = plt.subplots(2, figsize = (10, 5)) Chosen = Data[-window:, ]  for i in range(len(Chosen)):  ax[0].vlines(x = i, ymin = Chosen[i, 2], ymax = Chosen[i, 1], color = 'black', linewidth = 1)   ax[0].grid() for i in range(len(Chosen)):  ax[1].vlines(x = i, ymin = 0, ymax = Chosen[i, 6], color = 'green', linewidth = 1) ax[1].vlines(x = i, ymin = Chosen[i, 7], ymax = 0, color = 'red', linewidth = 1)   ax[1].grid()  ax[1].axhline(y = 0, color = 'black', linewidth = 0.5, linestyle = '--')# The above code considers columns 6 and 7 to inhibit Bull Power and Bear Power respectively.

回測簡單策略

與任何適當的研究方法一樣,其目的是對指標進行回測,並能夠自己檢視是否值得將其作為我們先前存在的交易框架的補充。請注意,以下內容僅對過去10年中僅對10個貨幣對的一個時間範圍進行回測。這可能不是該策略的最佳時限,但我們只是試圖找到一種“一刀切”的“幾乎適合所有人”的策略。

條件已簡化,我們將基於主觀障礙使用逆勢方法:

  • 當牛市力量指標達到-0.001並且前兩個值大於0.001時,做多(買入)。保持該位置,直到收到新訊號(該位置已關閉)。

  • 每當熊市力量指標達到0.001(前兩個值均低於0.001)時,做空(賣出)。保持該位置,直到收到新訊號(該位置已關閉)。

歐元兌美元的訊號圖。

def signal(Data, bull_power, bear_power, buy, sell):  for i in range(len(Data)): if Data[i, bull_power] < lower_barrier and Data[i - 1, bull_power] > lower_barrier : Data[i, buy] = 1  if Data[i, bear_power] < lower_barrier and Data[i - 1, bear_power] > lower_barrier: Data[i, sell] = -1

USDCHF上的訊號圖。

根據自2010年以來按小時資料散佈的0.5個基點得出的結果,並且沒有采用風險管理演算法,得出的結果如下。

效果表。

遵循該策略的股權曲線。

顯然,該指標並沒有增加價值。嘗試最佳化甚至更改與之相關的策略可能會更好。我們可能可以新增一些熊市條件來驗證看漲訊號,並新增一些牛市條件來驗證看跌訊號。

我們還可以相應地調整回溯和障礙。我們可以做的最後一件事是將策略從逆勢轉變為遵循趨勢。

結論

記住要經常做背部測試。即使我提供了指標的功能(而不只是吹牛說它是聖盃,並且它的功能是秘密),您也應該始終相信其他人是錯誤的。我的指標和交易風格對我有用,但可能並非對每個人都適用。我依靠以下規則:

市場價格在超過50%的時間內無法預測或很難預測。但是市場反應是可以預測的。

意思是,我們可以在一個區域周圍形成一個小區域,並可以確信地說市場價格將對該區域周圍的區域產生反應。但是我們不能真正說它會從那裡下跌4%,然後再次測試,並在第三次嘗試跌至103.85美元時突破。由於我們預測過度,因此誤差項呈指數級增長。

作者:鏈三豐,來源:區塊鏈研究實驗室

免責聲明:

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

推荐阅读