量化交易30天
本系列文章是紀錄一位量化交易新手的學習過程,除了基礎的Python語法不說明,其他金融相關的東西都會一步步地說明,希望讓更多想學習量化交易但是沒有學過相關金融知識的朋友們,透過這系列的文章,能夠對量化交易略知一二,也歡迎量化交易的高手們多多交流。
K線圖的其中一個用途,就是可以利用過去的K線走勢,去推測未來可能的走勢為何,而K線型態,是指過去幾根K線的長相(一般來說可能是2~5根不等),透過某些特定的長相,可以幫助我們推測未來的走勢。
由於K線型態有非常多種,這邊先介紹兩個最基本的,都是由3根連續K棒組成,如下圖
Morning star的意義,在第1根大黑K之後,接第2根漲跌幅度較小的K棒,代表跌幅收斂,緊接著第3根大紅K,表示趨勢由下跌反轉為上漲行情。
Evening star的意義,在第1根大紅K之後,接第2根漲跌幅度較小的K棒,代表漲幅收斂,緊接著第3根大黑K,表示趨勢由上漲反轉為下跌行情。
這邊就來實作一下如何用Python在一片Dataframe的汪洋之中,怎麼抓到"Evening star"吧!步驟如下:
這次我們使用SPY這檔商品來找找看,首先,先將數據清理乾淨:
# 串接API抓取資料
import os
import pandas_datareader as pdr
SPY = pdr.get_data_tiingo('SPY', api_key='YOUR API KEY')
SPY = SPY.reset_index(level=[0,1])
SPY.index = SPY['date']
SPY_adj = SPY.iloc[:,7:11]
SPY_adj.columns = ['Close','High','Low','Open']
# 取2019年的數據
SPY_adj_2019 = SPY_adj['2019']
# 開盤價 & 收盤價
SPY_adj_2019_Open = SPY_adj_2019.Open
SPY_adj_2019_Close = SPY_adj_2019.Close
# 當日漲跌點數
SPY_DailyChg_2019 = SPY_adj_2019_Close - SPY_adj_2019_Open
因為接下來要用漲跌點數去篩選適當的K棒,所以需要先大概知道數字的狀況,
# 取得每日的振幅
SPY_Abs_DailyChg_2019 = abs(SPY_DailyChg_2019)
# 分析振幅統計數據,以利篩選適合的K棒
SPY_Abs_DailyChg_2019.describe()
Output
-------------------
count 252.000000
mean 1.158146
std 1.096910
min 0.000000
25% 0.388314
50% 0.773739
75% 1.642583
max 5.949495
dtype: float64
從上面的資料可以看到,SPY在2019年252個交易日內:
根據上面的數字,就可以篩選符合條件的K棒囉。
# 抓取 第1根大振幅陽線、第2根小振幅陽線或陰線、第3根陰線且振幅大於第1根的1/2
evening_condition_1 = [0,0]
for i in range(2, len(SPY_DailyChg_2019)):
if ( SPY_DailyChg_2019[i-2] > 1.158 ) & ( abs(SPY_DailyChg_2019[i-1]) < 0.388 ) & ( SPY_DailyChg_2019[i] < -0.58 ):
evening_condition_1.append(1)
else:
evening_condition_1.append(0)
# condition 1 符合的次數
evening_condition_1.count(1)
# 第2根的開盤與收盤價 均大於 第1根的收盤與第3根的開盤
evening_condition_2 = [0,0]
for i in range(2, len(SPY_adj_2019_Open)):
if ( SPY_adj_2019_Open[i-1] > SPY_adj_2019_Close[i-2] ) & ( SPY_adj_2019_Open[i-1] > SPY_adj_2019_Open[i] ) & ( SPY_adj_2019_Close[i-1] > SPY_adj_2019_Close[i-2] ) & ( SPY_adj_2019_Close[i-1] > SPY_adj_2019_Open[i] ):
evening_condition_2.append(1)
else:
evening_condition_2.append(0)
evening_condition_2.count(1)
# Evening Star Signal
evening_star_signal = []
for i in range(len(evening_condition_1)):
if ( evening_condition_1[i] == 1 ) & ( evening_condition_2[i] == 1 ):
evening_star_signal.append(1)
else:
evening_star_signal.append(0)
# Find Evening Star date
for i in range(len(evening_star_signal)):
if evening_star_signal[i] == 1:
print(SPY_adj_2019.index[i])
Output
----------
2019-08-20 00:00:00+00:00
最後發現,2019年只撈出8/20這一天出現Evening Star的型態。
下面就把2019年8月的K線圖拉出來看吧!
# 檢視K線圖
import mplfinance as mpf
SPY_adj_2019_Aug = SPY_adj_2019['2019-08']
mpf.plot(SPY_adj_2019_Aug,type='candle')
如下圖,紅色框框的部份就是我們抓到的日期,可以看出來型態的確是很明顯的Evening star的型態,表示上面篩選的數字是還算準的。
本篇總結
本篇成功的抓取到剛開始設定的K線型態,當然K線型態還有很多種,大家也都可以自己玩玩看喔!
下一篇會開始介紹K線型態如何用在股票交易的部分,請繼續收看,謝謝!
P.S.
如果大家對於量化交易有興趣的話,我自己有上過以下這門課,課程內容從串接股市資料API、儲存至資料庫、將自己的策略轉化成程式碼、自動下單,並且可以把整個流程自動化,每天早上執行一次,一整天就不用看盤了,覺得是蠻實戰的,可以參考看看。
筆者 Sean
奈米戶投資人 / Python愛用者
喜歡用Python玩轉金融數據,從個股基本面、技術面、籌碼面相關資料,一直到總體經濟數據,都是平常接觸到的素材;對於投資,除了研究歷史數據,也喜歡瞭解市場上大家在玩些什麼。
SPY_adj_2019 = SPY_adj['2019'] <--有問題
SPY_adj_2019 = SPY_adj.ioc['2019'] <--是否改成這樣