從今天開始連續三天會說明技術分析中最主觀也最主要的三個觀念: 趨勢、位階、型態。今天會先說明技術分析的基礎「道氏理論」;明天Day18說明與程式實作「由空翻多」過程,後天Day19則是說明與程式實作「由多翻空」過程。
股價的走勢千變萬化,但總結到底只有三種:上漲(多頭)、下跌(空頭)、盤整(也就是說不是多頭或空頭,就是盤整):
而所有技術分析理論的根本在於:趨勢不容易形成,但是一旦形成,不容易改變。
轉折點位於波段的峰位(peak)或谷底(trough)。在Day9的內容有提到,我們可以用客觀的方式以「區域最大」做為峰位,以「區域最小」做為谷底。在一個區間內峰位越走越高,谷底也越走越高則視為多頭。在一個區間內峰位越走越低,谷底也越走越低則視為空頭。在一個區間內不為多頭或空頭就視為盤整。那要如何判斷是越走越高還是越走越低呢?最簡單的方式就是判斷兩個轉折高點或轉折低點連成一直線後的斜率,正斜率為越走越高,負斜率為越走越低,零斜率為走平。把上述內容轉換為程式碼:
# 道氏理論:判斷股票走勢
def dow_theory(high_low_points) :
high_point = None
low_point = None
check_results = []
for idx in range(0,len(high_low_points)) :
point = high_low_points.iloc[idx]
if point['Type'] == 'HI' :
if high_point is not None :
x = [high_point.name,point.name]
y = [high_point['Price'],point['Price']]
slope,intercept = np.polyfit(x,y,1)
#print('高點對高點,斜率 = {}'.format(slope))
if slope > 0 :
check_results.append(1)
elif slope < 0 :
check_results.append(-1)
else :
check_results.append(0)
high_point = point
elif point['Type'] == 'LO' :
if low_point is not None :
x = [low_point.name,point.name]
y = [low_point['Price'],point['Price']]
slope,intercept = np.polyfit(x,y,1)
#print('低點對低點,斜率 = {}'.format(slope))
if slope > 0 :
check_results.append(1)
elif slope < 0 :
check_results.append(-1)
else :
check_results.append(0)
low_point = point
identical = (len(set(check_results)) == 1)
#print('確認結果={},結果是否一致={}'.format(check_results,identical))
if identical is True:
if check_results[0] == 1 :
return('上漲')
elif check_results[0] == -1 :
return('下跌')
return('盤整')
多頭(高點一波比一波高、低點一波比一波高)案例於下:
空頭(高點一波比一波低、低點一波比一波低)案例於下:
盤整案例於下:
完整的程式碼請參照「第十七天:趨勢、位階、型態(1).ipynb」。