技術交易中,準確判斷趨勢和掌握入場時機至關重要。本文介紹 Quintuplets 和 Double Trouble 兩種根據 K 線形態的交易策略,並結合 Python 程式碼,深入剖析其運作機制。Quintuplets 模式透過觀察五根連續小蠟燭的形態,判斷市場趨勢的延續性。Double Trouble 模式則結合了平均真實波動幅度(ATR)指標,利用 K 線形態和波動性變化,提供更穩健的交易訊號。兩種策略各有千秋,Quintuplets 模式更注重趨勢的早期確認,而 Double Trouble 模式則更強調入場時機的精準把握。理解這兩種模式的原理和程式碼實作,能幫助交易者更好地應對市場變化,制定更有效的交易策略。
現代趨勢跟隨模式:Quintuplets 模式深度解析
在探討趨勢跟隨的概念時,我們不僅需要了解傳統的技術分析模式,還需要探索一些新的、非傳統的模式。本章將介紹一種稱為 Quintuplets 的新型多蠟燭圖形態,它能夠確認基礎趨勢並提供額外的交易確認訊號。
Quintuplets 模式的定義與特徵
Quintuplets 模式是一種由五根連續的小蠟燭組成的形態,這些蠟燭具有相同的型別(看漲或看跌)。該模式根據群眾心理學和市場反應失敗的原理,表明市場趨勢將繼續沿著相同的方向發展。
Quintuplets 模式的形成條件
- 連續五根小蠟燭:這些蠟燭必須是相同型別(看漲或看跌),且每根蠟燭的收盤價都高於(看漲)或低於(看跌)其開盤價。
- 蠟燭大小限制:每根蠟燭的實體大小必須小於設定的門檻值,以確保它們是「小」蠟燭。
程式碼實作與訊號生成
def signal(data, open_column, close_column, buy_column, sell_column):
data = add_column(data, 5)
for i in range(len(data)):
try:
# 看漲 Quintuplets 模式
if (data[i, close_column] > data[i, open_column] and
data[i, close_column] > data[i - 1, close_column] and
data[i, close_column] - data[i, open_column] < body and
data[i-1, close_column] > data[i-1, open_column] and
data[i-1, close_column] > data[i-2, close_column] and
data[i-1, close_column] - data[i-1, open_column] < body and
data[i-2, close_column] > data[i-2, open_column] and
data[i-2, close_column] > data[i-3, close_column] and
data[i-2, close_column] - data[i-2, open_column] < body and
data[i-3, close_column] > data[i-3, open_column] and
data[i-3, close_column] > data[i-4, close_column] and
data[i-3, close_column] - data[i-3, open_column] < body and
data[i-4, close_column] > data[i-4, open_column] and
data[i-4, close_column] - data[i-4, open_column] < body and
data[i, buy_column] == 0):
data[i + 1, 4] = 1
# 看跌 Quintuplets 模式
elif (data[i, close_column] < data[i, open_column] and
data[i, close_column] < data[i-1, close_column] and
data[i, open_column] - data[i, close_column] < body and
data[i-1, close_column] < data[i-1, open_column] and
data[i-1, close_column] < data[i-2, close_column] and
data[i-1, open_column] - data[i-1, close_column] < body and
data[i-2, close_column] < data[i-2, open_column] and
data[i-2, close_column] < data[i-3, close_column] and
data[i-2, open_column] - data[i-2, close_column] < body and
data[i-3, close_column] < data[i-3, open_column] and
data[i-3, close_column] < data[i-4, close_column] and
data[i-3, open_column] - data[i-3, close_column] < body and
data[i-4, close_column] < data[i-4, open_column] and
data[i-4, open_column] - data[i-4, close_column] < body and
data[i, sell_column] == 0):
data[i + 1, 5] = -1
except IndexError:
pass
return data
內容解密:
signal函式:此函式負責生成 Quintuplets 模式的訊號。它接受歷史資料、開盤價欄位、收盤價欄位、買入訊號欄位和賣出訊號欄位作為輸入。迴圈與條件檢查:在資料範圍內迭代,檢查每個資料點是否符合 Quintuplets 模式的條件。條件包括檢查連續五根蠟燭是否具有相同的型別(看漲或看跌),並且每根蠟燭的大小是否小於設定的
body值。看漲與看跌模式:對於看漲模式,五根蠟燭的收盤價必須高於開盤價,且每根蠟燭的收盤價高於前一根蠟燭的收盤價。對於看跌模式,則相反。
訊號生成:當滿足 Quintuplets 模式的條件時,在下一根蠟燭的開盤時生成買入或賣出訊號。
錯誤處理:使用
try-except區塊捕捉IndexError,確保在存取超出資料範圍的索引時不會導致程式當機。
不同資產的蠟燭大小門檻
| 資產 | 蠟燭大小門檻 | 單位 | |
|
-|
| | EURUSD | 0.0005 | 點 | | USDCHF | 0.0005 | 點 | | GBPUSD | 0.0005 | 點 | | USDCAD | 0.0005 | 點 | | BTCUSD | 50 | 美元 | | ETHUSD | 10 | 美元 | | GOLD | 2 | 美元 | | S&P500 | 10 | 點 | | FTSE100 | 10 | 點 |
波動性與雙重困擾模式(Double Trouble Pattern)解析
在交易與投資領域中,波動性是一個關鍵概念,它直接關係到風險,並間接影響報酬。具有高波動性的資產或變數,其回報會圍繞平均值大幅波動。
波動性的型別
歷史波動性(Historical Volatility):在特定時間內實作的波動性。儘管它具有回溯性,但歷史波動性經常被用作對未來波動性的預期。標準差是歷史波動性的衡量指標之一。
隱含波動性(Implied Volatility):當輸入Black-Scholes方程時,能夠給出期權市場價格的衡量指標。它代表了對未來實際波動性的預期,具有一個時間尺度:期權的到期日。
遠期波動性(Forward Volatility):未來特定時間段內的波動性。
實際波動性(Actual Volatility):在任何給定時間的波動性量,也稱為區域性波動性。這個衡量指標難以計算,並且沒有時間尺度。
標準差與波動性
最基本的波動性型別是標準差,它是描述性統計的根本之一。標準差是透過對資料點與平均值的偏差進行平方、平均,然後取平方根來計算的。
計算公式
- 變異數(Variance):$\sigma^2 = \frac{1}{n} \sum_{i=1}^{n} (x_i - \chi)^2$
- 標準差(Standard Deviation):$\sigma = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (x_i - \chi)^2}$
平均真實範圍(Average True Range, ATR)
ATR是一種衡量歷史波動性的指標,由威爾德·威爾斯·小威爾德(Wilder Welles Jr.)開發。ATR的第一步是計算真實範圍(True Range)。
真實範圍的計算
對於每個小時,真實範圍是以下三個價格差異中的最大值:
- 當前高點 - 當前低點
- 當前高點 - 前一收盤價
- 前一收盤價 - 當前低點
然後,對一定回顧期的真實範圍取平滑平均值,得到ATR。
# 匯入必要的函式庫
import numpy as np
# 假設data是一個包含OHLC(開盤價、最高價、最低價、收盤價)資料的DataFrame
def calculate_atr(data, period=14):
high = data['High']
low = data['Low']
close = data['Close']
# 計算真實範圍
previous_close = close.shift(1)
high_low_range = high - low
high_pc_range = np.abs(high - previous_close)
low_pc_range = np.abs(previous_close - low)
true_range = pd.concat([high_low_range, high_pc_range, low_pc_range], axis=1).max(axis=1)
# 計算ATR
atr = true_range.ewm(alpha=1/period, adjust=False).mean()
return atr
#### 內容解密:
此程式碼片段定義了一個函式`calculate_atr`,用於計算給定OHLC資料的ATR。首先,它提取最高價、最低價和收盤價。然後,計算每個交易日的真實範圍,即以下三者的最大值:
1. 當日最高價與最低價之差
2. 當日最高價與前一日收盤價之差的絕對值
3. 前一日收盤價與當日最低價之差的絕對值
最後,使用指數移動平均(Exponential Moving Average, EMA)對真實範圍進行平滑處理,以獲得ATR。`period`引數指定了ATR計算中使用的回顧期,預設為14天。
### 圖表展示:高低波動性變數比較
```python
# 建立高波動性雜訊
hv_noise = np.random.normal(0, 1, 250)
# 建立低波動性雜訊
lv_noise = np.random.normal(0, 0.1, 250)
# 繪製圖表
plt.plot(hv_noise, color='red', label='高波動性')
plt.plot(lv_noise, color='blue', label='低波動性')
plt.axhline(y=0, color='black', linewidth=1)
plt.grid()
plt.legend()
內容解密:
此程式碼使用numpy生成兩組隨機雜訊:一組具有高標準差(代表高波動性),另一組具有低標準差(代表低波動性)。然後,使用matplotlib將這兩組雜訊繪製成圖,以直觀展示高低波動性的差異。高波動性的曲線會表現出更大的振幅,而低波動性的曲線則相對平穩。圖表中的水平線代表零線,用於參考比較。
結合ATR的雙重困擾模式
雙重困擾模式利用外生變數進行驗證,即藉助波動性指標——平均真實範圍(ATR)來驗證訊號。這種方法透過結合ATR來最佳化交易策略,從而可能獲得更好的績效指標。具體來說,ATR可用於評估市場的歷史波動性,並據此調整交易決策,例如設定止損或調整倉位大小等。透過將ATR與特定的交易模式(如雙重困擾模式)結合,可以更有效地管理風險並最佳化交易表現。
平均真實波動幅度(ATR)與市場波動性分析
在金融市場中,波動性是衡量價格變動程度的重要指標。平均真實波動幅度(Average True Range, ATR)是一種技術指標,用於衡量市場的波動性。ATR 由 J. Welles Wilder Jr. 提出,主要用於評估價格波動的程度。
ATR 的計算方法
ATR 的計算根據真實波動幅度(True Range, TR),其公式如下:
- TR = max[(當日最高價 - 當日最低價), |(當日最高價 - 前一日收盤價)|, |(當日最低價 - 前一日收盤價)|]
ATR 是 TR 在特定回顧期內的平滑平均值。計算 ATR 的 Python 程式碼如下:
def atr(data, lookback, high_column, low_column, close_column, position):
data = add_column(data, 1)
for i in range(len(data)):
try:
data[i, position] = max(data[i, high_column] - data[i, low_column],
abs(data[i, high_column] - data[i - 1, close_column]),
abs(data[i, low_column] - data[i - 1, close_column]))
except ValueError:
pass
data[0, position] = 0
data = smoothed_ma(data, 2, lookback, position, position + 1)
data = delete_column(data, position, 1)
data = delete_row(data, lookback)
return data
內容解密:
- TR 計算:程式碼首先計算 TR,比較當日最高價與最低價的差、當日最高價與前一日收盤價的絕對差、以及當日最低價與前一日收盤價的絕對差,並取最大值。
- ATR 計算:使用
smoothed_ma函式對 TR 進行平滑平均,得到 ATR。 - 資料清理:刪除不必要的欄位和初始無效資料列。
ATR 與市場波動性的關係
ATR 可以反映市場的波動性。在恐慌或價格貶值的時期,市場波動性增加,ATR 通常會上升。相反,在穩定的上升或下降趨勢中,ATR 會趨於下降。這種現象在 EURUSD 的 10 週期 ATR 圖表中得到了驗證,如圖 5-6 所示。
Double Trouble 型態:根據波動性的趨勢跟隨策略
Double Trouble 型態是一種根據兩根 K 線的趨勢跟隨策略,需要考慮 ATR 指標。其定義如下:
- 看漲 Double Trouble:兩根連續的看漲 K 線,第二根 K 線的收盤價高於第一根,且第二根 K 線的幅度至少是前一根 K 線的 10 週期 ATR 的兩倍。
- 看跌 Double Trouble:兩根連續的看跌 K 線,第二根 K 線的收盤價低於第一根,且第二根 K 線的幅度至少是前一根 K 線的 10 週期 ATR 的兩倍。
其 Python 程式碼實作如下:
def signal(data, open_column, high_column, low_column, close_column, atr_column, buy_column, sell_column):
data = add_column(data, 5)
for i in range(len(data)):
try:
# 看漲型態
if data[i, close_column] > data[i, open_column] and \
data[i, close_column] > data[i - 1, close_column] and \
data[i - 1, close_column] > data[i - 1, open_column] and \
data[i, high_column] - data[i, low_column] > (2 * data[i - 1, atr_column]) and \
data[i, close_column] - data[i, open_column] > data[i - 1, close_column] - data[i - 1, open_column] and \
data[i, buy_column] == 0:
data[i + 1, buy_column] = 1
# 看跌型態
elif data[i, close_column] < data[i, open_column] and \
data[i, close_column] < data[i - 1, close_column] and \
data[i - 1, close_column] < data[i - 1, open_column] and \
data[i, high_column] - data[i, low_column] > (2 * data[i - 1, atr_column]) and \
data[i, open_column] - data[i, close_column] > data[i - 1, open_column] - data[i - 1, close_column] and \
data[i, sell_column] == 0:
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
內容解密:
- 買賣訊號生成:根據 Double Trouble 型態的定義,程式碼檢查是否滿足看漲或看跌條件,並在下一交易週期生成對應的買賣訊號。
- 條件檢查:包括檢查 K 線的開盤、收盤、最高、最低價,以及與前一根 K 線的比較,並結合 ATR 指標進行判斷。
Bottle 型態:根據間隙和 K 線特徵的趨勢跟隨策略
Bottle 型態依賴兩根 K 線來確認趨勢的延續。它需要第二根 K 線具有特定的特徵,例如無下影線但有上影線,且開盤價低於前一根 K 線的收盤價(間隙)。
其 Python 程式碼片段如下:
def signal(data, open_column, high_column, low_column, close_column, buy_column, sell_column):
data = add_column(data, 5)
for i in range(len(data)):
try:
# 看漲型態
if data[i, close_column] > data[i, open_column] and \
data[i, open_column] == data[i, low_column] and \
data[i - 1, close_column] > data[i - 1, open_column] and \
data[i, open_column] < data[i - 1, close_column] and \
data[i, buy_column] == 0:
# 生成買入訊號
pass
內容解密:
- 型態檢查:檢查當前及前一根 K 線是否滿足 Bottle 型態的條件,包括開盤、收盤價的比較,以及是否存在間隙。
- 訊號生成:滿足條件時,在適當的位置生成買入或賣出訊號。