
上期回顾:今日小试牛刀万宝配资,明日大刀阔斧-----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 领取源码:
图片
您的小手指是我最大的动力
图片
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。一鼎盈提示:文章来自网络,不代表本站观点。