极智量化

简介

安装

极智量化终端目前仅支持Windows 7及以上系统。安装步骤如下:

快速入门

第一个策略

  • 点击极智量化界面上方的量化,打开策略编辑界面。或者使用常用的编辑器(如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) 在当前柱子输出字符串

交易

资源

官网