前幾篇談到了價量和指標,這篇來談談型態學
股票中的型態理論是一種用於技術分析的方法,它基於市場價格的圖形和模式來預測股票價格的未來走勢。型態理論假設市場參與者的行為在股票價格的圖表中留下痕跡,並且這些痕跡可以用來預測未來價格的走勢。以下是型態理論的一些關鍵概念和常見圖案:
其實型態是很主觀的,要怎麼客觀地去產生型態識別是很有挑戰性的
頭肩頂和頭肩底 (Head and Shoulders):
頭肩頂:包括一個高峰(頭部)之間的兩個低谷(肩部)。通常預示著價格可能下跌。
頭肩底:包括一個低谷(頭部)之間的兩個高峰(肩部)。通常預示著價格可能上漲。
# 設定檢測頭肩底的參數
left_shoulder_depth = 20 # 左肩部最低價格的前期數據窗口大小
right_shoulder_depth = 20 # 右肩部最低價格的後期數據窗口大小
# 檢測頭肩底型態
def detect_head_and_shoulders(data):
for i in range(1, len(data) - 1):
if (
data['Low'][i] < data['Low'][i - left_shoulder_depth]
and data['Low'][i] < data['Low'][i + right_shoulder_depth]
and data['High'][i] > data['High'][i - left_shoulder_depth:i + right_shoulder_depth].max()
):
return i # 返回頭肩底型態的右肩部位置
return None # 沒有檢測到頭肩底型態
# 檢測頭肩底型態
shoulder_position = detect_head_and_shoulders(data)
雙頂和雙底 (Double Top and Double Bottom):
雙頂:包括兩個相似的價格高點,中間有一個較低的低谷。預示著價格可能下跌。
雙底:包括兩個相似的價格低點,中間有一個較高的高峰。預示著價格可能上漲。
# 設定檢測W底的參數
lookback_window = 20 # 查找W底的回顧窗口大小
depth_threshold = 0.03 # W底的深度閾值(價格變化百分比)
# 函數:檢測W底型態
def detect_w_bottom(data, lookback_window, depth_threshold):
for i in range(lookback_window, len(data) - lookback_window):
left_low = data['Low'][i - lookback_window:i].min()
middle_low = data['Low'][i - lookback_window // 2:i + lookback_window // 2].min()
right_low = data['Low'][i:i + lookback_window].min()
# 檢測W底的深度是否滿足閾值
if (
middle_low < left_low * (1 - depth_threshold)
and middle_low < right_low * (1 - depth_threshold)
and data['Low'][i] == middle_low
):
return i # 返回W底的底部位置
return None # 沒有檢測到W底
# 檢測W底型態
w_bottom_position = detect_w_bottom(data, lookback_window, depth_threshold)
三重頂和三重底 (Triple Top and Triple Bottom):
三重頂:包括三個相似的價格高點,中間有兩個較低的低谷。預示著價格可能下跌。
三重底:包括三個相似的價格低點,中間有兩個較高的高峰。預示著價格可能上漲。
上升三角形和下降三角形 (Ascending Triangle and Descending Triangle):
上升三角形:由一條水平的上界和一個上升的支撐線組成。預示著價格可能突破上界上漲。
下降三角形:由一條水平的下界和一個下降的壓力線組成。預示著價格可能突破下界下跌。
# 設定檢測上升三角旗的參數
window_size = 40 # 查找上升三角旗的窗口大小
# 函數:檢測上升三角旗型態
def detect_ascending_triangle_flag(data, window_size):
for i in range(window_size, len(data) - window_size):
upper_bound = data['High'][i - window_size:i].max()
lower_bound = data['Low'][i - window_size:i].min()
current_high = data['High'][i]
# 檢測是否有相對水平的上界和下界,並且目前的高點在上界附近
if (
abs(upper_bound - lower_bound) < 0.03 * upper_bound # 上下界相對水平
and current_high > (upper_bound - 0.2 * (upper_bound - lower_bound)) # 目前的高點在上界附近
):
return i # 返回上升三角旗的位置
return None # 沒有檢測到上升三角旗
# 檢測上升三角旗型態
ascending_triangle_flag_position = detect_ascending_triangle_flag(data, window_size)