iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
AI & Data

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

Day25 建立一個交易系統

  • 分享至 

  • xImage
  •  

交易策略總覽

  • 多頭連續型:飆股操作法(做多)
  • 空頭連續型:飆股操作法(做空)
  • 空頭反轉型底部反轉、年線反轉
  • 多頭反轉型:頭部反轉、年線反轉
  • 盤整不明型:盤整操做法

今天只會談到「空頭反轉型:底部反轉」,並做為Day5~Day24課題的整合。

空頭反轉型:底部反轉的定義以及判斷

原本是空頭走勢,下跌幅度愈大愈好。空頭反轉,依照道氏理論,當原本是空頭時,後來出現低點一波比一波高,高點也一波比一波高的循環,初步判斷由空翻多。其中緩跌型(緩跌緩漲)比急跌型(急跌急漲)好操作,原因在於緩跌緩漲較好找買賣點。時機則為長線走空,短中期剛剛走多的時候。

多空反轉股操作的工具

  • 主要工具:週KD、20日線、底部型態
  • 輔助工具:籌碼面(籌碼分析)、乖離率
  • 最大的優點:基期低相對風險小,且可以有效估算明確的目標價

如何判斷由空轉多

  • 原本下跌幅度至少30%以上,下跌愈深愈好
  • 技術面(技術分析)
    • 明確底部型態
    • 股價站上20日移動平均線,且20日移動平均線上揚
    • 周KD黃金交叉
  • 籌碼面(籌碼分析)
    • 法人買
    • 散戶賣
    • 籌碼集中

因為參賽主題是「技術分析」,因此接下來的程式實作部份只會包含「多空反轉股操作的工具」中的【主要工具】以及「如何判斷由空轉多」中的【技術面(技術分析)】。

程式實作:空頭反轉型底部反轉交易系統

接下來會用Day1「主觀性質客觀化」的方式一來展示空頭反轉型:底部反轉之交易系統。
首先第一個發生的是周KD黃金交叉,看盤軟體需要切換資料頻率至周線圖並匯出至Excel檔;然後用人工方式標註黃金交叉點。程式碼如下所示:

# 人工方式標示黃金交叉的點
# 黃金交叉點既買點
golden_points_len = len(np.array(df_stoch['D(9,3)']))
golden_points = np.array([np.nan]*golden_points_len)
idx = date_to_index(df_stoch,'2023-05-22')
golden_points[idx] = df_stoch.iloc[idx]['D(9,3)']

程式執行結果如下:
Imgur
由於後續都會在日K線圖上操作,因此要將周K線圖上的標註移至日K線圖。程式碼如下所示:

# 人工方式標示週KD黃金交叉的點
golden_points_len = len(np.array(df_k_line['Close']))
golden_points = np.array([np.nan]*golden_points_len)
idx = date_to_index(df_k_line,'2023-05-26')
golden_points[idx] = df_k_line.iloc[idx]['Close']

接下來進行站上20日移動平均線,且20日移動平均線上揚的人工標註。程式碼如下所示:

# 人工方式標示站上20日線且20日線上揚之買點
ma20buy_points_len = len(np.array(df_k_line['Close']))
ma20buy_points = np.array([np.nan]*ma20buy_points_len)
idx = date_to_index(df_k_line,'2023-05-31')
ma20buy_points[idx] = df_k_line.iloc[idx]['Close']

最後標註型態,首先人工方式標示頸線:

# 人工方式標示W底頸線
neckline_price = df_k_line.loc['2023-03-08']['Close']
neckline_start_date = '2022-09-20'
neckline_end_date = '2023-07-21'

接著以人工方式標註突破點:

# 人工方式標示突破點
breaking_points_len = len(np.array(df_k_line['Close']))
breaking_points = np.array([np.nan]*breaking_points_len)
idx = date_to_index(df_k_line,'2023-07-17')
breaking_points[idx] = neckline_price

最後把這三個標註的點畫出來,程式碼如下所示:

# 設定K線格式
mc = mpf.make_marketcolors(up='xkcd:light red', down='xkcd:almost black', inherit=True)
s  = mpf.make_mpf_style(base_mpf_style='yahoo', marketcolors=mc)

# 設定與頸線
seq_of_seq_of_points=[
    [(neckline_start_date,neckline_price),(neckline_end_date,neckline_price)],
                     ]

# 設定買點與移動平均線
added_plots={
    "GOLDEN" : mpf.make_addplot(golden_points,type='scatter',marker='o',markersize=50,color='xkcd:baby blue'),
    "MA20BUY" : mpf.make_addplot(ma20buy_points,type='scatter',marker='o',markersize=50,color='xkcd:aquamarine'),
    "BREAK" : mpf.make_addplot(breaking_points,type='scatter',marker='o',markersize=50,color='xkcd:hot pink'), 
    "SMA5": mpf.make_addplot(df_sma['SMA5'],width=0.4,color='xkcd:maroon'),
    "SMA20": mpf.make_addplot(df_sma['SMA20'],width=0.4,color='xkcd:violet'),
    "SMA240": mpf.make_addplot(df_sma['SMA240'],width=0.4,color='xkcd:sky blue')
            }

# 繪出K線圖
kwargs = dict(type='candle', style=s, figratio=(19,10), addplot=list(added_plots.values()), alines=dict(alines=seq_of_seq_of_points, linewidths=1.5, colors='xkcd:orange yellow', alpha=0.6),datetime_format='%Y-%m-%d')
mpf.plot(df_k_line,**kwargs)

程式執行結果如下:
Imgur
完整的程式碼請參照「第二十五天:建立一個交易系統.ipynb」。
至此Day3的所有課題都以說明完畢。接下來的參賽期間(Day26~Day29),則會將重點放在用深度學習技術進行型態識別的討論。並於最後一天(Day30)進行本次參賽的總結與補充先前未及提到部份。


上一篇
Day24 目標價估算
下一篇
Day26 使用深度學習方式進行技術型態識別
系列文
用Python程式進行股票技術分析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言