极智量化:修订间差异
(创建页面,内容为“ ==简介== ===安装=== 极智量化终端目前仅支持Windows 7及以上系统。安装步骤如下: *在下载中心下载:https://www.epolestar.xyz/downloa…”) |
无编辑摘要 |
||
(未显示同一用户的5个中间版本) | |||
第7行: | 第7行: | ||
*更新软件,可通过运行安装路径下的 equant/update.bat 手动更新 | *更新软件,可通过运行安装路径下的 equant/update.bat 手动更新 | ||
==快速入门== | |||
===第一个策略=== | |||
* 点击极智量化界面上方的量化,打开策略编辑界面。或者使用常用的编辑器(如[[VS Code]]),打开<code>极智量化目录Quant\Strategy</code>目录。 | |||
* 新建一个用户策略 | |||
* 在极智量化加载策略 | |||
==框架函数== | |||
极智量化抽离了策略框架的所有技术细节,用户只需要将代码写入相应的框架函数(约定函数)即可。极智量化会在策略运行时,运行中,结束时调用相应的框架函数。框架函数如下: | |||
{| class="wikitable" style="width: 100%; | |||
! 框架函数 | |||
! 名称 | |||
! 是否可选 | |||
! 描述 | |||
|- | |||
| initialize(context) | |||
| 初始化函数 | |||
| 必须实现 | |||
| 会在策略启动时运行一次。该函数中可以进行合约数据的 | |||
订阅以及对策略运行的条件进行设置等。 | |||
|- | |||
| handle_data(context) | |||
| 处理函数 | |||
| 必须实现 | |||
| 按用户设置的触发方式,每触发一次运行一次。策略的大部分内容都该函数中实现。 | |||
|- | |||
| hisover_callback(context) | |||
| 回测结束函数 | |||
|可选 | |||
| 历史数据运行完后会运行该函数一次。 | |||
|- | |||
|exit_callback(context) | |||
|策略停止函数 | |||
|可选 | |||
|在策略退出前被调用,用户可以在该函数中实现一些数据保 | |||
存,仓位处理等操作。 | |||
|- | |||
|} | |||
<syntaxhighlight lang="python" > | |||
from datetime import datetime | |||
# 策略开始运行时执行该函数一次 | |||
def initialize(context): | |||
LogInfo('策略开始运行,时间:', datetime.now()) | |||
SetTriggerType(5) # 设置K线触发,也可以运行时在界面设置 | |||
# 策略触发事件每次触发时都会执行该函数 | |||
def handle_data(context): | |||
LogInfo('handle_data函数被调用,时间:', datetime.now()) | |||
</syntaxhighlight> | |||
==策略触发== | ==策略触发== | ||
===触发类型=== | ===触发类型=== | ||
极智量化提供了五种触发方式,触发后会自动运行一次<code>handle_data()</code>函数。可以通过策略运行时属性设置界面设置触发方式,也可以使用<code>SetTriggerType()</code>函数设置。 | 极智量化提供了五种触发方式,触发后会自动运行一次<code>handle_data()</code>函数。可以通过策略运行时属性设置界面设置触发方式,也可以使用<code>int SetTriggerType(int type, int|list value=None)</code>函数设置。 | ||
{| class="wikitable" style="width: 100%; | {| class="wikitable" style="width: 100%; | ||
! | ! 触发类型 | ||
! 设置值 | |||
! triggerType返回值 | |||
! 描述 | ! 描述 | ||
! 设置示例 | ! 设置示例 | ||
|- | |- | ||
| 即时行情触发 | | 即时行情触发 | ||
| 1 | |||
| 'S' | |||
| 订阅的合约的即时行情更新时会触发策略 | | 订阅的合约的即时行情更新时会触发策略 | ||
| <code>SetTriggerType(1)</code> | | <code>SetTriggerType(1)</code> | ||
|- | |- | ||
| | | 订单状态变化触发 | ||
| 2 | |||
| 'O' | |||
| 订单的状态发生改变时会触发策略 | | 订单的状态发生改变时会触发策略 | ||
| <code>SetTriggerType(2)</code> | | <code>SetTriggerType(2)</code> | ||
|- | |- | ||
| | | 周期性触发 | ||
| 3 | |||
| 'C' | |||
| 每隔固定的时间间隔会触发策略 | | 每隔固定的时间间隔会触发策略 | ||
| <code>SetTriggerType(3, 1000)</code> 每隔 1000 毫秒触发一次 | | <code>SetTriggerType(3, 1000)</code> 每隔 1000 毫秒触发一次 | ||
|- | |- | ||
| | | 定时触发 | ||
| 4 | |||
| 'T' | |||
| 在指定的时间会触发策略 | | 在指定的时间会触发策略 | ||
| | | | ||
|- | |||
| K 线触发 | |||
| 5 | |||
| 'H'或'K' | |||
| 由 K 线数据触发策略。<br \>triggerType返回值'H'为回测阶段K线触发,'K'为实时阶段K线触发 | |||
| <code> SetTriggerType(5)</code> | |||
|} | |} | ||
设置触发方式 | |||
<syntaxhighlight lang="python" > | |||
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("委托状态变化触发") | |||
</syntaxhighlight> | |||
===触发的上下文环境=== | ===触发的上下文环境=== | ||
==数据== | |||
=== K线数据 === | |||
===触发时返回的数据=== | |||
不同的触发事件,返回不同类型,数据都包含在<code>context.triggerData()</code>中。 | |||
====k线数据或Tick数据==== | |||
设置策略设置K线触发:<code>SetTriggerType(5)</code>,返回k线数据或Tick数据。 | |||
<syntaxhighlight lang="python" > | |||
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) | |||
</syntaxhighlight> | |||
{| class="wikitable" | |||
! 名称 | |||
! 描述 | |||
! 拥有者 | |||
! 示例 | |||
|- | |||
|ContractNo | |||
|合约编号 | |||
|k线、Tick | |||
|<nowiki>'ZCE|Z|SR|MAIN'</nowiki> | |||
|- | |||
|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 | |||
| | |||
|} | |||
{{了解更多 | |||
|[https://www.epolestar.xyz/source/1/极智量化(Python语言)帮助文档.pdf 极智量化文档] | |||
|极智量化目录\Quant\Strategy\系统示例\5-工具示例\WriteCSV | |||
}} | |||
==合约代码== | |||
极智量化的合约代码一般由四个部分组成,用竖线分割开,格式为:<code>交易所|品种类型|品种|合约</code>。如郑商所CF105合约的合约代码: | |||
{| class="wikitable" | |||
! 合约类型 | |||
! 格式 | |||
! 描述 | |||
! 示例 | |||
|- | |||
| 普通合约 | |||
| <nowiki>交易所|F|品种|合约月</nowiki> | |||
| | |||
| | |||
|- | |||
| 主连合约 | |||
| <nowiki>交易所|Z|品种|MAIN</nowiki> | |||
| | |||
| | |||
|- | |||
| 近月合约 | |||
| <nowiki>交易所|Z|品种|NEARBY</nowiki> | |||
| | |||
| | |||
|- | |||
| 品种指数 | |||
| <nowiki>交易所|Z|品种|INDEX</nowiki> | |||
| | |||
| | |||
|- | |||
| 品种期权指数 | |||
| <nowiki>交易所|Z|品种|SUMO</nowiki> | |||
| | |||
| | |||
|- | |||
| 交易所总量 | |||
| <nowiki>交易所|Z|SUM|</nowiki> | |||
| | |||
| | |||
|- | |||
| 交易所期货总量 | |||
| <nowiki>交易所|Z|SUMF|</nowiki> | |||
| | |||
| | |||
|- | |||
| 交易所期权总量 | |||
| <nowiki>交易所|Z|SUMO|</nowiki> | |||
| | |||
| | |||
|} | |||
==绘图== | |||
目前,极智量化的策略图表窗口分2部分:主图区和副图区。提供了多个的绘图函数用于绘制指标、符号、线和文字等。每个绘图函数都有一个 main 参数,设置<code>main=True</code> 表示在主图上绘制,设置<code>main==False</code> 表示在副图上绘制。 | |||
{| class="wikitable" style="width: 100%; | |||
! 函数 | |||
! 名称 | |||
! 语法 | |||
! 描述 | |||
! 示例 | |||
|- | |||
| PlotNumeric() | |||
| 绘制指标线 | |||
| PlotNumeric(string name, float value, int color= 0xdd0000 | |||
, bool main=True, char axis=False, int barsback=0) | |||
| 在当前柱子输出一个值,经过多次输出形成一条指标线。 | |||
| <code>PlotNumeric("ma1", ma1[-1], RGB_Red())</code> | |||
|- | |||
| PlotIcon() | |||
| 绘制图标 | |||
| PlotIcon(float value,int icon, bool main=True, int barsback=0) | |||
| 在当前柱子输出一个图标。<br \>参数:<br \>icon:设置图标类型,0-默认图标,1-笑脸,2-哭脸,3-上箭头,4-下箭头,5-上箭头 2, 6-下箭头 2,7-喇叭,8-加锁,9-解锁,10-货币+,11-货币-,12-加号,13-减号,14-叹号,15-叉号 | |||
|<code>PlotIcon(10,14)</code> 输出一个叹号 | |||
|- | |||
| 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) | |||
| 在当前柱子输出字符串 | |||
| | |||
|- | |||
| | |||
| | |||
| | |||
| | |||
| | |||
|- | |||
|} | |||
==交易== | ==交易== |
2022年10月12日 (三) 03:48的最新版本
简介
安装
极智量化终端目前仅支持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) | 在当前柱子输出字符串 | |