如何使用Python实现一个简单的商品期货布林指标突破策略
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要介绍如何使用Python实现一个简单的商品期货布林指标突破策略,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!布林指标突破策略,思路非常简单。使用Python语言编写
千家信息网最后更新 2025年01月23日如何使用Python实现一个简单的商品期货布林指标突破策略
这篇文章主要介绍如何使用Python实现一个简单的商品期货布林指标突破策略,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
布林指标突破策略,思路非常简单。使用Python语言编写该策略,也非常容易实现,加上回测配置信息,有70行代码,实际可以更加精简,鉴于教学策略,没有使用难懂的Python语法,使用的是比较基础的语句、结构。便于使用Python语言进行商品期货程序化交易的学习者借鉴、参考。鉴于文章篇幅,策略结构,说明注释,直接写在代码注释中。
策略:
使用BOLL指标上下轨作为突破边界,突破上轨平空、做多。突破下轨平多,做空。用于捕捉趋势行情,所以震荡行情中会有回撤。
策略实现:
'''backteststart: 2019-07-01 00:00:00end: 2019-11-26 00:00:00period: 1hexchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]'''IDLE = 0 # 定义一个 标记量,表示空闲状态LONG = 1 # 定义一个 标记量,表示持多仓状态SHORT = 2 # 定义一个 标记量,表示持空仓状态def CancelAll(): # 实现一个取消所有挂单的功能函数 while True: # 循环执行 orders = _C(exchange.GetOrders) # 读取当前所有挂单,orders 是一个数组 if len(orders) == 0 : # 判断这个数组长度是不是为0,如果为0表示这个数组中没有挂单了 break # 跳出while循环,没有挂单说明不需要取消了 for order in orders : # 通过上面的if检测,执行到这里,说明orders数组的长度不为0,有挂单,遍历orders数组 exchange.CancelOrder(order.Id) # 根据遍历时订单信息中的Id,取消该Id的订单 Sleep(1000) # 控制一下取消频率,每次取消时暂停1秒def main(): # 策略主函数,策略启动后从这里开始执行 state = IDLE # 给策略定义一个状态变量,初始化为空闲状态 direction = "" # 给策略定义一个下单方向变量,初始化为空字符串 while True: # 执行策略逻辑循环 if exchange.IO("status"): # 检测是否与期货公司服务器连接,登录成功 LogStatus(_D(), "已经连接") exchange.SetContractType("rb2001") # 设置要操作的合约,这里设置为rb2001,也可以做成参数,由策略参数上进行设置 records = _C(exchange.GetRecords) # 获取K线数据,策略参数界面上设置K线周期1小时,这里获取的就是1小时K线数据 if len(records) < 21: # 使用BOLL指标的默认参数,所以K线数据的Bar数量要足够21才能计算出有效的BOLL指标 continue # 不满足条件的情况下,continue跳过后面的代码,重复循环 boll = TA.BOLL(records) # 当符合 len(records) >= 21 时,执行到这里,使用TA.BOLL计算布林指标数据,boll是一个二维列表,boll[0]是上轨,boll[1]是中线,boll[2]是下轨 ext.PlotRecords(records, "K") # 使用画线类库接口,画K线,画线类库代码可以在策略广场找到 ext.PlotLine("up", boll[0][-2], records[-2].Time) # 使用画线类库接口,画上轨 ext.PlotLine("mid", boll[1][-2], records[-2].Time) # 画中线 ext.PlotLine("down", boll[2][-2], records[-2].Time) # 画下轨 pos = _C(exchange.GetPosition) # 读取当前账户持仓信息 if len(pos) == 1 : # 如果当前账户有持仓,无持仓时,len(pos) 等于0 if pos[0].Type == PD_LONG or pos[0].Type == PD_LONG_YD: # 根据持仓数据中的持仓方向,设置策略状态变量state state = LONG # 设置为持有多仓状态 elif pos[0].Type == PD_SHORT or pos[0].Type == PD_SHORT_YD: state = SHORT # 设置为持有空仓状态 elif len(pos) == 0 : # 无持仓时 state = IDLE # 持仓状态设置为空闲 else : raise "error len(pos) > 1" # 如果检测到多个仓位,报错,单独跑这个策略,是不会有多个仓位的,如果出现说明异常 if records[-2].Close > boll[0][-2] and (state == IDLE or state == SHORT): # 如果当前是空闲状态或者持有空仓状态,K线BAR完成时确定价格突破上轨进行下一步判断 # 平空仓(如果是持有空仓的状态),开多仓(如果是空闲状态),设置direction交易方向变量 if state == IDLE: direction = "buy" # 设置交易方向变量为开多仓 else : direction = "closesell" # 设置交易方向变量为平空仓 exchange.SetDirection(direction) # 调用交易方向设置函数,设置方向 exchange.Buy(records[-1].Close + 2, 1) # 根据当前价格,加两跳(对于rb这个品种来说)吃单,下单量为1手,exchange.Buy 下单函数,第一个参数为价格,第二个参数为下单量 CancelAll() # 下单后尝试取消所有挂单(未成交) elif records[-2].Close < boll[2][-2] and (state == IDLE or state == LONG): # 判断突破下轨 # 平多仓(如果是持有多仓的状态),开空仓(如果是空闲状态),设置direction交易方向变量 if state == IDLE: direction = "sell" else : direction = "closebuy" exchange.SetDirection(direction) exchange.Sell(records[-1].Close - 2, 1) CancelAll() else : LogStatus(_D(), "未连接") # 如果未连接上期货公司服务器,在机器人状态栏上显示时间,和未连接信息 Sleep(500) # 每次循环暂停500毫秒,用来控制程序逻辑轮转频率
回测
使用rb2001
合约回测
注意
需要注意的是,策略为了教学用途,设计上按照最简单的原则设计。下单量使用的是1手,如果下单量是多手,可以思考下可能会带来什么问题,应该如何改造升级,应对此类问题。
该策略引用了「画线类库」,策略需要在「模板栏」中勾选上这个类库,画线类库可以在策略广场中搜索找到。
以上是"如何使用Python实现一个简单的商品期货布林指标突破策略"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
策略
状态
突破
方向
变量
空闲
交易
指标
期货
参数
布林
信息
函数
数据
数组
循环
商品
代码
价格
标记
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发产业产品或服务
国家网络安全建设与国民经济发展
辽宁省 网络安全公司
两个项目用xml传数据库
网络安全卡通警察图片
最大数据库中心
服务器丢包原因
数据库设计有什么好的工具
Ibm服务器e9错误
美国网络安全公司排名
买电脑主机做服务器可以吗
云服务器 php
重庆 网络安全测评 公司
湖南网络安全学习什么
网络安全专业属于哪个类别
我想学软件开发要多少钱
osi参考网络安全模型
艾尔登法环服务器停止服务
国土局网络安全自查报告
软件开发造价评估公司 资质
上海商城软件开发有用吗
imo社交软件开发公司
软件开发专业哪个学院好
分布式数据库用什么编程语言
青海省草地资源数据库
对数据库进行修改操作
辽宁省医学会数据库
安徽pdu服务器专用电源种类
关掉ftp服务器管理
数据网络技术培训