これは,2つの異なるゼロレイグ EMAの違いを使用して,楽器の上下モメンタムを追跡する単純なブレークアウト戦略である.この差が構成可能な標準偏差のボリンジャーバンドを突破すると,基礎EMAの方向に基づいてロング/ショート信号が生成される.
戦略は,以下の式で示されているように,変動差を得るために,特別に計算されたEMA指標を2つ使用します.
hJumper = math.max(src,ta.ema(src,lx))
lJumper = math.min(src,ta.ema(src,lx))
dif = (hJumper / lJumper) - 1
この差は急激な価格変動に即座に反応します
diff が上ボリンジャーバンドを超えると,エントリー信号が起動する. diff が中ボリンジャーバンドを下回ると,出口信号が起動する. ベース EMA の方向は,ロングかショートかを決定する.
この戦略の最大の利点は,遅滞なくブレイクシグナルに迅速に対応することです.これは,特別に計算された2つのゼロレイグEMAを使用して達成されます. これにより,戦略は価格ブレイクイベントを即座に把握し,新興トレンドに早期に入ることができます.
また,この戦略の利点は単純さである.この戦略には1つのパラメータlxしかありません.パラメータが少なくなるため,最適化が容易になり,オーバーフィッティングのリスクが軽減されます.
この戦略の主なリスクは,シグナルが誤ったブレイクになる可能性があります. 連続した誤ったブレイクが範囲期間中に起こる可能性があります. このリスクを軽減するために,シグナルをより安定させるためにボリンジャーバンド倍数を増加することができます.
また,不安定な市場において小規模な利益/損失が頻繁に発生するリスクもあります.これは,例えばストップ・ロースまたはテイク・プロフィート価格レベルを設定することによって,退出メカニズムを調整することによって軽減できます.
以下は,この戦略を最適化できるいくつかの方向性です.
入力信号を検証し,誤った信号を減らすためにフィルター指標を追加します.
ストップ・ロスを組み込み 利潤を取って 取引をうまく管理する
取引量の確認を求めます. 取引量の約束なしの偽のブレイクを避けるためです.
市場変動に基づいてパラメータを調整するために適応性ボリンジャー帯を採用する.
機械学習に基づいて パラメータを動的に最適化します
要するに,このゼロレイグ波動性ブレイクアウトEMA戦略は,レイグなしで特別に計算されたEMAを使用して価格の勢いを迅速に把握します.次のステップの最適化には,フィルター,ストップ損失/利益,ボリューム確認などを追加して,戦略を異なる市場環境で堅牢にする可能性があります.
/*backtest start: 2024-01-07 00:00:00 end: 2024-01-14 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © wbburgin //@version=5 strategy("Zero-lag Volatility-Breakout EMA Trend Strategy",overlay=false) tt1 = "If selected, the strategy will not close long or short positions until the opposite signal is received. This"+ " exposes you to more risk but potentially could generate larger returns." src = input.source(close,"Source") lx = input.int(200,"EMA Difference Length") bbmult = input.float(2.0,"Standard Deviation Multiple") useBinaryStrategy = input.bool(true,"Use Binary Strategy",tooltip = tt1) hJumper = math.max(src,ta.ema(src,lx)) lJumper = math.min(src,ta.ema(src,lx)) dif = (hJumper / lJumper) - 1 [bbm,bbu,bbl] = ta.bb(dif,lx,bbmult) plot(dif,color=color.white,title="Zero lag EMA Difference") plot(bbu,color=color.lime,title="Bollinger Top") plot(bbl,color=color.red,title="Bollinger Bottom") plot(bbm,color=color.yellow,title="Bollinger Middle") sigEnter = ta.crossover(dif,bbu) sigExit = ta.crossunder(dif,bbm) emaBase = ta.ema(src,lx) enterLong = sigEnter and emaBase > emaBase[1] enterShort = sigEnter and emaBase < emaBase[1] plotshape(enterLong,style=shape.labelup,location=location.bottom,color=color.green,size=size.tiny) plotshape(enterShort,style=shape.labeldown,location=location.top,color=color.red,size=size.tiny) if enterLong strategy.entry("Long",strategy.long) if enterShort strategy.entry("Short",strategy.short) if not useBinaryStrategy and sigExit strategy.close("Long") strategy.close("Short")