书接上一回,我们简单介绍了布林带的一些基础知识。
今天话不多说,直接开策略跑回测!
逆势策略
规则简单说明一下:
品种沥青、回测一个月、基于分钟线做日内、参数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는 제공된 정보의 정확성, 완전성 또는 신뢰성에 대해 책임을 지지 않으며, 서면으로 명시적으로 언급되지 않는 한 해당 내용을 기반으로 취해진 어떠한 조치에 대해서도 책임을 지지 않습니다.
이 글이 마음에 드시나요? 작성자에게 팁을 보내 감사의 마음을 전하세요.

더 오래된 의견은 없습니다. 소파를 가장 먼저 잡으십시오.