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

33 篇文章 1 订阅
8 篇文章 0 订阅

解释:

  • 下面定义了四个函数。但是,其实只用了第一个函数,跟最后一个函数。这两个函数是必有的。
  • 多定义的这几个函数 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

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
要使用ricequant进行因子选股,可以按照以下步骤操作: 1. 登录ricequant平台,进入因子选股模块。 2. 选择适合的时间周期和股票池。根据自己的投资策略和时间偏好,选择要进行因子选股的时间周期,如日线、周线或月线。同时选择一个合适的股票池,包括全市场、某个板块或自定义股票池。 3. 筛选合适的因子。根据自己的投资理念和策略,选择适合的因子进行筛选。ricequant提供了多种常见的因子,如市盈率、市净率、动量等。可以根据自己的需求自定义筛选因子,也可以选择ricequant平台提供的因子。 4. 设置筛选条件。对选择的因子进行设定筛选条件,如过滤掉市盈率大于100的股票、市净率低于1的股票等。这些筛选条件可以根据具体情况进行调整和优化。 5. 运行因子选股策略并返回结果。点击运行按钮,ricequant会按照设定的条件运行因子选股策略,并根据筛选条件返回符合条件的股票。 6. 进行因子优化和回测。根据返回的结果,可以对因子选股策略进行进一步优化和调整,如调整筛选条件、增加或减少选择的因子等。可以使用ricequant提供的回测功能,对不同的因子选股策略进行回测,评估其历史表现和风险收益特征。 使用ricequant进行因子选股需要对股市和因子选股策略有一定的了解和经验,同时需要根据市场情况和投资目标进行灵活调整和优化策略

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肥宅_Sean

公众号“肥宅Sean”欢迎关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值