【策略回测】布林带之轨道逆势策略

avatar
· 阅读量 2,415

书接上一回,我们简单介绍了布林带的一些基础知识。

今天话不多说,直接开策略跑回测!

逆势策略

规则简单说明一下:

品种沥青、回测一个月、基于分钟线做日内、参数20布林带。

低于下轨做多,高于上轨做空,回归均线平仓:

#!/usr/bin/env python
#  -*- coding: utf-8 -*-
__author__ = 'chengzhi'

from datetime import date

import numpy as np
from tqsdk import TargetPosTask, TqApi, TqBacktest, TqSim
from tqsdk.ta import MA
from tqsdk.tafunc import std

api = TqApi(TqSim(init_balance=100000),web_gui=True,backtest=TqBacktest(start_dt=date(2020,4, 1), end_dt=date(2020, 4, 30)))

# 获得 bu2006 60秒K线的引用
klines = api.get_kline_serial("SHFE.bu2006", 60)
# 创建 bu2006 的目标持仓 task,该 task 负责调整 bu2006 的仓位到指定的目标仓位
target_pos = TargetPosTask(api, "SHFE.bu2006")


while True:
    api.wait_update()
    #均线
    ma = MA(klines, 20)  # 使用 tqsdk 自带指标函数计算均线
    klines["ma_MAIN"] =  ma.ma  # 在主图中画一根默认颜色(红色)的 ma 指标线
    #上轨
    up_line=ma.ma+2*std(klines.close,20)
    klines["up_line"]=up_line
    klines["up_line.color"]="rgb(47,94,224)"
    #下轨
    down_line=ma.ma-2*std(klines.close,20)
    klines["down_line"]=down_line
    klines["down_line.color"]="rgb(255,0,255)"
    if klines.close.iloc[-1]>up_line.tail(1).values :
        target_pos.set_target_volume(-5)
    elif klines.close.iloc[-1]<down_line.tail(1).values:
        target_pos.set_target_volume(5)
    
    position = api.get_position("SHFE.bu2006")
    
    if position.volume_long>0 and klines.close.iloc[-1]>ma.ma.tail(1).values :
        target_pos.set_target_volume(0)
        print("到均线,平多仓")
    if position.volume_short>0 and klines.close.iloc[-1]<ma.ma.tail(1).values :
        target_pos.set_target_volume(0)
        print("到均线,平空仓")
   

收益如何?

【策略回测】布林带之轨道逆势策略

总体来看表现不佳,亏掉了三分之一,曲线上来看也不是非常理想:

【策略回测】布林带之轨道逆势策略
就目前的参数和测试环境下,似乎不可行。

顺势策略

逆势不可行的话那顺势抓突破可以么?

规则切换为:

低于下轨做空,高于上轨做多,回归均线平仓:

#!/usr/bin/env python
#  -*- coding: utf-8 -*-
__author__ = 'chengzhi'

from datetime import date

import numpy as np
from tqsdk import TargetPosTask, TqApi, TqBacktest, TqSim
from tqsdk.ta import MA
from tqsdk.tafunc import std

api = TqApi(TqSim(init_balance=100000),web_gui=":9875",backtest=TqBacktest(start_dt=date(2020,4, 1), end_dt=date(2020, 4, 30)))

# 获得 bu2006 60秒K线的引用
klines = api.get_kline_serial("SHFE.bu2006", 60)
# 创建 bu2006 的目标持仓 task,该 task 负责调整 bu2006 的仓位到指定的目标仓位
target_pos = TargetPosTask(api, "SHFE.bu2006")


while True:
    api.wait_update()
    #均线
    ma = MA(klines, 20)  # 使用 tqsdk 自带指标函数计算均线
    klines["ma_MAIN"] =  ma.ma  # 在主图中画一根默认颜色(红色)的 ma 指标线
    #上轨
    up_line=ma.ma+2*std(klines.close,20)
    klines["up_line"]=up_line
    klines["up_line.color"]="rgb(47,94,224)"
    #下轨
    down_line=ma.ma-2*std(klines.close,20)
    klines["down_line"]=down_line
    klines["down_line.color"]="rgb(255,0,255)"
    if klines.close.iloc[-1]>up_line.tail(1).values :
        target_pos.set_target_volume(5)
    elif klines.close.iloc[-1]0 and klines.close.iloc[-1]0 and klines.close.iloc[-1]>ma.ma.tail(1).values :
        target_pos.set_target_volume(0)
        print("到均线,平空仓")
   
【策略回测】布林带之轨道逆势策略
表现依旧不佳
【策略回测】布林带之轨道逆势策略

这里就有些观众老爷们看出问题了,

突破轨道后不管做多做空,基于穿均线平仓,好像都是亏损的?

没有错,基于手续费的影响

有时候无论做什么方向,都难以盈利。

失效的策略,并不是逆着方向做,就能盈利。

过高的交易频率往往意味着亏损。

 

好的,今天的分享就到这里,

策略仅用于抛砖引玉,

参数调一调可能还是能盈利的。

风险提示:本文所述仅代表作者个人观点,不代表 Followme 的官方立场。Followme 不对内容的准确性、完整性或可靠性作出任何保证,对于基于该内容所采取的任何行为,不承担任何责任,除非另有书面明确说明。

喜欢的话,赞赏支持一下
回复 0

暂无评论,立马抢沙发

  • tradingContest