- 您是不是有这样的烦恼,每天都要看一下全市场品种的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