股市的進出場時機掌握,是交易中最重要的一環,藉由程式理性分析,協助投資者在主觀分析市場態勢的同時,有著穩健的策略參考,避免受到盈虧的壓力影響,錯失最佳的交易時機。本章節將利用之前提過的指標,進行策略的規劃與繪圖,應特別注意的是,每檔股票的特性不同,相關的時間週期長短需適時的做調整。
本章節的Google Colab筆記本連結:
https://colab.research.google.com/drive/1KPWcILinj5EfvWShM0--h7ZdQPqbUqpx?usp=sharing
前情提要【EP.1 部署股票搜尋器,獲取上市櫃股票資訊】
前情提要【EP.2 股市資料視覺化---K線重疊指標】 自訂的函式與類別在這章節!
前情提要【EP.3 股市資料視覺化---價格計算指標】
前情提要【EP.4 股市資料視覺化---股市量能指標】
前情提要【EP.5 股市資料視覺化---股價動量指標】
在原先的Chart()
類別中新增一個方法Marker()
,專門用來繪製線圖上的標記,並定義顏色color
與標記大小markersize
,讓使用者可以在呼叫函式方法的時候,自行設定標記的外觀,以方便觀察。
def Marker(self,data,panel,type='scatter',marker='.',color='',markersize=''):
ax = mpf.make_addplot(data, panel=panel, type=type, marker=marker,
color=color,markersize = markersize)
self.axlist.append(ax)
移動平均線的交叉訊號,常被用於追蹤長期趨勢的反轉,其中,5日均線代表著短線行情,20日均線則代表月線,由於一個月內的交易天數大約為20天,因此20日均線常被視為股價支撐與壓力的分界指標。本段程式結合5日均線與20日均線的特性,繪製線圖與制定策略,提供使用者分析進出場時機,signal_long = []
為買進信號發生的時機點,signal_short = []
為賣出信號發生的時機點,用於繪製線圖上的標記,並以Signal = []
紀錄買賣信號,1代表買入,-1代表賣出。
我們透過第i日與第i-1日進行比較,ma_5[i] >= ma_20[i] and ma_5[i-1] < ma_20[i-1]
代表5日均線在第i日觸碰或向上穿越20日均線,對後續走勢看漲,因此為買入信號;同理,ma_5[i] <= ma_20[i] and ma_5[i-1] > ma_20[i-1]
代表5日均線在第i日觸碰或向下跌破20日均線,對後續走勢看跌,因此為賣出信號。
ma_5=SMA(data,timeperiod = 5)
ma_20=SMA(data,timeperiod = 20)
Signal = []
signal_long = []
signal_short = []
for i in range(len(ma_20)):
if ma_5[i] >= ma_20[i] and ma_5[i-1] < ma_20[i-1] :
Signal.append(1)
signal_long.append(ma_5[i])
signal_short.append(np.nan)
elif ma_5[i] <= ma_20[i] and ma_5[i-1] > ma_20[i-1] :
Signal.append(-1)
signal_short.append(ma_20[i])
signal_long.append(np.nan)
else:
Signal.append(np.nan)
signal_short.append(np.nan)
signal_long.append(np.nan)
data["MA signal"] = Signal
接著將線圖繪製出來,檢查我們使用的MA快慢線交叉策略是否符合台積電的走勢,首先透過fin_chart.TA
繪製5日與20日均線,並利用fin_chart.Marker
加上買賣信號方便判讀,marker='^',color="orange"
代表橘色的正三角形,marker='v',color="blue"
代表藍色的倒三角形。
fin_chart = chart(data)
fin_chart.TA(ma_5,panel=0,type="line",color="black")
fin_chart.TA(ma_20,panel=0,type="line",color="blue")
fin_chart.Marker(signal_long,panel=0,type="scatter",marker='^',color="orange",markersize=100)
fin_chart.Marker(signal_short,panel=0,type="scatter",marker='v',color="blue",markersize=100)
fin_chart.Show()
藉由上圖可觀察到,信號出現後,股價會出現上漲或下跌的趨勢,可輔助判斷進場時機,但與相異信號區間內的最高價格或最低價格相比,有延遲的現象,因此須搭配投資人的經驗操作或其他策略,來增加投資獲利。