iT邦幫忙

0

量化交易 X 跨界金融 | EP.6 股市進出場策略制定

  • 分享至 

  • xImage
  •  

前言


股市的進出場時機掌握,是交易中最重要的一環,藉由程式理性分析,協助投資者在主觀分析市場態勢的同時,有著穩健的策略參考,避免受到盈虧的壓力影響,錯失最佳的交易時機。本章節將利用之前提過的指標,進行策略的規劃與繪圖,應特別注意的是,每檔股票的特性不同,相關的時間週期長短需適時的做調整。

本章節的Google Colab筆記本連結:
https://colab.research.google.com/drive/1KPWcILinj5EfvWShM0--h7ZdQPqbUqpx?usp=sharing

前情提要【EP.1 部署股票搜尋器,獲取上市櫃股票資訊
前情提要【EP.2 股市資料視覺化---K線重疊指標 自訂的函式與類別在這章節!
前情提要【EP.3 股市資料視覺化---價格計算指標
前情提要【EP.4 股市資料視覺化---股市量能指標
前情提要【EP.5 股市資料視覺化---股價動量指標

EP.6 股市進出場策略制定


在原先的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)
以MA快慢線交叉策略為例

移動平均線的交叉訊號,常被用於追蹤長期趨勢的反轉,其中,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()

https://ithelp.ithome.com.tw/upload/images/20230626/20156740LK13CKOMXe.png

藉由上圖可觀察到,信號出現後,股價會出現上漲或下跌的趨勢,可輔助判斷進場時機,但與相異信號區間內的最高價格或最低價格相比,有延遲的現象,因此須搭配投資人的經驗操作或其他策略,來增加投資獲利。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言