iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
AI & Data

用Python程式進行股票技術分析系列 第 17

Day17 趨勢、位階、型態(1)

  • 分享至 

  • xImage
  •  

從今天開始連續三天會說明技術分析中最主觀也最主要的三個觀念: 趨勢、位階、型態。今天會先說明技術分析的基礎「道氏理論」;明天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('盤整') 

多頭(高點一波比一波高、低點一波比一波高)案例於下:
Imgur
空頭(高點一波比一波低、低點一波比一波低)案例於下:
Imgur
盤整案例於下:
Imgur
完整的程式碼請參照「第十七天:趨勢、位階、型態(1).ipynb」。


上一篇
Day16 MACD指標
下一篇
Day18 趨勢、位階、型態(2)
系列文
用Python程式進行股票技術分析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言