必威体育Betway必威体育官网
当前位置:首页 > IT技术

Ricequant米矿【MACD策略代码解释】量化交易

时间:2019-06-23 18:42:07来源:IT技术作者:seo实验室小编阅读:68次「手机版」
 

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

相关阅读

vbs表白代码+整人代码,抖音vbscript表白代码

步骤一:在电脑上新建一个txt文件步骤二:将以下代码复制过去(中文可以改)const title = “爱情测试”const yourname = “嫦娥”const

华为云Devcloud将本地代码提交到代码托管的步骤

说明: 需要电脑中安装git,下载地址 https://git-scm.com/ 版本必须在2.9.2以上!! 1.首先创建仓库 2.设置ssh秘钥 新建页面下

VBS整人代码大合集

2017-11-09  0叶白0   阅 20245  转 2021 转藏到我的图书馆 一、你打开好友的聊天对话框,然后记下在你QQ里好友的昵称,

共有18款Java 代码混淆和加密开源软件

http://www.oschina.net/project/tag/167/code-confusion?lang=19&sort=view Java混淆器 ProGuard ProGuard 是一个免

用整站程序(网站源代码)十分钟快速建站

 用整站程序(网站源代码)十分钟快速建站悬赏分:0 - 解决时间:2007-2-2 18:20怎么做提问者: guolibao888 - 试用期 一级最佳

分享到:

栏目导航

推荐阅读

热门阅读