ricequant
解释:
- 下面定义了四个函数。但是,其实只用了第一个函数,跟最后一个函数。这两个函数是必有的。
- 多定义的这几个函数 getPrice,跟getRolling 也是比较简单的。
- 除开这两个自定的函数外,另外两个函数,相信,看到了我做的注释之后,看起来会简单很多。(后续,如果想看对于这个两个自定函数的分析。除了看上面的注释之外,我在最后也会做解释的~)
代码
import talib
# 初始化函数
def init(context): # 设置参数
context.s1 = "000001.XSHE"
context.SHORTPERIOD = 12 # EMA 快
context.LONGPERIOD = 26 # EMA 慢
context.SMOOTHPERIOD = 9
context.OBSERVATION = 100 # 查看的天数,这个在后面会用到
# 用户自定义函数
def getPrice(): # 封装好米矿的API,这里是获取数据
stocks_name='沪深300'
start_date='2016-10-01'
end_date='2017-10-13'
# fields=['ClosingPx']
#选择沪深300里面所有的股票代码
stocks=index_components(stocks_name)
#正式获取股票价格
stock_price=get_price(stocks,start_date=start_date,end_date=end_date,fields=fields)
#获得沪深300指数
benchmark_name='399300.XSHE'
benchmark_price=get_price(benchmark_name,start_date=start_date,end_date=end_date,fields=fields)
return stock_price,benchmark_price,stocks
# 用户自定义函数
def getRolling(data,shortPeriod,longPeriod): # 这里假设的是data是一个dataframe.
for i in range(len(data.ix[1])):
col=data.ix[:,i]
name=data.columns[i]
data[name+'_'+str(shortPeriod)+'days']=col.rolling(window=shortPeriod).mean()
data[name+'_'+str(longPeriod)+'days']=col.rolling(window=longPeriod).mean()
return data
# 上面两个用户自定义函数,在这个策略中都没有用到~
# 操作函数
def handle_bar(context, bar_dict):
prices = history_bars(context.s1, context.OBSERVATION, '1d', 'close')
# 得到目前前 OBSERVATION天的日收盘价
macd, signal, hist = talib.MACD(prices, context.SHORTPERIOD, context.LONGPERIOD, context.SMOOTHPERIOD)
# 这里的返回值 macd 就是离差值DIF = EMA12 - EMA26
# 这里的返回值 signal 就是离差平均值DEA
## [-1]得到的是当前的值, [-2]是指前一天的数值
if macd[-1] - signal[-1] > 0 and macd[-2] - signal[-2] < 0:
# 满仓入股
order_target_percent(context.s1, 1) # 仓位调整,肠胃的目标比例价值为目标
# 投资组合中的百分比
# logger.info(context.introduction)
context.day = 0
if macd[-1] - signal[-1] < 0 and macd[-2] - signal[-2] > 0:
# 获取该股票的仓位
curPosition = context.portfolio.positions[context.s1].quantity
# context.portfolio是类自带元素(同样是一个类)类内元素,通过之前设计股票代码来进行寻找(寻找的函数就是positions).通过quantity 来进行查询量
# 清仓
if curPosition > 0:
order_target_value(context.s1, 0) # 仓位调整,价值调整。后面是目标价值(在投资中)
自定义函数解释
获得价格的函数
# 用户自定义函数
def getPrice(): # 封装好米矿的API,这里是获取数据
stocks_name='沪深300'
start_date='2016-10-01'
end_date='2017-10-13'
# fields=['ClosingPx']
#选择沪深300里面所有的股票代码
stocks=index_components(stocks_name)
#正式获取股票价格
stock_price=get_price(stocks,start_date=start_date,end_date=end_date,fields=fields)
#获得沪深300指数
benchmark_name='399300.XSHE'
benchmark_price=get_price(benchmark_name,start_date=start_date,end_date=end_date,fields=fields)
return stock_price,benchmark_price,stocks
- 这个函数用了一些简单的API。分别是:
index_components
, 跟get_price
get_price
, 这个函数就是字面意思,获取价格。前面放的是股票的代码。 然后设置起始日期跟终止日期。最后一个fields是返回字段名称。然后这里的这个代码那选择了注释的原因是,米矿的API做了修改。不再是ClosingPx
,而是close
,这样来表示收盘价。 为什么要设置这个呢?主要是数据会比较多,所以建议还是选择好特定的列嘛。这样会比较简单。还有其他的意思。这个可以在API中查,还是很详细的~index_components
: 是获取一个指数的所有股票代码。这里用的是查沪深300
的所有股票代码
getRolling函数
- 这里其实是假设用到了pandas库的。很明显,data.ix[] 这是pandas中dataFrame的典型函数。(当然啦,也不排除是其他库的可能,但用Python的经验告诉我,这就是pandas)
- dataframe的组成那些,我就不在这里多嘴了。如果不嫌弃,大家也可以在我的
数据分析
可以博客分栏中可以找到吧。当然网上玩pandas比我玩的溜的大神也是一大把的 hh - 这个函数主要用了dataframe.ix[]函数。dataframe.columns函数。Series.rolling函数。
- 具体的话,可以在pandas官网上查,或者百度,google都可以。pandas官网,点击访问
# 用户自定义函数
def getRolling(data,shortPeriod,longPeriod): # 这里假设的是data是一个dataframe.
for i in range(len(data.ix[1])):
col=data.ix[:,i]
name=data.columns[i]
data[name+'_'+str(shortPeriod)+'days']=col.rolling(window=shortPeriod).mean()
data[name+'_'+str(longPeriod)+'days']=col.rolling(window=longPeriod).mean()
return data
希望,看到这篇博文能给一部分人帮助,成为一个又一个Quanter吧~
附上一篇关于rolling函数的解析~
https://blog.csdn.net/wj1066/article/details/78853717
相关阅读
步骤一:在电脑上新建一个txt文件步骤二:将以下代码复制过去(中文可以改)const title = “爱情测试”const yourname = “嫦娥”const
说明: 需要电脑中安装git,下载地址 https://git-scm.com/ 版本必须在2.9.2以上!! 1.首先创建仓库 2.设置ssh秘钥 新建页面下
2017-11-09 0叶白0 阅 20245 转 2021 转藏到我的图书馆 一、你打开好友的聊天对话框,然后记下在你QQ里好友的昵称,
http://www.oschina.net/project/tag/167/code-confusion?lang=19&sort=view Java混淆器 ProGuard ProGuard 是一个免
用整站程序(网站源代码)十分钟快速建站悬赏分:0 - 解决时间:2007-2-2 18:20怎么做提问者: guolibao888 - 试用期 一级最佳