书接上一回,我们简单介绍了布林带的一些基础知识。
今天话不多说,直接开策略跑回测!
逆势策略
规则简单说明一下:
品种沥青、回测一个月、基于分钟线做日内、参数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は、提供された情報の正確性、完全性、信頼性について一切責任を負いません。また、書面で明示的に記載されている場合を除き、本記事の内容に基づいて行われたいかなる行動についても責任を負いません。
この記事が気に入ったら、著者にチップを送って感謝の気持ちを表しましょう。

古いコメントはありません。ソファをつかむ最初のものになりましょう。