之前我们学会了如何用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计算技术指标: 应用篇 即可计算不同周期的技术指标了。
在处理一些短讯息的时候可以用 Message 的功能,这个功能跟 Label 有点类似,不一样的地方...
你想从 Mac 中删除 Avast 吗? 事实上,卸载 Avast 并不像其他程序那麽容易。 许多用...
set 可以使用大括号 { } 或者 set() 函数创建集合,以下为set用法: set 不会包含...
前言 Rust 是一个现代版的 C/C++ 程序语言,它加入物件导向、套件安装(cargo)、函数式...
【前言】 今天来介绍 we3.eth.contract 和 web3.utis,有一些概念还不太熟...