程序化话交易系统中 atr、涨幅、偏度和均线角度计算

  • 您是不是有这样的烦恼,每天都要看一下全市场品种的atr或涨幅排名,来找到当日适合自己的操作品种,大部分软件只有当天的一些指标排序,而不可以看一些自定义指标的强弱排名,如想看下均线角度强弱排名,还有其他很多自定义指标排名。现在鑫程序化交易系统就实现了这个功能,在程序化交易主工作区就可以对自定义的指标进行任意排序。
  • 演示视频
  • 程序化交易系统安装和自定义指标排序功能演示与偏度角度等计算
  • 您还可以用这些指标来选择品种,如您的策略适合是做波动率大的合约,就可以对60(周期根据您的策略)日atr进行排序来选择atr强的品种。

  • 指标编写也非常简单,下面是计算n周期波动率、n周期涨幅、n周期偏度和n周期均线角度的指标,由两个策略构成,一个全局周期参数控制策略,一个指标计算策略,两个策略源代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from tool.gongju import *
from tool.zhibiao import ma_z, ema_z, atr_z

QJCS = {'atrzq': 5, 'zfzq': 5, 'pdzq': 2, 'mazq': 20}


def 全局参数控制_v1(cl):
    """
    此策略为双均线演示策略
    :param cl策略类
    :param cl.klines: k线数据,为df表,0层数据用klines[0]表示
    :param cl.openingdata: 交易数据,为字典,里面有持仓状态,理论持仓数量,开仓价格,开仓时间等
    :param cl.zhanghu: 账户列表
    :param cl.jiaoyishezhi: 为交易设置数据,算法交易,交易合约,其他功能参数都在里面
    :param cl.jiaoyiqidong: 是否启动了交易,为TRUS表示启动
    :return: 输出要在软件上显示的指标
    """
    # 数据提取区
    Open = cl.klines[0].open.values  # 开盘价np列表
    High = cl.klines[0].high.values   # 最高价np列表
    Low = cl.klines[0].low.values  # 最低价np列表
    Close = cl.klines[0].close.values  # 收盘价np列表,Close[-1]这样为最新价
    # 参数设置区
    ss = cl.jiaoyishezhi[5][0]  # 开仓数量
    QJCS['atrzq'] = cl.jiaoyishezhi[5][1]  # atr周期
    QJCS['zfzq'] = cl.jiaoyishezhi[5][2]+1  # 求涨幅的周期
    QJCS['pdzq'] = cl.jiaoyishezhi[5][3]  # 求偏度周期
    QJCS['mazq'] = cl.jiaoyishezhi[5][4]  # 求角度均线周期

    # 初始化持久化变量
    if 'cczt' not in cl.sjb:  # 初始化时执行一次,用于初始化缓存字典
        cl.sjb['cczt'] = 0  # 持仓状态记录
        # 用于在软件右键策略字典中查看参数输入说明,和指标输出含义说明
        cl.sjb['参数说明'] = {"1": '策略开关及开仓数量', '2': 'atr周期', '3': '求涨幅的周期', '4': '求偏度周期', '5': '求角度均线周期'}
        cl.sjb['输出指标说明'] = {"指标1": 'n日atr', '指标2': 'n日涨幅', '指标3': '收盘价偏度', '指标4': 'n日均线角度'}

    # 指标计算区

    return 0,  0, 0, 0


def atr和涨幅偏度角度排序_v1(cl):
    """
    此策略为双均线演示策略
    :param cl策略类
    :param cl.klines: k线数据,为df表,0层数据用klines[0]表示
    :param cl.openingdata: 交易数据,为字典,里面有持仓状态,理论持仓数量,开仓价格,开仓时间等
    :param cl.zhanghu: 账户列表
    :param cl.jiaoyishezhi: 为交易设置数据,算法交易,交易合约,其他功能参数都在里面
    :param cl.jiaoyiqidong: 是否启动了交易,为TRUS表示启动
    :return: 输出要在软件上显示的指标
    """
    # 数据提取区
    Open = cl.klines[0].open.values  # 开盘价np列表
    High = cl.klines[0].high.values   # 最高价np列表
    Low = cl.klines[0].low.values  # 最低价np列表
    Close = cl.klines[0].close.values  # 收盘价np列表,Close[-1]这样为最新价
    # 参数设置区
    ss = cl.jiaoyishezhi[5][0]  # 开仓数量
    atrzq1 = QJCS['atrzq']  # atr周期
    zfzq2 = QJCS['zfzq']  # 求涨幅的周期
    pianduzq = QJCS['pdzq']  # 求偏度周期
    mazq = QJCS['mazq']  # 求角度均线周期

    # 初始化持久化变量
    if 'cczt' not in cl.sjb:  # 初始化时执行一次,用于初始化缓存字典
        cl.sjb['cczt'] = 0  # 持仓状态记录
        # 用于在软件右键策略字典中查看参数输入说明,和指标输出含义说明
        cl.sjb['参数说明'] = {"1": '策略开关及开仓数量', '2': 'atr周期', '3': '求涨幅的周期', '4': '求偏度周期', '5': '求角度均线周期'}
        cl.sjb['输出指标说明'] = {"指标1": 'n日atr', '指标2': 'n日涨幅', '指标3': '收盘价偏度', '指标4': 'n日均线角度'}
    # 指标计算区
    # 求n周期atr
    atr1 = atr_z(High, Low, Open, atrzq1)
    atr1 = round(atr1[-1]/Close[-1]*100, 2)
    # 求n周期涨幅
    zf2 = round((Close[-1]-Close[-zfzq2])/Close[-zfzq2]*100, 2)
    # 求n周期偏度
    s1 = pd.Series(Close[-pianduzq:])  # 转换数据类型
    piandu = round(s1.skew(), 3)  # 求偏度
    # 求均线角度
    ma = ma_z(Close, mazq)
    jxjiaodu = round(math.atan((ma[-1] / ma[-3] - 1)*100)*180 / 3.1415926, 3)

    return atr1,  zf2, piandu, jxjiaodu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值