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:进入聊天室状态判断

>>:  【Day 23】与 DOM 的互动:Ref

Day9 用python写UI-聊聊Message & Messagebox

在处理一些短讯息的时候可以用 Message 的功能,这个功能跟 Label 有点类似,不一样的地方...

超级好用的avast删除方法

你想从 Mac 中删除 Avast 吗? 事实上,卸载 Avast 并不像其他程序那麽容易。 许多用...

Day - 12 集合

set 可以使用大括号 { } 或者 set() 函数创建集合,以下为set用法: set 不会包含...

Ubuntu巡航记(4) -- Rust 安装

前言 Rust 是一个现代版的 C/C++ 程序语言,它加入物件导向、套件安装(cargo)、函数式...

Day 16【web3.js】I KNOW BINARY AND HEXADECIMAL

【前言】 今天来介绍 we3.eth.contract 和 web3.utis,有一些概念还不太熟...