分享

Backtrader胜率92%策略:兑现承诺,打开实盘之路

 立志德美 2023-05-10 发布于上海

上期回顾:今日小试牛刀,明日大刀阔斧-----Backtrader胜率92%策略:自定义Keltner Channel参数,轻松翻倍

下期计划:

香浓是实盘的根基之一

手操实盘

我们从海龟交易法的角度来理解KC

《海龟》一书建议,如果你们不知道止损该放哪,那么统一放2ATR的地方。

所以KC通道的核心就是:

以均线为价格的真实体现,以海龟交易法的ATR认知为开闭仓条件

我们的交易策略 同KC合并:

以MACD前高为价格为压力点。

以2ATR为交易开关。

开始思虑合并:

1,做正确的比正确的做事重要

2,我们设定一个阈值(ATR)

3,当突破此阈值时,买入

1,我们将一个MACD周期作为一个裸K

图片

2,确定阈值,

图片

3,选取参考线

按照计划sma21日线是最标准的,作为备用选项

按照作者的opt结果看以开盘价最有实战价值。

代码结果:

class NDMACD(bt.Indicator):    #    lines = ('macd', 'HM',  'HH', 'LL',             'HC', )    params = (('short_period', 8),              ('long_period', 21),              ('signal_period', 5),              ('k_period', 14),              ('d_period', 3),              )    plotlines = dict(        macd=dict(_name='MACD', ls='--',                  alpha=0.50, width=0,                  _fill_gt=(0, 'red'), _fill_lt=(0, 'green')                  ),    )    plotinfo = dict(        plot=True,  # 是否绘制        subplot=False,  # 是否绘制成子图
)
def __init__(self): self.addminperiod(self.p.long_period + 1) self.ema_short = bt.ind.EMA(self.data, period=self.params.short_period) self.ema_long = bt.ind.EMA(self.data, period=self.params.long_period) self.dif = self.ema_short - self.ema_long self.dea = bt.indicators.ExponentialMovingAverage( self.dif, period=self.params.signal_period) self.l.macd = (self.dif - self.dea)*10 self.MACD_UP = 0 self.MACD_DOWN = 0 self.MACD_ADD = 1
def next(self): if self.l.macd[0] > 0 and self.l.macd[-1] < 0: self.MACD_ADD = self.MACD_UP self.MACD_UP = 0 if self.l.macd[0] < 0 and self.l.macd[-1] > 0: self.MACD_DOWN = 0 self.MACD_UP += 1
macd_values = self.l.macd.get( ago=0-self.MACD_UP, size=self.MACD_ADD) high_values = self.data.high.get( ago=0-self.MACD_UP, size=self.MACD_ADD) low_values = self.data.low.get( ago=0-self.MACD_UP, size=self.MACD_ADD) close_values = self.data.close.get( ago=0-self.MACD_UP, size=self.MACD_ADD) low_values = self.data.low.get( ago=0-self.MACD_UP, size=self.MACD_ADD)
self.l.HM[0] = max(macd_values) High = max(high_values) Low = min(low_values) HC = max(close_values) LC = min(close_values) R_ATR = max(High-LC, HC - Low) # self.l.HH[0] = self.ema_long[0] + 1.3*R_ATR # self.l.LL[0] = self.ema_long[0] - 1.3*R_ATR self.l.HH[0] = self.data.open[0] + R_ATR/2 self.l.LL[0] = self.data.open[0] - R_ATR/2

开关仓条件:

def next(self): dt, dn = self.datetime.date(), self.data0._name # print(dt, dn)
# 当出现shh时开始产生信号 if self.mh[0] > 0: # 价格上穿shh self.buy_signal_chh = (self.dataclose[0] > self.shh[0]) & ( self.dataclose[-1] < self.shh[0]) # 错甲 self.buy_signal_hl = self.sll[0] > self.shh[-1] if not self.position: if self.current_holding_days != dt: if self.buy_signal_hl == 1: # print('1', dt) if self.buy_signal_chh == 1: # print('2', dt) self.buy(size=(self.broker.getcash() / self.data.close)*0.97) # 买入 self.current_holding_days = dt self.holding_days = 0 else: if self.current_holding_days != dt: if self.get_holding_days != dt: if self.data.open[0] < self.data.open[-1]: self.close() # 卖出 # self.current_holding_days = dt 今日卖出后空仓, # self.current_holding_days = 0 今日卖出后开仓 self.current_holding_days = dt self.holding_days = 0 self.get_holding_days = dt elif self.buy_signal_chh == 1: self.close() # 卖出 self.current_holding_days = dt self.holding_days = 0 self.get_holding_days = dt

当今日的阈值范围底部,高于昨日阈值范围顶部时,我们认为此时动量充沛,开仓,第二如果继续冲破阈值,我们认为可以赢取中间差价:

图片

第二日,低于昨日开盘价开盘,我们认为无动量,果断止损。

图片

结果分析:

暴涨的准确控位:

图片

图片

错误一

图片

属于欲扬先抑可将设置:

self.shh[-2]<self.shh[-1]<self.shh[0]

来规避这种错误。

错误二:

图片

前一日有炸板行为的应该摒除。

代码略。

错误三:

图片

长期横盘后假性突破误判。

1,试探性突破可以作为二次突破的基石,当价格突破假性突破点时为真突破,做中线操作。

图片

图片

2,可引入动量指标滤波。

在此将backtrader示例指标加入。

class Momentum(bt.ind.PeriodN): lines = ('trend',) params = dict(period=50)
def next(self): returns = np.log(self.data.get(size=self.p.period)) x = np.arange(len(returns)) slope, _, rvalue, _, _ = sp.stats.linregress(x, returns) annualized = (1 + slope) ** 252 self.lines.trend[0] = annualized * (rvalue ** 2)

图片

动动小手,一起实盘飞

回复 TK 领取源码:

图片

您的小手指是我最大的动力

图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多