如何使用Python实现一个简单的商品期货布林指标突破策略
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章主要介绍如何使用Python实现一个简单的商品期货布林指标突破策略,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!布林指标突破策略,思路非常简单。使用Python语言编写
千家信息网最后更新 2025年12月01日如何使用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安全错误
数据库的锁怎样保障安全
个人网络安全防护意识
数据库联接种类
VM数据库产品p
荣昌耀华网络技术 邮箱
网络安全法 网信
信息与网络安全培训会
网络安全迎查报告
梦凯网络技术有限公司招聘
吉首市国家网络安全宣传
诛仙数据怪物数据库
成立软件开发部门的支撑举措
软件开发 工具环境准备
微软云服务器带宽
工业企业数据库企业加工贸易
如何从下拉列表添加数据库
济南app软件开发制作
服务器带个大头的电缆是啥
学java要用到数据库吗
南川软件开发报价
绍兴吉加软件开发来电咨询
电脑服务器安装环境要求
数据库如何解除表的关联
飞狐服务器
广东省软件开发陈全
红旗服务器操作系统
服务器内的电路是什么电路
盈伽互联网科技
数据库文章
建筑网络技术的三要素是什么
公安出版大数据库