极智量化
简介
安装
极智量化终端目前仅支持Windows 7及以上系统。安装步骤如下:
- 在下载中心下载:https://www.epolestar.xyz/download
- 点击安装包即可
- 更新软件,可通过运行安装路径下的 equant/update.bat 手动更新
快速入门
第一个策略
- 点击极智量化界面上方的量化,打开策略编辑界面。或者使用常用的编辑器(如VS Code),打开
极智量化目录Quant\Strategy
目录。 - 新建一个用户策略
- 在极智量化加载策略
框架函数
极智量化抽离了策略框架的所有技术细节,用户只需要将代码写入相应的框架函数(约定函数)即可。极智量化会在策略运行时,运行中,结束时调用相应的框架函数。框架函数如下:
框架函数 | 名称 | 是否可选 | 描述 |
---|---|---|---|
initialize(context) | 初始化函数 | 必须实现 | 会在策略启动时运行一次。该函数中可以进行合约数据的
订阅以及对策略运行的条件进行设置等。 |
handle_data(context) | 处理函数 | 必须实现 | 按用户设置的触发方式,每触发一次运行一次。策略的大部分内容都该函数中实现。 |
hisover_callback(context) | 回测结束函数 | 可选 | 历史数据运行完后会运行该函数一次。 |
exit_callback(context) | 策略停止函数 | 可选 | 在策略退出前被调用,用户可以在该函数中实现一些数据保
存,仓位处理等操作。 |
from datetime import datetime
# 策略开始运行时执行该函数一次
def initialize(context):
LogInfo('策略开始运行,时间:', datetime.now())
SetTriggerType(5) # 设置K线触发,也可以运行时在界面设置
# 策略触发事件每次触发时都会执行该函数
def handle_data(context):
LogInfo('handle_data函数被调用,时间:', datetime.now())
策略触发
触发类型
极智量化提供了五种触发方式,触发后会自动运行一次handle_data()
函数。可以通过策略运行时属性设置界面设置触发方式,也可以使用int SetTriggerType(int type, int|list value=None)
函数设置。
触发类型 | 设置值 | triggerType返回值 | 描述 | 设置示例 |
---|---|---|---|---|
即时行情触发 | 1 | 'S' | 订阅的合约的即时行情更新时会触发策略 | SetTriggerType(1)
|
订单状态变化触发 | 2 | 'O' | 订单的状态发生改变时会触发策略 | SetTriggerType(2)
|
周期性触发 | 3 | 'C' | 每隔固定的时间间隔会触发策略 | SetTriggerType(3, 1000) 每隔 1000 毫秒触发一次
|
定时触发 | 4 | 'T' | 在指定的时间会触发策略 | |
K 线触发 | 5 | 'H'或'K' | 由 K 线数据触发策略。 triggerType返回值'H'为回测阶段K线触发,'K'为实时阶段K线触发 |
SetTriggerType(5)
|
设置触发方式
import talib
contractId = "ZCE|Z|AP|MAIN"
def initialize(context):
SetBarInterval(contractId, "M", 30, 100)
# 设置触发方式
SetTriggerType(1) # 即时行情触发
SetTriggerType(2) # 交易数据触发
SetTriggerType(3, 1000) # 每隔固定时间触发:时间间隔为 1000 毫秒
SetTriggerType(4, ['223000', '223030']) # 指定两个时刻触发
SetTriggerType(5) # K 线触发
# 策略触发事件每次触发时都会执行该函数
def handle_data(context):
# 判断策略是由哪种触发方式触发
if context.triggerType() == "T": # 定时触发
LogInfo("定时触发")
elif context.triggerType() == "C": # 周期触发
LogInfo("周期触发")
elif context.triggerType() == "H": # 回测阶段 K 线触发
LogInfo("回测阶段 K 线触发")
elif context.triggerType() == "S": # 即时行情触发
LogInfo("即时行情触发")
elif context.triggerType() == "O": # 委托状态变化触发
LogInfo("委托状态变化触发")
触发的上下文环境
数据
K线数据
触发时返回的数据
不同的触发事件,返回不同类型,数据都包含在context.triggerData()
中。
k线数据或Tick数据
设置策略设置K线触发:SetTriggerType(5)
,返回k线数据或Tick数据。
import talib
cont = "ZCE|Z|TA|MAIN"
kType = 'M'
kSlice = 1
# 策略开始运行时执行该函数一次
def initialize(context):
SetBarInterval(cont, kType, kSlice, 3000)
SetTriggerType(5) # K线触发
# 策略触发事件每次触发时都会执行该函数
def handle_data(context):
d = context.triggerData()
if context.triggerType() == 'H' or context.triggerType() == 'K': # K线触发
if context.kLineType() == 'T' and context.kLineSlice() == 0: # Tick数据
data = [d['TradeDate'], d['DateTimeStamp'], d['TotalQty'], d['PositionQty'], \
d['LastPrice'], d['LastQty'], d['PositionChg'], d['BuyPrice'], d['SellPrice'], \
d['BuyQty'], d['SellQty'], d['InnerSideQty'], d['OutSideQty']]
LogInfo("Tick数据:", data)
else: # 不为Tick的K线数据
data = [d['TradeDate'], d['DateTimeStamp'], d['TotalQty'], d['PositionQty'], d['LastPrice'], d['KLineQty'], \
d['OpeningPrice'], d['HighPrice'], d['LowPrice'], d['SettlePrice']]
LogInfo("K线数据:", data)
LogInfo("K线全部数据:", d)
名称 | 描述 | 拥有者 | 示例 |
---|---|---|---|
ContractNo | 合约编号 | k线、Tick | 'ZCE|Z|SR|MAIN' |
KLineType | K 线类型 | k线、Tick | 'D' |
DateTimeStamp | 时间戳 | k线、Tick | 20220921000000000 |
TradeDate | 交易日 | k线、Tick | 20220921 |
TotalQty | 总成交量 | k线、Tick | |
PositionQty | 持仓量 | k线、Tick | |
Priority | 历史数据排序使用,无特别含义 | k线、Tick | |
LastPrice | 最新价(收盘价) | k线、Tick | |
KLineIndex | K 线索引 | ||
KLineSlice | K 线周期 | ||
KLineQty | K 线成交量 | k线 | |
HighPrice | 最高价 | k线 | |
LowPrice | 最低价 | k线 | |
OpeningPrice | 开盘价 | k线 | |
SettlePrice | 结算价 | k线 | |
LastQty | 明细现手 | Tick | |
PositionChg | 持仓量变化 | Tick | |
BuyPrice | 买价 | Tick | |
SellPrice | 卖价 | Tick | |
BuyQty | 买量 | Tick | |
SellQty | 卖量 | Tick | |
InnerSideQty | Tick | ||
OutSideQty | Tick |
了解更多 >> 极智量化文档 极智量化目录\Quant\Strategy\系统示例\5-工具示例\WriteCSV
合约代码
极智量化的合约代码一般由四个部分组成,用竖线分割开,格式为:交易所|品种类型|品种|合约
。如郑商所CF105合约的合约代码:
合约类型 | 格式 | 描述 | 示例 |
---|---|---|---|
普通合约 | 交易所|F|品种|合约月 | ||
主连合约 | 交易所|Z|品种|MAIN | ||
近月合约 | 交易所|Z|品种|NEARBY | ||
品种指数 | 交易所|Z|品种|INDEX | ||
品种期权指数 | 交易所|Z|品种|SUMO | ||
交易所总量 | 交易所|Z|SUM| | ||
交易所期货总量 | 交易所|Z|SUMF| | ||
交易所期权总量 | 交易所|Z|SUMO| |
绘图
目前,极智量化的策略图表窗口分2部分:主图区和副图区。提供了多个的绘图函数用于绘制指标、符号、线和文字等。每个绘图函数都有一个 main 参数,设置main=True
表示在主图上绘制,设置main==False
表示在副图上绘制。
函数 | 名称 | 语法 | 描述 | 示例 |
---|---|---|---|---|
PlotNumeric() | 绘制指标线 | PlotNumeric(string name, float value, int color= 0xdd0000
, bool main=True, char axis=False, int barsback=0) |
在当前柱子输出一个值,经过多次输出形成一条指标线。 | PlotNumeric("ma1", ma1[-1], RGB_Red())
|
PlotIcon() | 绘制图标 | PlotIcon(float value,int icon, bool main=True, int barsback=0) | 在当前柱子输出一个图标。 参数: icon:设置图标类型,0-默认图标,1-笑脸,2-哭脸,3-上箭头,4-下箭头,5-上箭头 2, 6-下箭头 2,7-喇叭,8-加锁,9-解锁,10-货币+,11-货币-,12-加号,13-减号,14-叹号,15-叉号 |
PlotIcon(10,14) 输出一个叹号
|
PlotDot() | 绘制点 | PlotDot(string name, float value, int icon, int color, bool main, int barsback=0) | 在当前柱子输出一个点 | |
PlotBar() | 绘制柱子 | PlotBar(string name, float vol1, float vol2, int color, bool main, bool filled, int barsback=0) | 绘制一根柱子 | |
PlotText() | 绘制字符串 | PlotText(float coord, string text, int color, bool main, int barsback=0) | 在当前柱子输出字符串 | |