價格波動與雙重困境形態
價格波動是交易和投資中的關鍵概念,它與風險直接相關,與回報間接相關。波動性資產或變數是指其回報在其平均值附近大幅波動的資產或變數。
如下圖所示,藍線代表低波動性,紅線代表高波動性。
graph LR A[時間] --> B{價格}; B -- 低波動 --> C(低波動); B -- 高波動 --> D(高波動); C --> E[結束]; D --> E;
內容解密:此圖表以簡潔的方式說明瞭高波動和低波動的區別,高波動的價格變化更大,而低波動的價格變化較小。
以下程式碼片段展示瞭如何用 Python 程式碼繪製高低波動
import numpy as np
import matplotlib.pyplot as plt
# 生成高波動噪音
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()
plt.show()
內容解密:這段程式碼使用 numpy
函式庫生成隨機資料來模擬高波動和低波動,並使用 matplotlib
函式庫將其繪製成圖表。np.random.normal()
函式從正態分佈中生成隨機樣本。
不同型別的波動性可以總結如下:
- 歷史波動率: 這是特定時期內已實作的波動率。儘管它是回顧性的,但歷史波動率通常被用作對未來波動率的預期。標準差就是歷史波動率的衡量指標之一。
- 隱含波動率: 簡而言之,隱含波動率是指當輸入到 Black-Scholes 公式時,可以得出期權市場價格的指標。(Black-Scholes 公式是用於期權定價的數學公式。)它是預期的未來實際波動率。它有一個時間尺度:期權的到期日。
- 遠期波動率: 未來特定時期內的波動率。
- 實際波動率: 任何給定時間的波動量,也稱為區域性波動率。這個指標難以計算,並且沒有時間尺度。
最基本的波動率型別是標準差,它是描述性統計的支柱之一。首先,我必須解釋一下變異數。變異數是一種離散量度,計算為與平均值的平方偏差。取平方偏差是為了強制與平均值的距離為非負數,然後取變異數的平方根,從而將其轉換為標準差,並使量度的單位與平均值相同。
變異數的計算公式如下:
σ² = (1/n) * Σ(i=1 to n) (xi - χ)²
標準差的計算公式如下:
σ = sqrt((1/n) * Σ(i=1 to n) (xi - χ)²)
通俗地說,標準差是分析資料集中的每個值時預期找到的與平均值的平均距離。
瞭解了波動率的概念後,讓我們來看看用於識別雙重困境形態的波動率指標:平均真實範圍 (ATR)。ATR 是另一種衡量波動率的方法。與標準差類別似,ATR 在計算中考慮了最高價和最低價,因此比標準差更完整。ATR 被用作衡量歷史波動率的指標。它是由 RSI 的創造者 Welles Wilder Jr. 開發的。ATR 的第一個組成部分是真實範圍。讓我們看看如何計算真實範圍。
假設您有一個 OHLC 陣列。對於每個小時,真實範圍就是三個價格差中最大的那個:
- 最高價 - 最低價
- 最高價 - 前收盤價
- 前收盤價 - 最低價
從這三個值中取最大值後,只需取真實範圍特定回顧期的平滑平均值即可得到 ATR。
由於在恐慌和價格下跌期間,波動性會上升,因此 ATR 在這些期間很可能會趨於走高。同樣,在穩定的上升趨勢或下降趨勢時期,ATR 通常會趨於走低。
以下程式碼片段顯示了 ATR 的程式碼:
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
內容解密:這段程式碼計算了平均真實範圍 (ATR)。它首先計算真實範圍,然後使用平滑移動平均線對其進行平滑處理。add_column
、smoothed_ma
、delete_column
和 delete_row
函式的實作程式碼未提供,但它們的功能可以從名稱中推斷出來。
現在您已經準備好學習雙重困境形態了,這是一種由兩個 K 線組成的趨勢形態…
(待續) 雙重麻煩形態的交易策略
在交易的世界裡,價格走勢的形態分析是技術分析的一個重要組成部分。雙重麻煩形態正是一種根據價格波動和動能的交易策略,它可以幫助交易者識別潛在的趨勢反轉和持續機會。
雙重麻煩形態的定義
雙重麻煩形態由兩個K線組成,這兩個K線的方向必須相同,可以是看漲的,也可以是看跌的。
- 看漲雙重麻煩: 由兩個看漲K線組成,第二個K線的收盤價高於第一個K線的收盤價。此外,第二個K線的實體(高點到低點的距離)必須至少是前一個K線的10期ATR的兩倍。
- 看跌雙重麻煩: 由兩個看跌K線組成,第二個K線的收盤價低於第一個K線的收盤價。同樣,第二個K線的實體必須至少是前一個K線的10期ATR的兩倍。
雙重麻煩形態背後的市場心理學
這種形態的出現通常根據市場的亢奮心理或空頭軋空。
- 亢奮心理: 連續兩個方向相同的強烈K線,顯示市場情緒高漲,可能預示趨勢將持續。
- 空頭軋空: 當價格快速上漲時,空頭被迫平倉,進一步推高價格,形成看漲雙重麻煩形態。反之亦然,價格快速下跌時,多頭被迫平倉,加劇價格下跌,形成看跌雙重麻煩形態。
如何用程式碼識別雙重麻煩形態
以下程式碼片段展示瞭如何使用Python識別雙重麻煩形態:
def double_trouble_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_signal
的函式,它接收市場資料(例如開盤價、最高價、最低價、收盤價和ATR)作為輸入,並根據雙重麻煩形態的規則產生買賣訊號。 函式會迭代資料,檢查是否滿足看漲或看跌雙重麻煩形態的條件。如果滿足條件,則在下一根K線設定買入或賣出訊號。 try-except
區塊用於處理迴圈開始時可能發生的索引錯誤。
圖表說明
以下使用 Mermaid 語法繪製的流程圖,更清晰地展示了雙重麻煩形態的判斷邏輯:
graph TD E[E] I[I] A[開始] --> B{當前K線是看漲K線嗎?}; B -- 是 --> C{前一根K線是看漲K線嗎?}; C -- 是 --> D{當前K線實體 >= 2 * 前一根K線的10期ATR嗎?}; D -- 是 --> E{買入訊號}; B -- 否 --> F{當前K線是看跌K線嗎?}; F -- 是 --> G{前一根K線是看跌K線嗎?}; G -- 是 --> H{當前K線實體 >= 2 * 前一根K線的10期ATR嗎?}; H -- 是 --> I{賣出訊號}; D -- 否 --> J[無訊號]; H -- 否 --> J; C -- 否 --> J; G -- 否 --> J; F -- 否 --> J; E --> K[結束]; I --> K; J --> K;
策略回測與績效
根據回測結果,雙重麻煩形態在不同市場中的表現有所不同。在某些市場中,例如 USDCHF 和 FTSE 100,該策略表現良好,但在其他市場中則表現一般。這突顯了在實際交易中調整策略引數和選擇合適市場的重要性。
雙重麻煩形態是一種根據價格波動和動能的交易策略,它可以幫助交易者識別潛在的交易機會。 然而,交易者應該注意,沒有任何一種策略可以保證在所有市場條件下都盈利。 因此,在使用雙重麻煩形態進行交易之前,務必進行 thorough 的回測和分析,並根據市場情況調整策略引數。 彈弓形態與H形態:現代趨勢跟蹤形態解析
在金融市場中,價格形態分析是技術分析的一個重要組成部分。本文將探討兩種現代趨勢跟蹤形態:彈弓形態和H形態,並提供Python程式碼實作。
彈弓形態(Slingshot Pattern)
彈弓形態是一種四蠟燭線趨勢檢測系統,它利用突破後的回呼來確認新趨勢。
多頭彈弓形態:
- 第一個蠟燭線為陽線。
- 第二個蠟燭線也是陽線,與高點高於第一個蠟燭線,確認多頭趨勢。
- 第三和第四個蠟燭線,第四個蠟燭線的高點不高於第三個蠟燭線的高點。
- 第四個蠟燭線的低點等於或低於第一個蠟燭線的高點,與收盤價高於第二個蠟燭線的高點。
空頭彈弓形態:
- 第一個蠟燭線為陰線。
- 第二個蠟燭線也是陰線,與低點低於第一個蠟燭線,確認空頭趨勢。
- 第三和第四個蠟燭線,第四個蠟燭線的低點不低於第三個蠟燭線的低點。
- 第四個蠟燭線的高點等於或高於第一個蠟燭線的低點,與收盤價低於第二個蠟燭線的低點。
graph LR D[D] A[第一根K線(陽)] --> B(第二根K線(陽)) B --> C(第三根K線) C --> D{第四根K線} D -- 低點<=A高點 & 收盤>B高點 --> E[多頭彈弓形態]
graph LR D[D] A[第一根K線(陰)] --> B(第二根K線(陰)) B --> C(第三根K線) C --> D{第四根K線} D -- 高點>=A低點 & 收盤<B低點 --> E[空頭彈弓形態]
Python程式碼實作:
def slingshot_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 - 1, high_column] and
data[i, close_column] > data[i - 2, high_column] and
data[i, low_column] <= data[i - 3, high_column] and
data[i, close_column] > data[i, open_column] and
data[i - 1, close_column] >= data[i - 3, high_column] and
data[i - 2, low_column] >= data[i - 3, low_column] and
data[i - 2, close_column] > data[i - 2, open_column] and
data[i - 2, close_column] > data[i - 3, high_column] and
data[i - 1, high_column] <= data[i - 2, high_column]):
data[i + 1, buy_column] = 1
# 空頭彈弓形態
elif (data[i, close_column] < data[i - 1, low_column] and
data[i, close_column] < data[i - 2, low_column] and
data[i, high_column] >= data[i - 3, low_column] and
data[i, close_column] < data[i, open_column] and
data[i - 1, high_column] <= data[i - 3, high_column] and
data[i - 2, close_column] <= data[i - 3, low_column] and
data[i - 2, close_column] < data[i - 2, open_column] and
data[i - 2, close_column] < data[i - 3, low_column] and
data[i - 1, low_column] >= data[i - 2, low_column]):
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
內容解密:
這段程式碼定義了一個函式slingshot_signal
,用於檢測彈弓形態。它遍歷輸入的data
,檢查是否符合多頭或空頭彈弓形態的條件。如果符合,則在buy_column
或sell_column
中設定相應的訊號。try...except
塊用於處理索引錯誤,以防止在資料邊界處發生錯誤。
H形態(H Pattern)
H形態是一種三蠟燭線延續形態。
多頭H形態:
- 第一個蠟燭線為陽線。
- 第二個蠟燭線為十字星線,即開盤價等於收盤價。
- 第三個蠟燭線為陽線,與收盤價高於第二個蠟燭線的收盤價,低點高於第二個蠟燭線的低點。
空頭H形態:
- 第一個蠟燭線為陰線。
- 第二個蠟燭線為十字星線,即開盤價等於收盤價。
- 第三個蠟燭線為陰線,與收盤價低於第二個蠟燭線的收盤價,高點低於第二個蠟燭線的高點。
graph LR C[C] A[第一根K線(陽)] --> B(第二根K線(十字星)) B --> C{第三根K線(陽)} C -- 收盤>B收盤 & 低點>B低點 --> D[多頭H形態]
graph LR C[C] A[第一根K線(陰)] --> B(第二根K線(十字星)) B --> C{第三根K線(陰)} C -- 收盤<B收盤 & 高點<B高點 --> D[空頭H形態]
Python程式碼實作:
def h_pattern_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:
# 多頭H形態
if (data[i, close_column] > data[i, open_column] and
data[i, close_column] > data[i - 1, close_column] and
data[i, low_column] > data[i - 1, low_column] and
data[i - 1, close_column] == data[i - 1, open_column] and
data[i - 2, close_column] > data[i - 2, open_column] and
data[i - 2, high_column] < data[i - 1, high_column]):
data[i + 1, buy_column] = 1
# 空頭H形態
elif (data[i, close_column] < data[i, open_column] and
data[i, close_column] < data[i - 1, close_column] and
data[i, low_column] < data[i - 1, low_column] and
data[i - 1, close_column] == data[i - 1, open_column] and
data[i - 2, close_column] < data[i - 2, open_column] and
data[i - 2, low_column] > data[i - 1, low_column]):
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
內容解密:
這段程式碼定義了一個函式h_pattern_signal
,用於識別H形態。它遍歷輸入的data
,檢查是否滿足多頭或空頭H形態的條件。如果滿足,則在buy_column
或sell_column
中設定對應的訊號。try...except
塊用於處理索引錯誤,避免在資料邊界出現問題。
這兩種形態在實際交易中可以作為趨勢判斷的輔助工具,但需要結合其他技術指標和市場情況進行綜合分析,才能提高交易勝率。
彈弓形態和H形態的回測結果顯示,它們在不同市場中的表現差異很大。在實際應用中,交易者需要根據具體市場情況調整進出場策略,才能更好地利用這些形態獲利。建議交易者根據自身風險偏好和市場特性,制定適合自己的交易規則。
十字星線圖:洞悉市場猶豫的藝術
在技術分析領域中,K線圖是不可或缺的工具,而十字星線圖(Doji)更是其中最直觀與廣為人知的形態之一。“Doji”一詞源於日語,意為“錯誤”,恰如其分地體現了交易者將其視為猶豫不決的訊號。如同光頭光腳線圖(Marubozu),十字星線圖也是單K線形態,其開盤價與收盤價相同,正因如此,它才被視為猶豫不決的標誌。
要區分 bullish Doji 和 bearish Doji,除了觀察當日 K 線外,還需參考前一根和後一根 K 線的變化。 bullish Doji 通常出現在下跌趨勢中,預示著可能的反轉;而 bearish Doji 則出現在上漲趨勢中,暗示著潛在的下跌風險。
graph LR A[前一根K線:下跌] --> B(十字星線圖); B --> C[後一根K線:上漲]; subgraph bullish Doji B end
graph LR A[前一根K線:上漲] --> B(十字星線圖); B --> C[後一根K線:下跌]; subgraph bearish Doji B end
十字星線圖背後的邏輯在於力量平衡的概念。當買方多於賣方時,需求大於供給,市場上漲;反之,市場下跌。而當多空力量達到平衡,即出現十字星線圖時,意味著買賣雙方都未能成功推動價格朝其期望的方向發展。
各種十字星線圖解密
除了基本的十字星線圖外,還有其他變體,例如:
- 蜻蜓十字星線圖(Dragonfly Doji): 最高價等於開盤價和收盤價,只有最低價不同。它同樣是猶豫不決的訊號, bullish 或 bearish 取決於先前的價格走勢。
graph LR A[低點] --> B(開盤/收盤/最高點); subgraph 蜻蜓十字星線圖 B end
- 墓碑十字星線圖(Gravestone Doji): 與蜻蜓十字星線圖相反,最低價等於開盤價和收盤價,只有最高價不同。 bullish 或 bearish 的判斷同樣取決於先前的價格走勢。
graph LR A[高點] --> B(開盤/收盤/最低點); subgraph 墓碑十字星線圖 B end
- 一字線十字星線圖(Flat Doji): 通常出現在零售市場關閉或假期交易時段,低流動性和低成交量是其主要特徵,不太可能指示方向。它代表市場猶豫不決,四個價格都相同,形似水平線。
graph LR A[開盤/收盤/最高點/最低點] subgraph 一字線十字星線圖 A end
- 雙十字星線圖(Double Doji): 出現兩個連續的十字星線圖,表示猶豫不決的時間延長,反轉的可能性降低。
graph LR A(十字星線圖) --> B(十字星線圖); subgraph 雙十字星線圖 A & B end
- 三星十字星線圖(Tri Star Doji): 最罕見的十字星線圖,由三個十字星線圖組成,中間一根跳空高於或低於其他兩根。
graph LR A(十字星線圖) --> B(十字星線圖); C(十字星線圖) --> B; subgraph 三星十字星線圖 A & B & C end
十字星線圖交易策略程式碼範例
以下程式碼片段展示瞭如何用 Python 編寫十字星線圖交易策略的訊號函式:
def signal(data, open_column, close_column, buy_column, sell_column):
data = add_column(data, 5)
for i in range(len(data)):
try:
# Bullish pattern
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 - 2, close_column] < data[i - 2, open_column]:
data[i + 1, buy_column] = 1
# Bearish pattern
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 - 2, close_column] > data[i - 2, open_column]:
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
內容解密:
這段程式碼定義了一個名為 signal
的函式,用於識別十字星線圖交易訊號。它遍歷輸入的資料 data
,檢查是否滿足 bullish 或 bearish 十字星線圖的條件。如果滿足 bullish 條件,則在下一根 K 線的買入欄位 buy_column
中標記為 1;如果滿足 bearish 條件,則在下一根 K 線的賣出欄位 sell_column
中標記為 -1。try...except
塊用於處理可能出現的索引錯誤,例如在處理資料開頭的幾根 K 線時。
需要注意的是,十字星線圖並非完美無缺,它可能多次出現但市場並未隨之反應。這是因為開盤價和收盤價的平衡並不一定意味著預期買賣活動的平衡。在實際交易中,應結合其他技術指標和市場分析,謹慎使用十字星線圖交易策略。
USDCHF 的訊號圖如下所示:
gantt title USDCHF 訊號圖; dateFormat YYYY-MM-DD; axisFormat %m-%d; section 買入訊號; 買入 :a1, 2025-03-31, 1d section 賣出訊號; 賣出 :after a1, 2025-04-01, 1d
顯然,十字星線圖形態並不罕見。以下另一個訊號圖也印證了這一點。由於後續內容未提供,故此處僅作示意。讀者可根據自身需求修改程式碼和資料,生成更具體的訊號圖。
在技術分析領域,K線型態是交易者洞察市場趨勢、預測價格反轉的重要工具。Harami型態,源自日語中「孕婦」一詞,以其獨特的兩根K線組合,成為經典的反轉訊號之一。本文將探討Harami型態的兩種主要變體:寬鬆型態與嚴格型態,並結合程式碼範例與圖表,助您在實戰交易中準確識別Harami型態,提升交易勝率。
## Harami型態:市場反轉的訊號
Harami型態由兩根K線組成,其核心思想在於第二根K線的實體完全被第一根K線的實體所包覆。這種型態暗示著市場趨勢的猶豫和潛在的反轉。
### 寬鬆Harami型態
寬鬆Harami型態對K線的影線長度沒有嚴格限制,重點關注K線實體的相對位置。
* **看漲Harami:** 出現一根下跌K線(母線),之後出現一根上漲K線(子線),子線的收盤價高於母線的開盤價,而子線的開盤價低於母線的收盤價。
* **看跌Harami:** 出現一根上漲K線(母線),之後出現一根下跌K線(子線),子線的開盤價低於母線的收盤價,而子線的收盤價高於母線的開盤價。
```mermaid
graph LR
A[母線:下跌] --> B(子線:上漲)
C[母線:上漲] --> D(子線:下跌)
subgraph 看漲Harami
A
B
end
subgraph 看跌Harami
C
D
end
以下程式碼片段展示瞭如何使用Python識別寬鬆Harami型態:
def identify_harami(data, open_col, high_col, low_col, close_col):
signals = []
for i in range(1, len(data)):
# 看漲Harami
if (
data[i][close_col] > data[i][open_col] and # 子線為陽線
data[i][close_col] < data[i-1][open_col] and # 子線收盤價低於母線開盤價
data[i][open_col] > data[i-1][close_col] and # 子線開盤價高於母線收盤價
data[i-1][close_col] < data[i-1][open_col] # 母線為陰線
):
signals.append(("Buy", data.index[i]))
# 看跌Harami
elif (
data[i][close_col] < data[i][open_col] and # 子線為陰線
data[i][close_col] > data[i-1][open_col] and # 子線收盤價高於母線開盤價
data[i][open_col] < data[i-1][close_col] and # 子線開盤價低於母線收盤價
data[i-1][close_col] > data[i-1][open_col] # 母線為陽線
):
signals.append(("Sell", data.index[i]))
return signals
內容解密:
這段程式碼定義了一個函式identify_harami
,用於識別寬鬆Harami型態。它遍歷輸入的K線資料,檢查相鄰兩根K線是否符合看漲或看跌Harami的條件。如果滿足條件,則將交易訊號(“Buy"或"Sell”)和對應的時間點增加到訊號列表中。
嚴格Harami型態
嚴格Harami型態在寬鬆型態的基礎上,進一步要求子線的最高價不得高於母線的開盤價(看漲情況),最低價不得低於母線的收盤價(看漲情況);子線的最高價不得高於母線的收盤價(看跌情況),最低價不得低於母線的開盤價(看跌情況)。
看漲嚴格Harami: 子線的最高價低於母線的開盤價,最低價高於母線的收盤價。
看跌嚴格Harami: 子線的最高價低於母線的收盤價,最低價高於母線的開盤價。
由於嚴格Harami型態出現的頻率較低,因此在實戰交易中,寬鬆Harami型態的應用更為廣泛。
Harami型態的實戰應用
在實際交易中,Harami型態並非單獨使用,通常需要結合其他技術指標或市場環境進行綜合判斷。例如,在上升趨勢中出現看跌Harami,可能預示著趨勢的反轉;而在下跌趨勢中出現看漲Harami,則可能意味著反彈的開始。
此外,交易者還需關注Harami型態出現的位置和大小。在重要的支撐或阻力位附近出現的Harami型態,其反轉的可能性更大。而子線的實體越小,反轉的力度可能越強。
透過結合市場環境、其他技術指標以及Harami型態本身的特徵,交易者可以更準確地判斷市場走勢,做出更明智的交易決策。
總之,Harami型態作為經典的反轉訊號,在交易實戰中具有重要的參考價值。透過理解Harami型態的兩種變體,並結合其他技術分析工具,交易者可以更好地把握市場動態,提升交易績效。
玄貓解讀反轉形態:頸線、鑷子與三明治 candlestick 模式
在技術分析領域,K線圖表是不可或缺的工具,尤其 candlestick 模式更能揭示市場潛在反轉訊號。本文將探討三種經典的反轉形態:頸線(On Neck)、鑷子(Tweezers)和三明治(Stick Sandwich),並以玄貓的獨特視角剖析其背後的心理學邏輯和演算法應用。
頸線模式(On Neck Pattern)
頸線模式易於理解,由兩個 candlestick 組成。 bullish 頸線形態由第一個 bearish candlestick 和第二個 bullish candlestick 組成,第二根開盤價向下跳空,但收盤價恰好與第一根 candlestick 的收盤價相同。 bearish 頸線形態則相反,由第一個 bullish candlestick 和第二個 bearish candlestick 組成,第二根開盤價向上跳空,但收盤價與第一根 candlestick 的收盤價相同。
graph LR A[Bearish Candle] --> B(Bullish Candle); B -- 收盤價相同 --> A; C[Bullish Candle] --> D(Bearish Candle); D -- 收盤價相同 --> C;
內容解密: 上圖展示了 bullish 和 bearish 頸線模式的 candlestick 排列,箭頭表示時間順序,並標註了關鍵特徵「收盤價相同」。
bullish 頸線模式的心理學含義是,儘管賣方 initially 佔據主導,但向下跳空未能進一步壓低價格,買方成功將價格拉回至前一根 candlestick 的收盤價,暗示買方開始掌控局面。 bearish 頸線模式的邏輯則相反。
頸線模式的命名源於第二根 candlestick 看起來像是抓住第一根 candlestick 的頸部。在演算法交易中,可以使用以下邏輯識別頸線模式:
def on_neck_signal(data, open, high, low, close, buy, sell):
for i in range(1, len(data)):
# Bullish On Neck
if data[i, close] > data[i, open] and \
data[i, close] == data[i-1, close] and \
data[i, open] < data[i-1, close] and \
data[i-1, close] < data[i-1, open]:
data[i+1, buy] = 1
# Bearish On Neck
elif data[i, close] < data[i, open] and \
data[i, close] == data[i-1, close] and \
data[i, open] > data[i-1, close] and \
data[i-1, close] > data[i-1, open]:
data[i+1, sell] = -1
return data
內容解密: 這段程式碼定義了一個函式 on_neck_signal
,用於識別 bullish 和 bearish 頸線模式。它遍歷價格資料,檢查是否滿足頸線模式的條件,如果滿足則在 buy 或 sell 欄位設定相應的訊號。
鑷子模式(Tweezers Pattern)
鑷子模式也是由兩個 candlestick 組成。 bullish 鑷子模式由第一個 bearish candlestick 和第二個 bullish candlestick 組成,兩者具有相同的最低價。 bearish 鑷子模式則由第一個 bullish candlestick 和第二個 bearish candlestick 組成,兩者具有相同的最高價。
graph LR A[Bearish Candle] --> B(Bullish Candle); B -- 最低價相同 --> A; C[Bullish Candle] --> D(Bearish Candle); D -- 最高價相同 --> C;
內容解密: 上圖以簡潔的方式說明瞭 bullish 和 bearish 鑷子模式的 candlestick 組合,並突出了「最低價相同」和「最高價相同」的關鍵特徵。
bullish 鑷子模式的心理學含義是,市場未能創新低,可能找到了支撐。 bearish 鑷子模式則相反,市場未能創新高,可能遇到阻力。
三明治模式(Stick Sandwich Pattern)
三明治模式由三個 candlestick 組成,顏色交替出現。 bullish 三明治模式由第一個 bearish candlestick、第二個較小的 bullish candlestick 和第三個比第二個大的 bearish candlestick 組成。 bearish 三明治模式則相反。
graph LR A[Bearish Candle] --> B(Small Bullish Candle) --> C(Large Bearish Candle); D[Bullish Candle] --> E(Small Bearish Candle) --> F(Large Bullish Candle);
內容解密: 上圖清晰地展示了 bullish 和 bearish 三明治模式的三個 candlestick 的排列順序和大小關係。
三明治模式通常出現在趨勢中, bullish 三明治模式之前通常是 bearish 價格走勢, bearish 三明治模式之前通常是 bullish 價格走勢。
透過以上分析,我們可以看出, candlestick 模式能提供有價值的市場反轉訊號。然而,實際應用中需結合其他技術指標和市場環境進行綜合判斷,才能提高交易勝率。
價格型態交易策略:三支線、錘子與星辰
在技術分析領域中,價格型態是交易者重要的參考依據。我將深入解析三種經典的價格型態:三支線(Stick Sandwich)、錘子(Hammer)和星辰(Star),並探討它們在交易策略中的應用。
三支線型態(Stick Sandwich)
三支線型態因其形狀類別似三明治而得名,外部兩根較大的K線代表麵包,中間的K線代表餡料。
看漲三支線的出現,意味著市場可能在未創新低的情況下找到了支撐,類別似於鑷子底的原理。相反,看跌三支線則暗示市場可能在未創新高的情況下遇到阻力。
以下圖表說明看漲三支線型態:
graph LR A[第一根K線:陰線,高點高於前一根] --> B(第二根K線:陽線) B --> C[第三根K線:陰線,低點低於前一根,收盤價低於前兩根]
以下程式碼展示如何識別三支線型態:
def identify_stick_sandwich(data, open, high, low, close):
buy_signals = []
sell_signals = []
for i in range(3, len(data)):
# 看漲三支線
if (
data[i, close] < data[i, open] and
data[i, high] > data[i-1, high] and
data[i, low] < data[i-1, low] and
data[i-1, close] > data[i-1, open] and
data[i-2, close] < data[i-2, open] and
data[i-2, high] > data[i-1, high] and
data[i-2, low] < data[i-1, low] and
data[i-2, close] < data[i-3, close] and
data[i-3, close] < data[i-3, open]
):
buy_signals.append(i+1)
# 看跌三支線
elif (
# 看跌三支線條件
):
sell_signals.append(i+1)
return buy_signals, sell_signals
內容解密:
這段程式碼定義了一個函式identify_stick_sandwich
,用於識別三支線型態。它遍歷價格資料,檢查是否符合看漲或看跌三支線的條件。如果滿足條件,則將對應的索引增加到買入或賣出訊號列表中。
錘子型態(Hammer)
錘子型態指的是帶有長下影線、沒有上影線與實體較小的K線。
看漲錘子表示買方在價格觸及盤中低點後成功推高價格,收盤價高於開盤價。相反,看跌錘子則表示賣方在價格觸及盤中高點後成功壓低價格,收盤價低於開盤價。
graph LR A[看漲錘子:長下影線,短或無上影線,收盤價高於開盤價] --> B C[看跌錘子:長上影線,短或無下影線,收盤價低於開盤價] --> D
內容解密:
此圖表清晰地展示了看漲和看跌錘子的特徵,包括影線長度和實體位置。
星辰型態(Star)
星辰型態是一種較為少見的三根K線組成的反轉型態。
看漲星辰,又稱晨星,由一根陰線、一根實體較小的K線和一根陽線組成,中間的K線與前後兩根K線之間存在跳空缺口。看跌星辰,又稱暮星,則由一根陽線、一根實體較小的K線和一根陰線組成,中間的K線與前後兩根K線之間同樣存在跳空缺口。
graph LR A[第一根K線:陰線] --> B(第二根K線:實體小,跳空低開) B --> C[第三根K線:陽線,跳空高開] D[第一根K線:陽線] --> E(第二根K線:實體小,跳空高開) E --> F[第三根K線:陰線,跳空低開]
內容解密:
此圖表展示了晨星和暮星的組成結構以及跳空缺口的特徵。
這些價格型態可以作為交易策略的參考,但交易者應結合其他技術指標和市場分析,才能做出更明智的交易決策。我個人認為,價格型態並非絕對的交易訊號,更重要的是理解其背後的市場心理和供需關係。
突破交易迷思:穿刺、吞噬與棄嬰形態的實戰解析
在技術分析領域,K線形態是交易者常用的工具之一。穿刺、吞噬和棄嬰形態都是經典的反轉形態,但實際應用中,它們的有效性如何?我將結合自身經驗,深入剖析這些形態的實質,並提供更實用的交易策略。
穿刺形態:市場情緒的微妙轉變
穿刺形態由兩根K線組成。 bullish 穿刺形態中,第一根為 bearish K線,第二根為 bullish K線,開盤價向下跳空,收盤價高於前一根K線的收盤價,但低於其開盤價。 bearish 穿刺形態則相反。
graph LR A[第一根K線:Bearish] --> B(第二根K線:Bullish,向下跳空高於前一根收盤)
內容解密: 上圖展示了 bullish 穿刺形態的結構。第二根K線雖然向下跳空,但強勢收復,顯示買方力量開始介入。
穿刺形態的出現,暗示市場情緒的微妙轉變。然而,單憑此形態進行交易的勝率並不高。我的經驗是,結合其他指標,例如成交量和趨勢線,才能提高其準確性。例如,在下降趨勢中出現 bullish 穿刺形態,與伴隨著成交量放大,則更可能預示反轉。
吞噬形態:力量對比的直觀展現
吞噬形態同樣由兩根K線組成。 bullish 吞噬形態中,第二根 bullish K線完全吞噬前一根 bearish K線。 bearish 吞噬形態則相反。
graph LR A[第一根K線:Bearish] --> B(第二根K線:Bullish,完全吞噬前一根)
內容解密: 圖示清晰地展現了 bullish 吞噬形態中,第二根 bullish K線的強勢,完全壓倒了前一根 bearish K線。
吞噬形態更直觀地展現了多空力量的對比。第二根K線的長度越大,吞噬的程度越徹底,反轉的可能性越高。同樣地,結合其他指標,例如支撐位和阻力位,可以提高交易勝率。
棄嬰形態:罕見但並非毫無價值
棄嬰形態由三根K線組成,中間一根為十字星。 bullish 棄嬰形態中,第一根為 bearish K線,第二根為向下跳空的十字星,第三根為 bullish K線,與與前兩根K線不接觸。 bearish 棄嬰形態則相反。
graph LR A[第一根K線:Bearish] --> B(第二根K線:十字星,向下跳空) --> C(第三根K線:Bullish,向上跳空)
內容解密: 棄嬰形態的圖示顯示了市場的猶豫和隨後的反轉。十字星代表市場的平衡,而第三根K線的跳空則顯示了新的趨勢方向。
棄嬰形態的出現頻率極低,因此樣本資料不足以進行可靠的回測。然而,這並不意味著它毫無價值。當棄嬰形態出現時,往往預示著市場的重大轉折。結合其他指標,例如市場情緒和基本面分析,可以幫助我們判斷其有效性。
透過以上分析,我們可以看出,單獨使用這些K線形態進行交易的風險較高。結合其他技術指標和市場分析,才能提高交易的勝率。更重要的是,理解這些形態背後的市場心理和多空力量對比,才能在實戰中靈活運用。
在交易中,我更傾向於將這些形態作為輔助工具,而非主要的交易依據。透過觀察市場的整體趨勢、成交量變化以及其他技術指標,才能更準確地判斷市場方向,做出更明智的交易決策。
旋轉陀螺形態的交易策略
旋轉陀螺形態是一種三蠟燭反轉形態,類別似於十字星形態,但更常見,並間接暗示波動性的上升。
看漲旋轉陀螺
看漲旋轉陀螺由一根看跌蠟燭、一根帶長影線的小實體蠟燭和一根確認上漲趨勢的看漲蠟燭組成。如下圖所示:
graph LR A[看跌蠟燭] --> B(小實體蠟燭); B --> C[看漲蠟燭]; style B fill:#f9f,stroke:#333,stroke-width:2px
看跌旋轉陀螺
看跌旋轉陀螺由一根看漲蠟燭、一根帶長影線的小實體蠟燭和一根確認下跌趨勢的看跌蠟燭組成。如下圖所示:
graph LR A[看漲蠟燭] --> B(小實體蠟燭); B --> C[看跌蠟燭]; style B fill:#f9f,stroke:#333,stroke-width:2px
旋轉陀螺形態的名稱顯然與其形狀相似有關。其背後的邏輯與十字星形態相同,但由於收盤價並不完全等於開盤價,因此效力較弱。然而,長影線顯示買賣雙方之間的拉鋸戰,可能預示形態出現後將出現明確方向。
以下程式碼片段展示了旋轉陀螺形態的訊號判斷邏輯:
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] > body and \
data[i - 1, high_column] - data[i - 1, close_column] >= wick and \
data[i - 1, open_column] - data[i - 1, low_column] >= wick and \
data[i - 1, close_column] - data[i - 1, open_column] < body and \
data[i - 1, close_column] > data[i - 1, open_column] and \
data[i - 2, close_column] < data[i - 2, open_column] and \
data[i - 2, open_column] - data[i - 2, close_column] > body:
data[i + 1, buy_column] = 1
# 看跌形態
elif data[i, open_column] - data[i, close_column] > body and \
data[i - 1, high_column] - data[i - 1, open_column] >= wick and \
data[i - 1, close_column] - data[i - 1, low_column] >= wick and \
data[i - 1, open_column] - data[i - 1, close_column] < body and \
data[i - 1, close_column] < data[i - 1, open_column] and \
data[i - 2, close_column] > data[i - 2, open_column] and \
data[i - 2, close_column] - data[i - 2, open_column] > body:
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
內容解密: 這段程式碼定義了一個函式signal
,用於識別旋轉陀螺形態。它遍歷資料,檢查是否滿足看漲或看跌旋轉陀螺的條件。body
和wick
變數分別代表實體和影線的長度閾值。如果滿足條件,則在buy_column
或sell_column
中設定相應的買入或賣出訊號。
內部向上/向下形態的交易策略
內部向上/向下形態是一種三蠟燭反轉形態,標誌著初始走勢的結束。
看漲內部向上形態
看漲內部向上形態由一根看跌蠟燭、一根較小的看漲蠟燭(其主體位於第一根蠟燭的主體內)和一根突破第一根蠟燭開盤價的看漲蠟燭組成。如下圖所示:
graph LR A[看跌蠟燭] --> B(小看漲蠟燭); B --> C[看漲蠟燭]; style B fill:#ccf,stroke:#333,stroke-width:2px
看跌內部向下形態
看跌內部向下形態由一根看漲蠟燭、一根較小的看跌蠟燭(其主體位於第一根蠟燭的主體內)和一根跌破第一根蠟燭開盤價的看跌蠟燭組成。如下圖所示:
graph LR A[看漲蠟燭] --> B(小看跌蠟燭); B --> C[看跌蠟燭]; style B fill:#f99,stroke:#333,stroke-width:2px
蠟燭的實體是開盤價和收盤價之間的絕對差,而蠟燭的範圍是最高價和最低價之間的絕對差。
內部向上形態的邏輯是,在盛行的看跌趨勢之後,買方開始掌控局面。第二根蠟燭顯示了力量的第一次平衡,然後第三根蠟燭確認了這一新走勢,突破了第二根蠟燭的收盤價。第二根蠟燭包含在第一根蠟燭的主體內,表明賣方無法進一步推低價格,這是賣方開始掙扎的跡象。內部向下形態的邏輯是,在盛行的看漲趨勢之後,賣方開始掌控局面。第二根蠟燭包含在第一根蠟燭的主體內,表明買方無法進一步推高價格。
內部向上/向下形態類別似於孕線形態後跟一根確認新方向的大蠟燭的組合。
以下程式碼片段展示了內部向上/向下形態的訊號判斷邏輯:
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 - 2, close_column] < data[i - 2, open_column] and \
abs(data[i - 2, open_column] - data[i - 2, close_column]) > body and \
data[i - 1, close_column] < data[i - 2, open_column] and \
data[i - 1, open_column] > data[i - 2, close_column] and \
data[i - 1, close_column] > data[i - 1, open_column] and \
data[i, close_column] > data[i - 2, open_column] and \
data[i, close_column] > data[i, open_column] and \
abs(data[i, open_column] - data[i, close_column]) > body:
data[i + 1, buy_column] = 1
# 看跌形態
# ... (類別似看漲形態的條件判斷)
except IndexError:
pass
return data
內容解密: 這段程式碼定義了一個函式 signal
,用於識別內部向上/向下形態。它遍歷資料,檢查是否滿足看漲或看跌形態的條件,例如蠟燭的相對位置和實體大小。如果滿足條件,則在 buy_column
或 sell_column
中設定買入或賣出訊號。
塔形形態
塔形形態是一種多蠟燭(通常為五根)反轉形態,標誌著漸進趨勢的結束。
看漲塔底形態
看漲塔底形態以一根看跌蠟燭開始,接著是三根小實體蠟燭,中間一根略低於其他兩根。最後,一根正常大小的看漲蠟燭確認上漲趨勢。如下圖所示:
graph LR A[看跌蠟燭] --> B(小實體蠟燭1); B --> C(小實體蠟燭2); C --> D(小實體蠟燭3); D --> E[看漲蠟燭]; style C fill:#f99,stroke:#333,stroke-width:2px
看跌塔頂形態
看跌塔頂形態以一根看漲蠟燭開始,接著是三根小實體蠟燭,中間一根略高於其他兩根。最後,一根正常大小的看跌蠟燭確認下跌趨勢。
這些形態提供了一種視覺化的方式來識別潛在的反轉點,但交易者應結合其他技術指標和市場分析來做出更明智的決策。
塔形頂部與底部形態
塔形形態是一種價格穩定形態,暗示初始趨勢可能結束。塔形底部形態出現在下跌趨勢後,小型K線暗示價格可能穩定,最後一根看漲K線確認看漲反轉。類別似地,塔形頂部形態暗示價格可能盤整,最後一根看跌K線確認下跌趨勢。
由於條件模糊,多K線形態有時難以編碼。塔形形態存在多種版本,但我發現限制在最多五根K線比設定更多K線條件更好。
以下是用 Python 編碼的塔形形態訊號函式:
def signal(data, open_column, high_column, low_column, close_column, buy_column, sell_column):
data = add_column(data, 5)
body = 0.0005 # 設定K線實體大小的閾值
for i in range(len(data)):
try:
# 看漲形態
if (
data[i, close_column] > data[i, open_column] and
data[i, close_column] - data[i, open_column] > body and
data[i - 2, low_column] < data[i - 1, low_column] and
data[i - 2, low_column] < data[i - 3, low_column] and
data[i - 4, close_column] < data[i - 4, open_column] and
data[i - 4, open_column] - data[i, close_column] > body
):
data[i + 1, buy_column] = 1
# 看跌形態
elif (
data[i, close_column] < data[i, open_column] and
data[i, open_column] - data[i, close_column] > body and
data[i - 2, high_column] > data[i - 1, high_column] and
data[i - 2, high_column] > data[i - 3, high_column] and
data[i - 4, close_column] > data[i - 4, open_column] and
data[i - 4, close_column] - data[i, open_column] > body
):
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
內容解密:
這段程式碼定義了一個函式 signal
,用於識別塔形形態。它遍歷資料集中的每一根K線,檢查是否符合塔形頂部或底部的條件。body
變數定義了K線實體大小的閾值,用於過濾掉實體過小的K線。try-except
塊用於處理索引錯誤,防止程式在處理資料邊界時當機。
下圖展示了 USDCAD 和 GBPUSD 的訊號圖表。不同市場的塔形形態表現差異很大,這突顯了根據特定市場調整策略的重要性。
graph LR A[USDCAD 訊號圖] --> B{塔形形態}; C[GBPUSD 訊號圖] --> B;
不同資產的塔形形態績效總結如下表所示:
資產 | 命中率 | 獲利因子 | 風險報酬比 | 訊號數量 |
---|---|---|---|---|
EURUSD | 49.31% | 1.01 | 1.04 | 878 |
USDCHF | 50.47% | 1.20 | 1.18 | 735 |
GBPUSD | 46.30% | 0.95 | 1.10 | 1203 |
USDCAD | 50.44% | 1.09 | 1.07 | 1013 |
BTCUSD | 43.33% | 1.06 | 1.38 | 503 |
ETHUSD | 45.45% | 0.88 | 1.05 | 231 |
GOLD | 47.32% | 0.73 | 0.81 | 336 |
S&P500 | 43.75% | 0.85 | 1.09 | 16 |
FTSE100 | 50.00% | 1.27 | 1.27 | 60 |
Doppelgänger 形態
Doppelgänger,德語中意為「分身」,這個 K 線形態由三根 K 線組成,我用它來確認中期反轉。
看漲 Doppelgänger 形態由一根看跌 K 線,加上兩根數值相似的 K 線(高低點相同,收盤價和開盤價相同,或者收盤價等於開盤價)組成,這兩根 K 線可以是看漲或看跌。相反,看跌 Doppelgänger 形態由一根看漲 K 線加上兩根數值相似的 K 線組成。
理想情況下,當下一根 K 線突破相似高點時,確認看漲反轉;當下一根 K 線跌破相似低點時,確認看跌反轉。這是一個可選條件,將形態轉變為四根 K 線形態。
Doppelgänger 形態背後的邏輯在於力量平衡的概念。當出現相似的 K 線時,當前總體方向的猶豫不定可能會導致趨勢的徹底轉變。此外,低點的相等(在看漲 Doppelgänger 中)和高點的相等(在看跌 Doppelgänger 中)分別等同於支撐位和阻力位的概念。
為了增加訊號的頻率,必須像在前面章節中看到的那樣對值進行四捨五入。使用外匯資料時,需要四位小數;使用其他回測資產時,需要零位小數。
def signal(data, open_column, high_column, low_column, close_column, buy_column, sell_column):
data = add_column(data, 5)
data = rounding(data, 4) # 對於非外匯資產,將 4 更改為 0
for i in range(len(data)):
try:
# 看漲形態
if (
data[i - 2, close_column] < data[i - 2, open_column] and
data[i - 1, close_column] < data[i - 2, open_column] and
data[i, high_column] == data[i - 1, high_column] and
data[i, low_column] == data[i - 1, low_column]
):
data[i + 1, buy_column] = 1
# 看跌形態
elif (
data[i - 2, close_column] > data[i - 2, open_column] and
data[i - 1, close_column] > data[i - 2, open_column] and
data[i, high_column] == data[i - 1, high_column] and
data[i, low_column] == data[i - 1, low_column]
):
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
內容解密:
這段程式碼定義了一個名為 signal
的函式,用於識別 Doppelgänger 形態。它遍歷資料集中的每一根 K 線,檢查是否符合看漲或看跌 Doppelgänger 形態的條件。rounding
函式用於將價格資料四捨五入到指定的小數位數,以提高訊號的頻率。
Doppelgänger 形態並不常見。下圖顯示了 GBPUSD 和 USDCHF 的訊號圖表。
graph LR A[GBPUSD 訊號圖] --> B{Doppelgänger 形態}; C[USDCHF 訊號圖] --> B;
Doppelgänger 形態的績效總結如下表所示:
資產 | 命中率 | 獲利因子 | 風險報酬比 | 訊號數量 |
---|---|---|---|---|
EURUSD | 46.42% | 0.97 | 1.12 | 448 |
USDCHF | 50.00% | 0.89 | 0.89 | 558 |
GBPUSD | 48.05% | 1.07 | 1.16 | 283 |
USDCAD | 45.52% | 0.76 | 0.91 | 380 |
BTCUSD | 45.45% | 1.78 | 2.13 | 99 |
ETHUSD | 50.87% | 0.92 | 0.88 | 1201 |
GOLD | 49.74% | 0.85 | 0.85 | 2738 |
S&P500 | 50.90% | 0.98 | 0.95 | 110 |
FTSE100 | 48.27% | 1.27 | 1.36 | 29 |
總而言之,該形態在不同資產類別中顯示出混合的訊號和頻率。這可能是因為離開技術不適合該形態,因為它主要關注中期反轉走勢,但為了協調這篇文章中所有形態的回測,離開條件是相同的。
提醒一下,離開條件是遇到看漲或看跌訊號;否則,交易繼續進行。
封鎖形態 (Blockade Pattern)
這個形態類別似於市場已經找到支撐位或阻力位並顯示出反轉跡象的概念。封鎖形態是一種由四根 K 線組成的形態,具有一些難以從視覺上察覺的條件。
看漲封鎖形態:第一根 K 線必須是看跌的,後面的三根 K 線的低點必須等於或高於第一根 K 線的低點,但低於其收盤價。最後,第四根 K 線必須是看漲的,並且其收盤價必須高於第一根 K 線的最高價。這些條件….. (待續)
逆勢交易策略:封鎖形態與狂熱形態的實戰應用
在金融市場中,準確預測價格反轉是獲利的關鍵。逆勢交易策略旨在捕捉價格反轉點,從而取得利潤。本文將探討兩種現代逆勢交易形態:封鎖形態(Blockade Pattern)和狂熱形態(Euphoria Pattern),並分享如何辨識這些形態,以及如何將其融入交易策略。
封鎖形態:捕捉支撐/阻力位的反轉訊號
封鎖形態是一種根據支撐位或阻力位附近價格穩定階段的逆勢形態。當市場在支撐/阻力位附近盤整後,出現方向明確的K線突破,則可視為反轉訊號。
圖一展示了看漲封鎖形態,圖二則展示了看跌封鎖形態。
graph LR B[B] C[C] D[D] A[看漲封鎖形態] --> B{第一根K線為看跌} B --> C{接下來三根K線的高點<br>不大於第一根K線的低點<br>但高於第一根K線的收盤價} C --> D{第四根K線為看漲<br>與收盤價高於第一根K線的高點}
graph LR B[B] C[C] D[D] A[看跌封鎖形態] --> B{第一根K線為看漲} B --> C{接下來三根K線的低點<br>不小於第一根K線的高點<br>但低於第一根K線的收盤價} C --> D{第四根K線為看跌<br>與收盤價低於第一根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 - 3, close_column] < data[i - 3, open_column] and \
# ... (其他條件)
data[i, close_column] > data[i - 3, high_column]:
data[i + 1, buy_column] = 1
# 看跌形態
elif data[i - 3, close_column] > data[i - 3, open_column] and \
# ... (其他條件)
data[i, close_column] < data[i - 3, low_column]:
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
內容解密:這段程式碼定義了一個函式 signal
,用於識別封鎖形態。它遍歷資料,檢查是否滿足看漲或看跌封鎖形態的條件。如果滿足條件,則在對應的買入或賣出欄位設定訊號。
狂熱形態:識別過度貪婪的反轉訊號
狂熱形態與經典的三K線形態相似,但增加了一個條件:每根K線的實體(即收盤價與開盤價之差的絕對值)必須大於前一根K線的實體。
圖三和圖四分別展示了看漲和看跌的狂熱形態。
graph LR B[B] C[C] A[看漲狂熱形態] --> B{連續三根看跌K線} B --> C{每根K線的實體<br>大於前一根}
graph LR B[B] C[C] A[看跌狂熱形態] --> B{連續三根看漲K線} B --> C{每根K線的實體<br>大於前一根}
以下 Python 程式碼片段展示瞭如何編寫狂熱形態的訊號函式:
def signal(data, open_column, close_column, buy_column, sell_column):
data = add_column(data, 5)
data = rounding(data, 4) # 依據貨幣對調整小數位數
for i in range(len(data)):
try:
# 看漲形態
if # ... (條件)
data[i + 1, buy_column] = 1
# 看跌形態
elif # ... (條件)
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
內容解密:這段程式碼定義了一個函式 signal
,用於識別狂熱形態。它遍歷資料,檢查是否滿足看漲或看跌狂熱形態的條件。如果滿足條件,則在對應的買入或賣出欄位設定訊號。
狂熱形態試圖捕捉市場過度貪婪的階段末期,因此風險較高。然而,在短期事件驅動的市場中,狂熱形態可能表現出色。
封鎖形態和狂熱形態是兩種有效的逆勢交易形態,但交易者應結合其他訊號和指標進行確認,並根據市場情況調整策略。
實戰應用建議
在實際交易中,單純依靠形態辨識是不夠的,建議結合其他技術指標,例如成交量、動能指標等,提高交易勝率。此外,風險管理至關重要,設定止損點可以有效控制虧損。
持續學習和實踐是精通交易的關鍵。建議交易者不斷學習新的技術分析方法,並在模擬賬戶中進行練習,逐步提升交易技巧。
映象模式交易策略
映象模式是一種根據價格行為反轉的交易策略,其核心概念是市場在形成U型反轉後可能改變方向。這個策略觀察價格走勢,尋找特定K線組合,預測價格的潛在反轉點。
讓我們先來看 bullish 映象模式。如下圖所示:
graph LR Close[Close] High[High] A[Bearish Candle] --> B(Candle 1); B --> C(Candle 2); C --> D[Bullish Candle]; A -- High == High --> D; B -- Close == Close --> C;
圖表說明:
- 首先出現一根 bearish K線 (A)。
- 接著出現兩根 K線 (B 和 C),它們的收盤價相同。
- 最後一根是 bullish K線 (D),其高點與第一根 bearish K線 (A) 的高點相同。
此模式的出現暗示市場可能由跌轉漲。
相對地,bearish 映象模式如下圖所示:
graph LR Close[Close] Low[Low] A[Bullish Candle] --> B(Candle 1); B --> C(Candle 2); C --> D[Bearish Candle]; A -- Low == Low --> D; B -- Close == Close --> C;
圖表說明:
- 首先出現一根 bullish K線 (A)。
- 接著出現兩根 K線 (B 和 C),它們的收盤價相同。
- 最後一根是 bearish K線 (D),其低點與第一根 bullish K線 (A) 的低點相同。
此模式暗示市場可能由漲轉跌。
在實際應用中,為了提高訊號出現的頻率,我對理論上的條件進行了一些調整。例如,中間兩根K線的最高價和最低價不需要完全相同,只要它們的收盤價相同即可視為有效模式。
以下程式碼片段展示瞭如何編寫映象模式的訊號函式:
def signal(data, open_column, high_column, low_column, close_column, buy_column, sell_column):
data = add_column(data, 5)
data = rounding(data, 0) # 依據貨幣對調整小數位數
for i in range(len(data)):
try:
# Bullish 映象模式
if data[i, close_column] > data[i, open_column] and \
data[i, high_column] == data[i - 3, high_column] and \
data[i, close_column] > data[i - 1, close_column] and \
data[i, close_column] > data[i - 2, close_column] and \
data[i, close_column] > data[i - 3, close_column] and \
data[i - 3, close_column] < data[i - 3, open_column] and \
data[i - 1, close_column] == data[i - 2, close_column]:
data[i + 1, buy_column] = 1
# Bearish 映象模式
elif data[i, close_column] < data[i, open_column] and \
data[i, low_column] == data[i - 3, low_column] and \
data[i, close_column] < data[i - 1, close_column] and \
data[i, close_column] < data[i - 2, close_column] and \
data[i, close_column] < data[i - 3, close_column] and \
data[i - 3, close_column] > data[i - 3, open_column] and \
data[i - 1, close_column] == data[i - 2, close_column]:
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
內容解密:
這段程式碼定義了一個名為 signal
的函式,用於識別映象模式交易訊號。它首先調整資料精確度,然後遍歷資料,尋找符合 bullish 或 bearish 映象模式條件的 K 線組合。如果找到比對的模式,則在對應的買入或賣出欄位中設定訊號。需要注意的是,程式碼中加入了 try-except
區塊來處理索引錯誤,以避免在處理資料邊界時發生錯誤。此外,程式碼中放寬了中間兩根 K 線的條件,只要求它們的收盤價相同,以增加訊號出現的頻率。
映象模式提供了一種捕捉市場反轉的潛在機會的方法。然而,如同其他技術指標一樣,它並非完美無缺,交易者應結合其他指標和風險管理策略來制定交易決策。
深入剖析改良版反轉形態:映象、縮減與Heikin-Ashi系統
在交易的世界裡,K線圖分析是技術分析的根本,但傳統的K線形態有時會受到市場雜訊幹擾,難以判讀真實趨勢。本文將探討兩種改良的反轉形態:映象形態和縮減形態,並介紹Heikin-Ashi系統如何有效過濾市場雜訊,提升交易策略的準確性。
映象形態:捕捉市場轉折的微妙訊號
映象形態預示著市場參與者逐漸改變方向,形成U型反轉走勢。雖然這種形態出現頻率較低,但其背後的邏輯清晰易懂,可以視為Doppelgänger形態的延續。
以EURCHF和USDCHF這兩個貨幣對為例,即使調整了判斷條件,要準確識別映象形態仍具有一定挑戰性。下方表格總結了映象形態在不同資產上的表現:
資產 | 命中率 | 獲利因子 | 風險回報率 | 訊號數量 |
---|---|---|---|---|
EURUSD | 45.23% | 1.02 | 1.23 | 42 |
USDCHF | 41.37% | 0.69 | 0.98 | 58 |
GBPUSD | 37.50% | 0.78 | 1.3 | 32 |
USDCAD | 34.21% | 0.78 | 1.5 | 38 |
BTCUSD | 70.00% | 3.02 | 1.29 | 10 |
ETHUSD | 44.30% | 0.83 | 1.04 | 237 |
GOLD | 49.00% | 1.14 | 1.18 | 500 |
S&P500 | 80.00% | 5.38 | 1.34 | 15 |
縮減形態:從盤整突破中尋找方向
縮減形態的核心概念是價格在一段時間的盤整後突破。它由多根K線組成,最後一根K線確認突破方向。
以下圖表說明瞭看漲和看跌縮減形態:
graph LR A[第一根K線:看跌] --> B(第二根K線); B --> C(第三根K線); C --> D(第四根K線); D --> E[第五根K線:看漲,突破第二根K線高點]; subgraph 看漲縮減形態 A B C D E end F[第一根K線:看漲] --> G(第二根K線); G --> H(第三根K線); H --> I(第四根K線); I --> J[第五根K線:看跌,跌破第二根K線低點]; subgraph 看跌縮減形態 F G H I J end
以下程式碼片段展示瞭如何編寫縮減形態的訊號函式。程式碼中加入了一些彈性條件,例如忽略了中間三根K線的低點或高點必須完全一致的理論設定。
def signal(data, open_column, high_column, low_column, close_column, buy_column, sell_column):
data = add_column(data, 5)
data = rounding(data, 4)
# ... (程式碼邏輯 - 省略) ...
return data
以GBPAUD為例,下圖展示了縮減形態的訊號圖表。
# 此處應插入 GBPAUD 的訊號圖表,使用 Mermaid 語法繪製
下表總結了縮減形態在不同資產上的表現:
資產 | 命中率 | 獲利因子 | 風險回報率 | 訊號數量 |
---|---|---|---|---|
EURUSD | 37.77% | 0.52 | 0.86 | 45 |
USDCHF | 37.14% | 0.39 | 0.66 | 35 |
GBPUSD | 41.37% | 0.66 | 0.94 | 29 |
USDCAD | 43.47% | 1.44 | 1.87 | 46 |
BTCUSD | 58.62% | 1.24 | 0.88 | 29 |
ETHUSD | 55.55% | 2.16 | 1.73 | 27 |
GOLD | 61.53% | 0.73 | 0.46 | 26 |
Heikin-Ashi系統:過濾雜訊,洞悉趨勢
Heikin-Ashi系統,又稱為Heikin-Ashi K線,意為「平均K線」。它透過轉換開盤價、最高價、最低價和收盤價,將K線圖資料平滑化,從而更清晰地展現市場趨勢,過濾掉隨機波動造成的雜訊。
需要注意的是,Heikin-Ashi圖表呈現的是平滑後的數值,而非真實價格。例如,一根看跌的Heikin-Ashi K線並不一定代表真實的看跌K線,其收盤價也未必等於真實K線的收盤價。
Heikin-Ashi的計算公式如下:
- 轉換後開盤價 = (前一根K線開盤價 + 前一根K線收盤價) / 2
- 轉換後最高價 = 最高價、轉換後開盤價、轉換後收盤價中的最大值
- 轉換後最低價 = 最低價、轉換後開盤價、轉換後收盤價中的最小值
- 轉換後收盤價 = (開盤價 + 最高價 + 最低價 + 收盤價) / 4
Heikin-Ashi圖表的一個顯著特點是K線顏色變化的頻率比普通K線圖低,這正是其平滑效果的體現,有助於交易者更清晰地判斷趨勢方向。
透過結合映象形態、縮減形態和Heikin-Ashi系統,交易者可以更有效地識別市場反轉訊號,減少雜訊幹擾,提高交易策略的準確性。
總結:本文探討了映象形態、縮減形態和Heikin-Ashi系統,並提供了程式碼範例和圖表說明。這些技術分析工具可以幫助交易者更好地理解市場趨勢,提高交易決策的準確性。建議交易者將這些工具結合使用,並根據自身交易風格和市場情況進行調整。
平滑交易的藝術:深入解析Heikin-Ashi技術
Heikin-Ashi蠟燭圖技術以其平滑的視覺化效果,有效過濾市場噪音,協助交易者更清晰地辨識趨勢。與傳統蠟燭圖相比,Heikin-Ashi透過平均價格計算,減少了價格波動的幹擾,讓趨勢方向一目瞭然。
讓我們以AUDNZD和GBPAUD為例,比較Heikin-Ashi與傳統蠟燭圖的差異。觀察圖表,您會發現Heikin-Ashi圖表更容易判讀。當綠色(看漲)蠟燭聚集在一起時,表明當前趨勢看漲;而紅色(看跌)蠟燭聚集則表示趨勢看跌。這就是平滑化的力量。
graph LR B[B] E[E] A[傳統蠟燭圖] --> B{價格波動} B --> C(市場噪音) D[Heikin-Ashi] --> E{平均價格} E --> F(平滑趨勢)
Heikin-Ashi的限制
儘管Heikin-Ashi優點眾多,但仍有一些限制:
- Heikin-Ashi的值並非真實價格,而是經過轉換後的結果。
- 在盤整市場中,Heikin-Ashi蠟燭會頻繁變色,難以提供明確的交易訊號。
- 顏色變化可能滯後,當偵測到趨勢反轉時,部分價格波動已經發生。
Heikin-Ashi的Python實作
以下Python程式碼展示如何計算Heikin-Ashi蠟燭圖:
import numpy as np
def heikin_ashi(data, open_column, high_column, low_column, close_column, position):
data = np.hstack((data, np.zeros((data.shape[0], 4)))) # 增加四個新欄位
# Heikin-Ashi 開盤價
for i in range(1, len(data)):
data[i, position] = (data[i - 1, open_column] + data[i - 1, close_column]) / 2
# Heikin-Ashi 最高價
for i in range(len(data)):
data[i, position + 1] = max(data[i, position], data[i, position + 3], data[i, high_column])
# Heikin-Ashi 最低價
for i in range(len(data)):
data[i, position + 2] = min(data[i, position], data[i, position + 3], data[i, low_column])
# Heikin-Ashi 收盤價
for i in range(len(data)):
data[i, position + 3] = (data[i, open_column] + data[i, high_column] + data[i, low_column] + data[i, close_column]) / 4
return data
# 範例用法 (假設data是一個NumPy array,包含OHLC資料)
data = np.random.rand(10, 4) # 產生隨機的OHLC資料,僅供示範
heikin_ashi_data = heikin_ashi(data, 0, 1, 2, 3, 4)
print(heikin_ashi_data)
內容解密:
這段程式碼定義了一個名為heikin_ashi
的函式,它接受一個包含OHLC資料的NumPy array,以及各個欄位的索引作為輸入。函式首先新增四個欄位來儲存計算後的Heikin-Ashi資料。然後,它使用迴圈計算每個時間點的Heikin-Ashi開盤價、最高價、最低價和收盤價,並將結果儲存在新增的欄位中。最後,函式傳回包含原始OHLC資料和Heikin-Ashi資料的新array。
結合Heikin-Ashi與其他技術指標
Heikin-Ashi可以與其他技術指標結合使用,例如Doji和Tasuki形態,以提高交易策略的多樣性和有效性。後續文章將探討如何結合這些技術,建構更穩健的交易系統。
利用Heikin-Ashi圖表辨識Doji和Tasuki形態
Doji形態代表市場猶豫不決,暗示潛在的趨勢反轉。Tasuki形態則是一種順勢形態,確認趨勢的持續。在Heikin-Ashi圖表上辨識這些形態,可以更有效地捕捉交易機會。以下圖表展示瞭如何在Heikin-Ashi圖表上辨識Doji和Tasuki形態,並且傳統蠟燭圖進行比較。
graph LR B[B] E[E] A[Heikin-Ashi圖表] --> B{平滑價格走勢} B --> C(更易辨識形態) D[傳統蠟燭圖] --> E{價格波動較大} E --> F(形態辨識較難)
程式碼實作:繪製雙圖表
以下Python程式碼示範如何繪製Heikin-Ashi和傳統蠟燭圖的雙圖表,並標記交易訊號:
import matplotlib.pyplot as plt
def candlestick_double_plot(data, buy_column, sell_column, window=250):
fig, ax = plt.subplots(2, figsize=(10, 5))
sample = data[-window:, ]
# ... (程式碼與前一段相同,省略) ...
內容解密:
這段程式碼定義了一個名為candlestick_double_plot
的函式,它接受包含OHLC資料、買入訊號欄位、賣出訊號欄位以及視窗大小作為輸入。函式使用Matplotlib繪製兩個子圖,分別顯示Heikin-Ashi和傳統蠟燭圖,並在圖表上標記買入和賣出訊號。
績效分析
透過回測分析,我們可以評估結合Heikin-Ashi與Doji、Tasuki形態的交易策略績效。以下表格總結了不同市場的績效指標:
市場 | 命中率 | 獲利因子 | 風險報酬比 | 訊號數量 |
---|---|---|---|---|
EURUSD | 49.67% | 1.07 | 1.08 | 2126 |
USDCHF | 47.30% | 1.07 | 1.19 | 2359 |
… | … | … | … | … |
Euphoria形態
Euphoria形態是一種反轉形態,它預示著市場可能從極度興奮轉為下跌。在Heikin-Ashi圖表上辨識Euphoria形態,可以幫助交易者及時獲利了結或建立空頭部位。
後續討論
在後續文章中,我們將更深入地探討如何結合Heikin-Ashi與其他技術指標,建構更精密的交易策略,並分享更多實戰技巧和經驗。
解讀 K 線圖的進階技巧:Heikin-Ashi 與 K 線系統
在金融市場中,K 線圖是技術分析的根本。然而,標準 K 線圖的波動性可能讓交易者難以辨識趨勢。本文將探討兩種進階 K 線圖系統:Heikin-Ashi 和 K 線系統,它們如何幫助交易者更清晰地解讀市場,並介紹如何在這些系統中應用經典的 K 線型態。
Heikin-Ashi 系統:平滑價格波動,洞察市場趨勢
Heikin-Ashi,日語意為「平均柱」,透過平均價格資料來平滑 K 線圖,減少市場噪音的幹擾。
Heikin-Ashi 計算公式:
- 開盤價 = (前一根 Heikin-Ashi K 線的開盤價 + 前一根 Heikin-Ashi K 線的收盤價) / 2
- 最高價 = 當前 K 線的最高價、開盤價和收盤價中的最大值
- 最低價 = 當前 K 線的最低價、開盤價和收盤價中的最小值
- 收盤價 = (當前 K 線的開盤價 + 最高價 + 最低價 + 收盤價) / 4
Heikin-Ashi 圖表應用:Euphoria 與 Double Trouble 型態
以下圖表說明如何在 Heikin-Ashi 圖表中識別 Euphoria 和 Double Trouble 型態。
graph LR A[Euphoria 型態] --> B(連續三根 bullish K 線,<br>每根實體皆大於前一根) C[Double Trouble 型態] --> D(第二根 bullish/bearish K 線的<br>實體大小至少是前一根 10 期 ATR 的兩倍)
內容解密: 上圖展示了 Euphoria 和 Double Trouble 型態的識別條件。Euphoria 型態由連續三根實體逐漸增大的 bullish K 線組成,暗示市場情緒高漲。Double Trouble 型態則關注 K 線實體大小相對於前一根 10 期 ATR 的比例,用以判斷趨勢的強弱。
Heikin-Ashi 系統的優缺點:
優點:
- 濾除市場噪音,更易於識別趨勢
- 更清晰地顯示支撐和阻力位
缺點:
- 滯後性,訊號出現較晚
- 不適用於短線交易
K 線系統:進一步平滑資料,深入理解趨勢
K 線系統透過計算 OHLC 資料的移動平均線來進一步平滑價格,預設回溯期為 3。
K 線系統計算公式:
- K 線開盤價 = (當前 K 線開盤價 + 前一根 K 線開盤價 + 前兩根 K 線開盤價) / 3
- K 線最高價 = (當前 K 線最高價 + 前一根 K 線最高價 + 前兩根 K 線最高價) / 3
- K 線最低價 = (當前 K 線最低價 + 前一根 K 線最低價 + 前兩根 K 線最低價) / 3
- K 線收盤價 = (當前 K 線收盤價 + 前一根 K 線收盤價 + 前兩根 K 線收盤價) / 3
K 線系統圖表應用:Doji 與 Tasuki 型態
以下圖表說明如何在 K 線系統圖表中識別 Doji 和 Tasuki 型態。
graph LR A[Doji 型態] --> B(開盤價與收盤價幾乎相同,<br>暗示市場猶豫不決) C[Tasuki 型態] --> D(與前一根 K 線方向相反的缺口,<br>與實體覆寫前一根 K 線的缺口)
內容解密: 上圖展示了 Doji 和 Tasuki 型態的識別條件。Doji 型態顯示開盤價和收盤價幾乎相同,暗示市場多空力量均衡,可能出現反轉。Tasuki 型態則由帶有缺口的 K 線組成,根據缺口和實體的相對位置判斷趨勢的延續或反轉。
K 線系統的優缺點:
優點:
- 比 Heikin-Ashi 更平滑,更易於識別長期趨勢
缺點:
- 滯後性更明顯
- 在盤整市場中,K 線顏色會頻繁交替,難以產生有效訊號
Heikin-Ashi 和 K 線系統都是強大的工具,可以幫助交易者更好地理解市場趨勢。透過結合這些系統與經典 K 線型態,交易者可以更有效地識別交易機會。然而,這些系統並非完美無缺,交易者應根據自身交易風格和市場情況選擇合適的工具和策略。
K線圖進階系統的出場策略:混合出場技巧的優勢
在交易中,出場策略與進場策略同樣重要。本章將探討如何結合多種出場技巧,開發更穩健的混合出場策略。
之前我們討論了對稱出場、固定持有期出場和變動持有期出場等技巧。現在,我們將這些技巧整合,形成混合出場策略,以最佳化交易績效。
混合出場技巧的規則
混合出場技巧採用「先到先得」的原則,整合了三種出場技巧的優點,並加入風險管理機制:
對稱目標與權重: 計算對稱目標價格,並賦予其特定權重。例如,設定目標價格權重為 0.5,表示目標價格影響出場決策的程度為 50%。
固定持有期限: 設定最長持有期限。即使價格未觸及目標價格或止損點,到達持有期限後也必須出場。
變動持有期與反轉形態: 持有倉位直至出現反轉形態。這表示市場趨勢可能發生變化,需要及時出場。
止損點設定: 設定止損點以控制風險。當價格觸及止損點時,必須無條件出場,以避免更大的損失。
混合出場技巧的優勢
混合出場技巧的優勢在於其靈活性與風險控制能力。它允許交易者根據市場情況調整策略,並在不同階段採用不同的出場方式。
兼顧目標與風險: 混合出場技巧同時考慮了目標價格和止損點,在追求利潤的同時,也設定了風險底線。
適應不同市場環境: 根據市場波動性和趨勢變化,交易者可以調整對稱目標權重、持有期限和反轉形態的選擇,使策略更具適應性。
提高交易效率: 先到先得的原則可以幫助交易者抓住最佳出場時機,避免錯失良機或延誤出場導致虧損。
程式碼範例與說明
以下 Python 程式碼片段展示了混合出場技巧的簡化實作:
def hybrid_exit(entry_price, key_candlestick_high, key_candlestick_low, stop_loss, holding_period, reversal_pattern_detected):
symmetrical_target = calculate_symmetrical_target(entry_price, key_candlestick_high, key_candlestick_low)
target_weight = 0.5
target_price = entry_price + (symmetrical_target - entry_price) * target_weight
current_time = get_current_time()
entry_time = get_entry_time()
time_elapsed = current_time - entry_time
if time_elapsed >= holding_period:
return "Exit by holding period"
elif reversal_pattern_detected:
return "Exit by reversal pattern"
elif get_current_price() >= target_price:
return "Exit by target price"
elif get_current_price() <= stop_loss:
return "Exit by stop loss"
else:
return "Hold"
# 內容解密:
# 這段程式碼定義了一個名為 hybrid_exit 的函式,它實作了混合出場策略。
# 函式接收進場價格、關鍵 K 線的高低點、止損點、持有期限和反轉形態檢測結果作為輸入。
# 函式首先計算對稱目標價格,然後根據權重計算目標價格。
# 接著,函式檢查是否達到持有期限、是否檢測到反轉形態、是否達到目標價格或止損點。
# 根據先到先得的原則,函式傳回相應的出場訊號或持有訊號。
Mermaid 圖表 - 混合出場策略流程
graph TD B[B] D[D] F[F] H[H] No[No] Yes[Yes] A[開始] --> B{達到持有期限?}; B -- Yes --> C[持有期出場]; B -- No --> D{檢測到反轉形態?}; D -- Yes --> E[反轉形態出場]; D -- No --> F{達到目標價格?}; F -- Yes --> G[目標價格出場]; F -- No --> H{達到止損點?}; H -- Yes --> I[止損出場]; H -- No --> J[繼續持有];
混合出場技巧提供了一個更全面的出場策略框架,它結合了多種技巧的優點,並加入風險管理機制。透過調整引數和規則,交易者可以根據不同的市場環境和交易風格最佳化出場策略,提高交易績效。
善用 RSI 過濾雙重麻煩形態,提升趨勢跟隨策略績效
在交易實務中,單純依靠 K 線形態進行交易,難以獲得穩定獲利。因此,我會將形態辨識融入更廣泛的交易框架中,例如結合技術指標進行過濾,提高交易勝率。本章將探討如何結合雙重麻煩形態與 RSI 指標,構建趨勢跟隨策略。請記住,每個市場都有其獨特性,策略引數需要根據實際情況調整。以下範例旨在闡述核心概念,而非提供固定引數。
雙重麻煩形態與 RSI 的結合
雙重麻煩形態是一種趨勢跟隨形態,它將波動性(透過 ATR 指標計算)納入考量。RSI 指標則將市場動能轉化為 0 到 100 之間的數值,用於判斷市場的超買超賣狀態。儘管 RSI 通常被視為逆勢指標,但我們可以巧妙地將其應用於趨勢跟隨策略中。
此策略使用 RSI 作為雙重麻煩形態的過濾器。當偵測到形態時,會利用 RSI 進行驗證,確認訊號的有效性。
我們可以將 RSI 視為動能指標。數值高於 50 代表看漲動能(上升趨勢),低於 50 則代表看跌動能(下降趨勢)。這就是將 RSI 用作趨勢跟隨指標的方法之一。
交易策略
該策略的交易條件如下:
- 當出現看漲雙重麻煩形態與 14 期 RSI 高於 50 時,產生買入訊號。
- 當出現看跌雙重麻煩形態與 14 期 RSI 低於 50 時,產生賣出訊號。
過濾條件是 RSI 相對於中性水平 50 的值。這有助於提高交易勝率,並利用「順勢而為」的原則。該策略的基本邏輯是在看漲階段只接受買入訊號,在看跌階段只接受賣出訊號。
程式碼實作
以下程式碼片段展示瞭如何編寫該策略的訊號函式:
def signal(data, open_column, high_column, low_column, close_column, atr_column, rsi_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 and \
data[i, rsi_column] > 50:
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 and \
data[i, rsi_column] < 50:
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
內容解密:
這段程式碼定義了一個名為 signal
的函式,用於根據 K 線資料、ATR 值和 RSI 值產生交易訊號。函式首先新增五個欄位到資料中,可能用於儲存訊號或其他指標。然後,它遍歷資料的每一列,檢查是否滿足特定條件。
看漲設定的條件是:
- 今日收盤價高於今日開盤價。
- 今日收盤價高於昨日收盤價。
- 昨日收盤價高於昨日開盤價。
- 今日振幅(最高價減最低價)大於昨日 ATR 的兩倍。
- 今日漲幅大於昨日漲幅。
- 沒有未平倉的買入部位 (
buy_column == 0
)。 - RSI 大於 50。
如果滿足所有這些條件,則在下一列的 buy_column
中設定值為 1,表示產生買入訊號。
看跌設定的條件與看漲設定類別似,只是方向相反。如果滿足所有看跌條件,則在下一列的 sell_column
中設定值為 -1,表示產生賣出訊號。
try...except
區塊用於處理可能發生的 IndexError
,例如在處理資料的開頭幾列時。
這個策略結合了價格形態和動能指標,力求在順應趨勢的前提下提高交易勝率。透過 RSI 過濾掉逆勢訊號,可以有效降低交易風險,提升策略的整體績效。
graph LR B[B] F[F] No[No] Yes[Yes] A[雙重麻煩形態] --> B{RSI > 50?}; B -- Yes --> C[買入訊號]; B -- No --> D[無訊號]; E[雙重麻煩形態] --> F{RSI < 50?}; F -- Yes --> G[賣出訊號]; F -- No --> H[無訊號];
圖表說明: 此流程圖展示瞭如何利用 RSI 指標過濾雙重麻煩形態訊號,產生買入或賣出訊號的決策過程。
善用隨機震盪指標強化瓶形價格形態交易策略
在技術分析領域中,隨機震盪指標(Stochastic Oscillator)和相對強弱指標(RSI)都是常用的動量指標,廣受散戶和專業交易者青睞。隨機震盪指標採用正規化函式,將數值限制在 0 到 100 之間,計算方法比 RSI 更為簡潔。在探討隨機震盪指標之前,讓我們先了解正規化的概念。
當我們面對一系列無邊界的數值(例如市場價格或其他時間序列資料)時,可以將這些數值正規化到 0 到 1 之間。在特定時間範圍內,0 代表最低值,1 代表最高值。以下表格說明瞭這個概念:
時間步驟 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
數值 | 10 | 40 | 5 | 90 | 25 |
正規化數值 | 0.06 | 0.41 | 0.00 | 1.00 | 0.24 |
從表格中可以看出,當變數從時間週期 1 移動到 5 時,正規化數值介於 0 到 1 之間。0 對應最低值(5),1 對應最高值(90)。數值 40 的正規化值約為 0.41,表示它接近中間值,因為 40 大約是 5 到 90 之間距離的一半。
以下公式展示瞭如何在特定時間範圍內將任何數值正規化到 0 到 1 之間:
正規化值 = (原始值 - 最低值) / (最高值 - 最低值)
以表格中的數值 10 為例,套用公式計算正規化值:
正規化值 = (10 - 5) / (90 - 5) = 0.06
隨機震盪指標以改良的方式正規化市場價格,將最高價和最低價納入公式:
隨機震盪值(i) = (收盤價(i) - 最低價(i-n:i)) / (最高價(i-n:i) - 最低價(i-n:i))
公式表示,當前隨機震盪值等於當前收盤價減去特定回溯期內的最低價,再除以相同回溯期內最高價與最低價的差值。
簡單正規化函式和隨機震盪指標函式的區別在於後者加入了最高價和最低價。隨機震盪指標可以視為前述公式的平滑版本,通常會繪製一條根據其數值的短期移動平均線,稱為訊號線。建立預設隨機震盪指標的步驟如下:
- 使用隨機震盪指標函式,以 14 個週期作為滾動視窗,正規化數值。
- 使用三週期移動平均線平滑步驟 1 的結果,得到隨機震盪指標。
- 計算訊號線,即另一個三週期移動平均線。
graph LR B[B] D[D] F[F] A[收盤價] --> B{正規化} B --> C[隨機震盪值] C --> D{三週期移動平均} D --> E[隨機震盪指標] E --> F{三週期移動平均} F --> G[訊號線]
內容解密:此流程圖展示了計算隨機震盪指標和訊號線的步驟。首先,將收盤價正規化,然後計算隨機震盪值。接著,使用三週期移動平均線平滑隨機震盪值,得到隨機震盪指標。最後,再次使用三週期移動平均線計算訊號線。
結合瓶形價格形態和隨機震盪指標,可以提升交易策略的有效性。當瓶形形態出現,與隨機震盪指標發出超買或超賣訊號時,可以提高交易的勝率。然而,需要注意的是,隨機震盪指標並非萬能的預測工具,它仍然是滯後指標,僅能反映過去的價格走勢。
在實際應用中,可以根據個人交易風格和市場特性調整策略引數。例如,可以調整隨機震盪指標的回溯期或平滑週期,或者結合其他技術指標進行確認。透過不斷最佳化和調整,可以找到最適合自己的交易策略。
強化酒瓶型態交易策略:結合隨機震盪指標
在交易策略中,隨機震盪指標的平滑移動平均線被稱為「平滑線」,而訊號線則被稱為「慢速線」。類別似於相對強弱指標(RSI),隨機震盪指標的數值介於 0 到 100 之間,低於 20 為超賣區,高於 80 為超買區。由於其計算公式的特性,它比 RSI 更為波動,與數值變化更快。
隨機震盪指標的應用技巧眾多,本文將著重於其與訊號線的交叉,稱為「交叉技巧」。雖然交叉技巧常應用於逆勢策略,但結合趨勢跟蹤的K線型態,它也能成為順勢策略的利器。
需要注意的是,由於正規化函式的特性,隨機震盪指標有時會長時間停留在極端值,產生錯誤訊號。這種「黏滯效應」表現為震盪指標長時間停留在超買或超賣區。
以下程式碼片段展示瞭如何計算隨機震盪指標:
import numpy as np
import pandas as pd
def add_column(data, times):
for i in range(1, times + 1):
data = np.append(data, np.zeros((len(data), 1)), axis=1)
return data
def delete_row(data, number):
data = data[number:, ]
return data
def ma(data, lookback, close, position):
data = add_column(data, 1)
for i in range(len(data)):
try:
data[i, position] = (data[i - lookback + 1:i + 1, close].mean())
except IndexError:
pass
return data
def stochastic_oscillator(data, lookback, high, low, close, position, slowing=False, smoothing=False, slowing_period=1, smoothing_period=1):
data = add_column(data, 1)
for i in range(len(data)):
try:
data[i, position] = (data[i, close] - np.min(data[i - lookback + 1:i + 1, low])) / (np.max(data[i - lookback + 1:i + 1, high]) - np.min(data[i - lookback + 1:i + 1, low]))
except ValueError:
pass
data[:, position] = data[:, position] * 100
if slowing and not smoothing:
data = ma(data, slowing_period, position, position + 1)
if smoothing and not slowing:
data = ma(data, smoothing_period, position, position + 1)
if smoothing and slowing:
data = ma(data, slowing_period, position, position + 1)
data = ma(data, smoothing_period, position + 1, position + 2)
data = delete_row(data, lookback)
return data
內容解密:
這段程式碼定義了一個名為 stochastic_oscillator
的函式,用於計算隨機震盪指標。它接受資料、回溯期、最高價、最低價、收盤價、指標儲存位置等引數。函式內部首先增加一個新的欄位來儲存計算結果。然後,它遍歷資料,計算每個時間點的隨機震盪指標值。需要注意的是,這裡使用了 try-except
結構來處理可能出現的 ValueError
異常,例如在回溯期不足時。最後,根據 slowing
和 smoothing
引數決定是否計算平滑和慢速移動平均線。函式傳回增加了隨機震盪指標的資料。
該策略的交易條件如下:
- 當出現看漲酒瓶型態與隨機震盪指標高於其訊號線時,產生買入訊號。
- 當出現看跌酒瓶型態與隨機震盪指標低於其訊號線時,產生賣出訊號。
以下程式碼片段展示瞭如何編寫策略的訊號函式:
def signal(data, open_column, high_column, low_column, close_column, stochastic_column, signal_column, buy_column, sell_column):
data = add_column(data, 5)
for i in range(len(data)):
try:
# Bullish setup
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, stochastic_column] > data[i, signal_column] and \
data[i, buy_column] == 0:
data[i + 1, buy_column] = 1
# Bearish setup
elif data[i, close_column] < data[i, open_column] and \
data[i, open_column] == data[i, high_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, stochastic_column] < data[i, signal_column] and \
data[i, sell_column] == 0:
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
內容解密:
這段程式碼定義了一個名為 signal
的函式,用於產生交易訊號。它接受資料、開盤價、最高價、最低價、收盤價、隨機震盪指標值、訊號線值、買入訊號欄位和賣出訊號欄位等引數。函式內部首先增加五個新的欄位。然後,它遍歷資料,根據酒瓶型態和隨機震盪指標的交叉情況產生買入或賣出訊號。
下圖展示了 USDCHF 的訊號圖。
graph LR B[B] D[D] No[No] Yes[Yes] A[酒瓶型態] --> B{隨機震盪指標 > 訊號線?}; B -- Yes --> C[買入訊號]; B -- No --> D{隨機震盪指標 < 訊號線?}; D -- Yes --> E[賣出訊號]; D -- No --> F[無訊號];
結合酒瓶型態和隨機震盪指標,可以更有效地捕捉市場趨勢,提高交易勝率。
結合丸坊線型態與 K 線波動區間
丸坊線型態被認為是最強烈的 K 線型態之一,因為它沒有影線,意味著市場毫不猶豫地從一點直線執行到另一點。本策略將結合丸坊線型態與一種稱為「波動區間」的概念,它是一種動態的支撐位和阻力位框架技術。
波動區間型別眾多,最著名的是布林通道。不同型別的波動區間的可靠性取決於標的市場及其引數。在理解 K 線波動區間之前,我們先來瞭解布林通道的基礎知識。布林通道由 John Bollinger 開發,其本質更偏向統計而非技術分析。
為了更好地理解布林通道,我們需要先了解標準差的概念。標準差是描述資料分散程度的指標,它衡量資料點與平均值的距離。布林通道正是根據移動平均線和標準差計算得出的。
K 線波動區間的計算方法如下:
- 計算過去 20 個週期的最高價和最低價的平均值。
- 計算過去 20 個週期的最高標準差。
- 上波動區間為第一步的結果加上第二步的結果乘以 2。
- 下波動區間為第一步的結果減去第二步的結果乘以 2。
將丸坊線型態與 K 線波動區間結合,可以更有效地判斷市場的超買和超賣狀態,從而制定更精確的交易策略。
import numpy as np
import pandas as pd
# 輔助函式:新增資料欄位
def add_column(data, num_cols):
df = pd.DataFrame(data)
for i in range(num_cols):
df[len(df.columns)] = 0
return df.values
# 輔助函式:刪除資料列
def delete_row(data, num_rows):
df = pd.DataFrame(data)
df = df.iloc[num_rows:]
return df.values
# 輔助函式:刪除資料欄位
def delete_column(data, start_col, num_cols):
df = pd.DataFrame(data)
df = df.drop(df.columns[start_col:start_col + num_cols], axis=1)
return df.values
# 計算移動平均
def ma(data, lookback, close_column, position):
data = add_column(data, 1)
df = pd.DataFrame(data)
df[position] = df[close_column].rolling(window=lookback, min_periods=1).mean()
return df.values
# 計算標準差
def volatility(data, lookback, close, position):
data = add_column(data, 1)
df = pd.DataFrame(data)
df[position] = df[close].rolling(window=lookback, min_periods=1).std()
return df.values.astype(np.float64) # 修正資料型別
# 計算 K 線波動帶
def k_volatility_band(data, lookback, multiplier, high, low, close, position):
data = add_column(data, 4)
df = pd.DataFrame(data)
# 計算中線
df[position] = df[high].rolling(window=lookback, min_periods=1).max()
df[position + 1] = df[low].rolling(window=lookback, min_periods=1).min()
df[position + 2] = (df[position] + df[position + 1]) / 2
df = df.drop(columns=[position, position + 1])
# 計算最大波動率
df[position + 1] = df[close].rolling(window=lookback, min_periods=1).std()
df[position + 2] = df[position + 1].rolling(window=lookback, min_periods=1).max()
df = df.drop(columns=[position + 1])
# 計算波動帶
df[position + 2] = df[position] + (multiplier * df[position + 1])
df[position + 3] = df[position] - (multiplier * df[position + 1])
df = df.drop(columns=[position + 1])
return df.values
# 產生交易訊號
def signal(data, open_column, high_column, low_column, close_column, middle_band, buy_column, sell_column):
data = add_column(data, 2)
df = pd.DataFrame(data)
for i in range(len(df) - 1): # 修正索引錯誤
# 多頭訊號
if (
df.iloc[i, close_column] > df.iloc[i, open_column]
and df.iloc[i, high_column] == df.iloc[i, close_column]
and df.iloc[i, low_column] == df.iloc[i, open_column]
and df.iloc[i, close_column] < df.iloc[i, middle_band]
and df.iloc[i, buy_column] == 0
):
df.iloc[i + 1, buy_column] = 1
# 空頭訊號
elif (
df.iloc[i, close_column] < df.iloc[i, open_column]
and df.iloc[i, high_column] == df.iloc[i, open_column]
and df.iloc[i, low_column] == df.iloc[i, close_column]
and df.iloc[i, close_column] > df.iloc[i, middle_band]
and df.iloc[i, sell_column] == 0
):
df.iloc[i + 1, sell_column] = -1
return df.values
# 趨勢強度指標
def trend_intensity_indicator(data, lookback, close_column, position):
data = add_column(data, 3)
df = pd.DataFrame(data)
# 計算移動平均
df[position] = df[close_column].rolling(window=lookback, min_periods=1).mean()
# 計算價格與移動平均的偏差
df[position + 1] = np.where(df[close_column] > df[position], df[close_column] - df[position], 0)
df[position + 2] = np.where(df[close_column] < df[position], df[position] - df[close_column], 0)
# 計算趨勢強度指標
df[position + 3] = (
df[position + 1].rolling(window=lookback, min_periods=1).apply(np.count_nonzero)
/ (
df[position + 1].rolling(window=lookback, min_periods=1).apply(np.count_nonzero)
+ df[position + 2].rolling(window=lookback, min_periods=1).apply(np.count_nonzero)
)
* 100
)
df = df.drop(columns=[position, position+1, position + 2])
return df.values
內容解密:
這段程式碼定義了幾個重要的技術指標和交易訊號產生函式。k_volatility_band
函式計算 K 線波動帶,它根據最高價、最低價和收盤價的移動平均和標準差,並使用一個乘數來調整波動帶的寬度。signal
函式根據 Marubozu candlestick 模式和市場價格相對於 K 線波動帶中線的位置產生交易訊號。trend_intensity_indicator
函式計算趨勢強度指標 (TII),它根據價格與移動平均線的偏差來衡量趨勢的強度。這些函式都使用了輔助函式 add_column
和 delete_column
來新增和刪除資料欄位,以及 volatility
函式來計算標準差。程式碼中使用 pandas DataFrame 進行資料處理,並使用 numpy 進行數值計算。
graph LR B[B] C[C] D[D] A[輸入市場資料] --> B{計算 K 線波動帶}; B --> C{產生交易訊號}; A --> D{計算趨勢強度指標}; D --> C; C --> E[輸出交易訊號];
內容解密:
這張流程圖展示了使用 K 線波動帶和趨勢強度指標產生交易訊號的過程。首先,輸入市場資料,然後分別計算 K 線波動帶和趨勢強度指標。接著,根據這兩個指標產生交易訊號,最後輸出交易訊號。
classDiagram class MarketData{ -open -high -low -close } class KVolatilityBand{ -lookback -multiplier -upper_band -middle_band -lower_band } class TrendIntensityIndicator{ -lookback -tii } class TradingSignal{ -buy -sell } MarketData -- KVolatilityBand : 輸入 MarketData -- TrendIntensityIndicator : 輸入 KVolatilityBand -- TradingSignal : 產生 TrendIntensityIndicator -- TradingSignal : 產生
內容解密:
這張類別圖展示了程式碼中使用的主要類別及其關係。MarketData
類別儲存市場資料,包括開盤價、最高價、最低價和收盤價。KVolatilityBand
類別儲存 K 線波動帶的引數和計算結果。TrendIntensityIndicator
類別儲存趨勢強度指標的引數和計算結果。TradingSignal
類別儲存產生的交易訊號。市場資料作為輸入用於計算 K 線波動帶和趨勢強度指標,然後這兩個指標用於產生交易訊號。
在交易的世界裡,K線型態本身難以提供穩定的獲利,必須與更複雜的技術指標結合,才能將簡單的觀察轉化為可執行的交易策略。本文將探討如何結合K線型態和技術指標,建構更精準的反轉交易策略。