常用指标
常用指标
做行情分析和交易判断常用的一些指标,如MACD、KDJ等,具体支持的指标见下方表格。
参数
指标计算参数见下方表格,包含目前支持的指标,参数,默认参数值
指标品种和K线周期参数设置方法同GetHisData,具体如下:
Code:合约代码 + 市场代码
BarType K线类型,如日线周线月线分钟线
详细周期:Year 、Season 、Month 、Week 、Day、Min240、Min120、Min60、Min30、Min15、Min5、Min3、Min
option 可设定前/后复权,可指定StartDate/EndDate/Count
option.WeightType:0为不复权,1为前复权,2为后复权
注意:StartDate/EndDate/Count,取两个使用,如option.StartDate = datetime.datetime(2012, 3, 5)起始,option.Count = 10 总K线数,则得到的K线数据是从12年3月5号到15号;
option也可不设置,如KDJ.Attach(g.code, BarType.Day)
返回
GetValue获取指标计算结果,返回一个list,包含每一根K线对应的指标结果; GetValueAt获取获取指定日期/时间的指标计算结果,返回一个词典,如{‘DEA’: -0.02339127950538261, ‘serial’: 6514, ‘MACD’: -0.007363316204148762, ‘DIF’: -0.027072937607456993, ‘datetime’: datetime.datetime(2016, 12, 12, 11, 25)}。
示例
#创建KDJ对象
KDJ = CreateIndicator("KDJ")
#设定参数,也可以不设置,系统有自带的默认参数,见下表
param = {"N":9,"M1":3,"M2":3}
KDJ.SetParameter(param)
#设定要计算KDJ的品种和K线周期
if KDJ:
KDJ.Attach(g.code, BarType.Day)
#开始计算
KDJ.Calc()
#获取计算结果,返回对应结果的list
K = KDJ.GetValue("K")
D = KDJ.GetValue("D")
J = KDJ.GetValue("J")
if len(K)>0:
print 'K' + str(K[-1])
print 'D' + str(D[-1])
print 'J' + str(J[-1])
#获取当前时间一根K线的指标值,返回一个词典
time = GetCurrentTime()
cukdj = KDJ.GetValueAt(time)
print cukdj
支持的指标
指标 | 名称 | 参数及默认值 | 输出结果 |
---|---|---|---|
KDJ | 随机指标 | {“N”:9,”M1″:3,”M2″:3} | K/D/J |
KD | 随机指标 | {“N”:9,”M1″:3,”M2″:3} | K/D |
DMA | 平均线差 | {“SHORT”:10,”LONG”:50,”M”:10} | DDD/AMA |
MACD | 指数平滑异同平均线 | {“SHORT”:12,”LONG”:26,”M”:9} | DIF/DEA/MACD |
MASS | 梅斯线 | {“N1″:9,”N2″:25,”M”:6} | MASS/MAMASS |
MFI | 资金流量指标 | {“N”:14,”N2″:6 } | MFI |
TRIX | 三重指数平滑平均线 | {“N”:12,”M”:9 } | TRIX/TRMA |
BIAS | 乖离率 | {“L1″:6,”L2″:12,”L3”:24} | BIAS1/BIAS2/BIAS3 |
CCI | 顺势指标 | {“N”:14} | CCI |
DPO | Detrended Price Oscillator | 无 | DPO |
W&R | 威廉指标 | {“N”:14} | W&R |
RSI | 相对强弱指标 | {“N1″:6,”N2″:12,”N3”:24} | RSI1/RSI2/RSI3 |
SLOWKD | 慢速KD | {“N”:9,”M1″:3,”M2″:3, “M3”:5} | K/D |
ARBR | 人气意愿指标 | {“N”:26} | AR/BR |
CR | CR能量指标 | {“N”:26,”M1″:5,”M2″:10, “M3”:20, “M4”:62} | CR/MA1/MA2/MA3/MA4 |
VR | VR容量比率 | {“N”:26} | VR |
AMV | 成本价均线 | {“M1″:5,”M2”:13, “M3”:34, “M4”:60} | AMV1/AMV2/AMV3/AMV4 |
ASI | 振动升降指标 | 无 | ASI |
OBV | 能量潮 | 无 | OBV |
PVT | Price/Volume Trend | 无 | PVT |
WVAD | 威廉变异离散量 | 无 | WVAD |
BRAR | 情绪指标 | {“M”:26,”N”:26 } | BR/AR |
MOM | 动量线 | {“N”:12,”M”:6 } | MOM1/MOM2 |
MTM | MTM动力指标 | {“N”:12,”M”:6 } | MTM/MTMMA |
OSC | 变动速率线 | {“N”:20,”M”:6 } | OSC/MAOSC |
PSY | 心理线 | {“N”:12,”M”:6 } | PSY/PSYMA |
WAD | 威廉多空力度线 | {“M”:30} | WAD/MAWAD |
AD | Accumulation/Distribution | 无 | AD |
ATR | 真实波幅 | {“N”:15} | TR/ATR |
VOL | 成交量 | {“M1″:5,”M2”:10} | VOLUME/MAVOL1/MAVOL2 |
BBI | 多空指数 | {“M1″:3,”M2”:6, “M3”:12, “M4”:24} | BBI |
EXPMA | 指数平滑移动平均线 | {“P1″:5,”P2”:10, “P3”:20, “P4”:60} | MA1/MA2/MA3/MA4 |
MA | 均价 | {“P1″:5,”P2”:10, “P3”:20, “P4”:40, “P5″:60,”P6”:0, “P7”:0, “P8”:0} | MA(5)/MA(10)/MA(20)/MA(40)/MA(60)括号里的数字由ma均线周期参数决定 |
SAR | 抛物转向 | {“N”:10,”S”:2,”MAXP”:20} | SAR |
SARPB | 抛物转向(澎博) | {“N”:10,”S”:2,”MAXP”:20} | SARPB |
VMA | 变异平均线 | {“M1″:6,”M2”:12, “M3”:30, “M4”:72, “M5”:144} | VMA1/VMA2/VMA3/VMA4/VMA5 |
BOLL | 布林线 | {“N”:26,”P”:2} | MID/UPPER/LOWER |
MIKE | 麦克指标 | {“N”:12} | WR/MR/SR/WS/MS/SS |
时间函数
设定计时时间—SetTimer
设定计时时间—SetTimer(Second) 结合计时器OnTimer事件使用,每过设定好的秒数调用一次计时器OnTimer事件,直到KillTimer结束定时器为止
参数
Second 秒数
示例
timerid = SetTimer(5)
结束计时器—KillTimer(id)
参数
id:要结束的计时器ID
示例
def OnStart(context) :
context.counter = 0
TimerID = SetTimer(2)
def OnTimer(context, timerid) :
context.counter += 1
print "I\'ve been hitted by " + str(timerid) + " and Counter is " + str(context.counter) + " at " + str(GetCurrentTime())
if context.counter >= 5 :
ret = KillTimer(timerid)
if ret :
print "KillTimer " + str(timerid)
获取当前时间—GetCurrentTime
参数
无
返回
datetime格式的当前时间
示例
cutime = GetCurrentTime()
获取当前交易日—GetCurrentTradingDate
获取当前交易日—GetCurrentTradingDate(exchange)
参数
exchange 交易所代码,如’SHFE’代表上期所、’DCE’代表大商所、’CZCE’代表郑商所
返回
datetime格式的当前交易日
示例
a = GetCurrentTradingDate('SHFE')
print '当前交易日: ' + str(a)
获取前一交易日—GetPreviousTradingDate
获取前一交易日—GetPreviousTradingDate(exchange,CurrentTradingDate)
参数
exchange 交易所代码,如’SHFE’代表上期所、’DCE’代表大商所、’CZCE’代表郑商所
CurrentTradingDate 当前交易日,传入一个datetime格式的时间,根据这时间找前一交易日,也可以用GetCurrentTradingDate获取当前交易日
返回
datetime格式的前一交易日
示例
a = GetCurrentTradingDate('SHFE')
b = GetPreviousTradingDate('SHFE',a)
print '前一交易日: ' + str(b)
获取后一交易日—GetNextTradingDate
获取后一交易日—GetNextTradingDate(exchange,CurrentTradingDate)
参数
exchange 交易所代码,如’SHFE’代表上期所、’DCE’代表大商所、’CZCE’代表郑商所
CurrentTradingDate 当前交易日,传入一个datetime格式的时间,根据这时间找后一交易日,也可以用GetCurrentTradingDate获取当前交易日
返回
datetime格式的后一交易日
示例
a = GetCurrentTradingDate('SHFE')
c = GetNextTradingDate('SHFE',a)
print '后一交易日: ' + str(c)
获取交易日列表—GetTradingDates
获取交易日列表—GetTradingDates(exchange,startdate,enddate),用来获取一段时间段内的交易日列表
参数
exchange 交易所代码,如’SHFE’代表上期所、’DCE’代表大商所、’CZCE’代表郑商所
startdate 起始日期,可以传入datetime格式的时间,也可以直接传入数字格式的,如20181018
enddate 结束日期,可以传入datetime格式的时间,也可以直接传入数字格式的,如20181031
返回
一个list,包含这段时间内的所有交易日,交易日是datetime格式的
示例
d = GetTradingDates('SHFE',20181018,20181031)
print d
其他函数
日志log
log.error(content)
log.warn(content)
log.info(content)
log.debug(content)
print content1, content2, …
print输出的结果等同于log.info, 但是print后面的每一个元素会占用一行
参数
可以是字符串、list等
返回
None
示例
def OnQuote(context,code) :
print '调用到OnQuote事件'
dyndata = GetQuote("rb1905.SHFE")
log.debug('最新价: ' + str(dyndata.now))
log.warn( '最新价: ' + str(dyndata.now))
log.error( '最新价: ' + str(dyndata.now))
log.info( '最新价: ' + str(dyndata.now))
回测标志函数IsBackTest
调用函数IsBackTest(),用于Python策略判断自己现在的运行状态是否属于回测。
参数
无
返回
bool型,true表示目前属于回测,false表示是实跑
示例
isback = IsBackTest()