如何使用Python实现一个简单的商品期货布林指标突破策略
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍如何使用Python实现一个简单的商品期货布林指标突破策略,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!布林指标突破策略,思路非常简单。使用Python语言编写
千家信息网最后更新 2026年10月31日如何使用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安全错误
数据库的锁怎样保障安全
上海挚品互联网科技有限公司
互联网科技股
华服互联网科技靠谱吗
广州百单互联网科技有限公司
科技赋能下的互联网金融
科技和互联网公司
互联网 科技公司
万易互联网科技
安徽鑫晟辉互联网科技
凡科互联网科技
呼和浩特新华互联网科技学院
互联网营销推广黑科技
广东鹅鹅鹅互联网科技有限公司
科技和互联网行业的特点
广西泛欧互联网科技有限公司
第三届互联网大会安防黑科技
承德科技产业互联网平台
安徽九吞吴互联网科技有限公司
重庆科技产业互联网有哪些
互联网科技创新方面的资料
湖北九亚互联网络科技有限公司
人人互联网科技是培训
成都仁贤领冠互联网科技有限公司
中国最先进互联网科技公司
科技互联网的估值
南山科技园互联网公司有哪些
洛阳昕诺飞互联网科技有限公司
富国互联网金融科技混合基金
现代科技的标志之一的互联网
知域互联网科技有限公司官网