iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0
永豐金融APIs

永豐金API之30天不中斷Q&A系列 第 24

Day24 - 如何盤中計算技術指標且發送訊號到line: 不同頻率分K計算

之前我們學會了如何用talib計算一分K技術指標,也學會了如何用line發送通知。因為shioaji目前提供的分K是一分K,如果要計算五分K的技術指標、30分K的技術指標或是其它頻率K棒的技術指標,該怎麼辦呢? 以下介紹如何將一分K轉換為其它週期的K棒。

首先,利用api.kbars取得一分K

kbars = api.kbars(api.Contracts.Stocks['2330'], start='2021-10-04', end='2021-10-06')
df = pd.DataFrame({**kbars})
df.ts = pd.to_datetime(df.ts)
df.set_index('ts',inplace=True) ##將時間設為index
df
ts Volume Low High Close Amount Open
2021-10-04 09:01:00 2094 573 575 575 1.20199e+09 574
2021-10-04 09:02:00 155 574 575 574 8.9051e+07 574
2021-10-04 09:03:00 91 574 575 575 5.2296e+07 575
2021-10-04 09:04:00 157 574 575 575 9.0233e+07 574
2021-10-04 09:05:00 141 574 575 575 8.1055e+07 575

接下來要寫一個函數,將一分K丟進去後,希望它能回傳特定頻率的分K出來,因此引數會是一分K的dataframe與預期它回傳的K棒週期,函數的程式碼如下,

from datetime import timedelta
def kbars_set_interval(kbars_df,interval='5Min'):
  return_df=pd.DataFrame()
  kbars_df.index = kbars_df.index + timedelta(minutes = -1)  #api的一分K是從9:01開始,調成9:00開盤     
  if  interval=='1Min': #如果輸入的引數是'1Min'則直接回傳
    return kbars_df
  else:    
    return_df['Open'] = kbars_df['Open'].resample(interval).first()
    return_df['High'] = kbars_df['High'].resample(interval).max()
    return_df['Low'] = kbars_df['Low'].resample(interval).min()
    return_df['Close'] = kbars_df['Close'].resample(interval).last()
    return_df.dropna(inplace=True)
    return return_df

其中resample()依照輸入的週期對一分K的dataframe重新取樣,再利用first(),max(),min(),last()取得開、高、低、收。定義完函數後,將一分K的資料丟進kbars_set_interval(),且interval設定為’5Min’,即可將一分K轉為五分K,如以下結果

kbars_set_interval(df,'5Min').head()
ts Open High Low Close
2021-10-04 09:00:00 574 575 573 575
2021-10-04 09:05:00 575 575 572 572
2021-10-04 09:10:00 572 574 572 574
2021-10-04 09:15:00 573 574 573 573
2021-10-04 09:20:00 574 574 572 573

不僅可以轉換為5分K,轉為30分K與日K也都沒問題喔!
轉換為30分K

kbars_set_interval(df,'30Min').head()
ts Open High Low Close
2021-10-04 08:30:00 574 575 573 575
2021-10-04 09:00:00 574 575 572 572
2021-10-04 09:30:00 573 573 569 571
2021-10-04 10:00:00 570 573 570 572
2021-10-04 10:30:00 573 573 570 570

轉換為日K

kbars_set_interval(df,'D').head()
ts Open High Low Close
2021-10-04 00:00:00 574 575 569 572
2021-10-05 00:00:00 562 572 560 572
2021-10-06 00:00:00 573 574 565 571

得到特定週期的分K後,再搭配如何用shioaji搭配Ta-Lib計算技術指標: 應用篇 即可計算不同週期的技術指標了。


上一篇
Day23 - Shioaji X Backtesting - RSI低買高賣策略
下一篇
Day25- 如何盤中計算技術指標且發送訊號到line: 成果示範
系列文
永豐金API之30天不中斷Q&A26

尚未有邦友留言

立即登入留言