如何利用易盛极智量化编写自己的期货策略?
点击量:发布时间:2020-04-14 09:03文章来源:全国期货开户文章作者:上海期货公司
有不少程序化交易员比较感兴趣如何使用易盛极智量化来编写自己的期货策略,今天小编来给大家讲讲:
极智量化抽离了策略框架的所有技术细节,用户只需要调用提供的 API 编写自己的策略,以便将主要的精力放在策略开发和测试上,而不必关注过多的技术细节。
极智量化的 API 主要分为以下几类:约定函数、K 线数据、即时行情、策略交易、属性函数、策略状态、策略性能、账户函数、枚举函数、设置函数、绘图函数、统计函数、日志函数。其中约定函数作为 API 的入口函数,用户必须实现对应的约定函数才可以正确的运行策略。
约定函数包括:
initialize(context): 初始化方法,会在策略启动时运行一次。该函数中可以进行合约数据的订阅以及对策略运行的条件进行设置等。[必须实现]
handle_data(context): 该函数在策略收到每一笔关心的数据时都会被调用,策略的主要业务在该函数中实现。[必须实现]
hisover_callback(context): 该函数在策略运行的历史阶段结束时被调用。用户可以在该函数中可以对历史阶段的仓位进行平仓等操作。[选择实现]
exit_callback(context): 该函数在策略退出前被调用,用户可以在该函数中实现一些数据保存,仓位处理等操作。[选择实现]
极智量化策略的基本结构包括:模块导入、策略参数、全局变量、约定函数,下面实现一个简单的策略。
# 导入功能模块
import talib
import numpy as np
# 策略的任何初始化逻辑
def initialize(context):
# 订阅郑商所苹果主连合约 1 分钟历史数据 500 根 SetBarInterval("ZCE|Z|AP|MAIN","M", 1, 500)
# 初始化函数中订阅的合约的数据更新将会触发此段逻辑
def handle_data(context):
LogInfo("每次策略被触发时调用")
# 策略历史阶段运行完成时将会执行此逻辑
def hisover_callback(context):
LogInfo("策略历史阶段运行结束")
# 策略停止时将会运行此逻辑
def exit_callback(context):
LogInfo("策略即将退出")
以上就实现了一个简单地策略,该策略导入了 numpy、talib 两个常用的 python 第三方库:
import talib
import numpy as np
订阅了苹果主连合约的历史数据:
SetBarInterval("ZCE|Z|AP|MAIN", "M", 1, 500)
并输出了一些日志信息:
LogInfo("每次策略被触发时调用")
该策略中可以不包含 hisover_callback()和 exit_callback()两个函数,这里只是为了演示上述两个函数在何时被策略调用。注意:若要策略能够被触发,必须在策略中调用
SetBarInterval()函数或在属性设置界面上设置合约。
接下来,我们需要获取数据,根据数据来确定我们的仓位逻辑,因此会使用到数据查询的API 接口。这里列举部分数据查询接口:
⚫ BarCount: 获取指定合约的 Bar 总数
⚫ Open:指定合约指定周期的开盘价
⚫ Close:指定合约指定周期的开盘价
⚫ High:指定合约指定周期的最高价
⚫ Low:指定合约指定周期的最低价
⚫ Vol:成交量
⚫ OpenInt:持仓量
⚫ BuyPosition:获得当前持仓的买入方向的持仓量
⚫ SellPosition:获得当前持仓的卖出方向的持仓量
⚫ MarketPosition:获取当前的持仓状态
金融数据的技术分析指标的计算方法可以引用 python 第三方库 talib 所提供的方法。
获取到历史数据可以进行一些常用指标的计算,以 talib 库的 MA 指标为例:
# 计算 5 分钟苹果主连合约的收盘价移动平均值
ma1 = talib.MA(Close("ZCE|Z|AP|MAIN", "M", 1), 5)
# 计算 20 分钟苹果主连合约的收盘价移动平均值
ma2 = talib.MA(Close("ZCE|Z|AP|MAIN", "M", 1), 20)
上述 ma1 指标和 ma2 指标的计算用到了合约的收盘价数据 Close(),MA 指标方法是调用python 第三方库 talib 的方法。修改上述策略如下:
import talib
import time
p1 = 5
p2 = 20
qty = 1
def initialize(context):
SetBarInterval("ZCE|Z|AP|MAIN", "M", 1, 500)
def handle_data(context):
# 判断合约的收盘价数据长度是否满足计算要求
if len(Close()) < p2:
return
ma1 = talib.MA(Close(), p1)
ma2 = talib.MA(Close(), p2)
if ma1[-1] > ma2[-1] and MarketPosition() <= 0:
LogInfo("金叉进行买入建仓操作")
elif ma1[-1] < ma2[-1] and MarketPosition() >= 0:
LogInfo("死叉进入卖出开仓操作")
def hisover_callback(context):
LogInfo("策略历史阶段运行结束")
# 策略停止时将会运行此逻辑
def exit_callback(context):
LogInfo("策略即将退出")
这里增加定义了三个全局变量 p1,p2,qty,并增加了交易逻辑:
if ma1[-1] > ma2[-1] and MarketPosition() <= 0:
LogInfo("金叉进行买入建仓操作")
elif ma1[-1] < ma2[-1] and MarketPosition() >= 0:
LogInfo("死叉进入卖出开仓操作")
接下来只需要调用交易接口就可以进行交易了。增加交易接口的策略修改如下:
import talib
import time
p1 = 5
p2 = 20
qty = 1
def initialize(context):
SetBarInterval("ZCE|Z|AP|MAIN", "M", 1, 500)
def handle_data(context):
# 判断合约的收盘价数据长度是否满足计算要求
if len(Close()) < p2:
return
ma1 = talib.MA(Close(), p1)
ma2 = talib.MA(Close(), p2)
if ma1[-1] > ma2[-1] and MarketPosition() <= 0:
Buy(qty, Close()[-1])
elif ma1[-1] < ma2[-1] and MarketPosition() >= 0:
SellShort(qty, Close()[-1])
def hisover_callback(context):
LogInfo("策略历史阶段运行结束")
# 策略停止时将会运行此逻辑
def exit_callback(context):
LogInfo("策略即将退出")
这样就完成了一个完整的双均线策略的
本文链接:http://www.nutleylodge25.com/jyrj-sysc/665.html
投资者一定要在正规合法的期货公司开户,我们见过太多的非法期货平台以低手续费、低保证金、高收益吸引投资者交易,最终本金无法取出,入市有风险,投资需谨慎,请远离金融诈骗!
如果需要了解更加详细的期货知识的,欢迎拨打咨询电话:17348866742,我们将竭诚为您服务!只要是通过网站预约方式联系到我们的客户都可享受不同程度优惠,比您自己去营业部节省30%手续费,欢迎咨询!工作人员看到消息会第一时间联系您的!现在开户免费送期货课程和培训!