极智量化

Eric讨论 | 贡献2022年9月20日 (二) 09:02的版本

简介

安装

极智量化终端目前仅支持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)
名称 k线 Tick

了解更多 >> 极智量化文档 极智量化目录\Quant\Strategy\系统示例\5-工具示例\WriteCSV


合约代码

极智量化的合约代码一般由四个部分组成,用竖线分割开,格式为:交易所|品种类型|品种|合约。如是郑商所 CF105合约的合约代码:


绘图

目前,极智量化的策略图表窗口分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) 在当前柱子输出字符串

交易

资源

官网