セントラルギャップとトレンドフォロー取引戦略


作成日: 2023-10-25 18:02:11 最終変更日: 2023-10-25 18:02:11
コピー: 1 クリック数: 667
1
フォロー
1617
フォロワー

セントラルギャップとトレンドフォロー取引戦略

概要

この戦略は,CCI指数と動力指数とRSI指数を組み合わせて市場トレンドを識別し,超買超売区が空飛ぶ現象を発見したときに入場し,ブリンを活用してトレンドを識別し,中央に戻ります. この戦略は,トレンドの開始段階で,突破と回調を効果的に識別し,入場し,パラメータによって異なる品種に自由に適応する取引を調整できます.

戦略原則

まず,戦略は,CCI指数または動量指数のゼロ軸上穿越とゼロ軸下穿越によって買入と売却のシグナルを判断する.同時に,RSI指数が超買超出ゾーンにあることを要求する.すなわち,RSIが65を超えると超買ゾーン,35を超えると超売ゾーンである.このようにして,超買超出ゾーンでないときに誤ったシグナルを発信することを避ける.

また,戦略は,RSIのブルイッシュ・ディバージェンスを判断するか否かを選択し,買い/売却の信号がより信頼性のあるようにします.

CCIまたは動力の買入シグナルに合致し,RSIが超売り領域にあるとき,戦略は,前高と低がブリン帯の中心部上にあるかどうかを判断し,そうであれば買入シグナルを生成する.逆に,出売シグナルに合致し,前高低がブリン帯の中心部下にあるとき,出売シグナルを生成する.

このように,戦略はトレンド指数と震動指数を同時に利用し,トレンドが始まるときに間に合うように捕捉し,中央判断を使用して偽の突破を避けることができます.価格がブリン帯から下向きに走る時,戦略は利益をロックし,引き下げの拡大を防ぐために全平になります.

優位分析

  1. トレンド指数とショッキング指数の組み合わせにより,トレンドの開始時に入場し,ショッキング市場での無駄なポジションを避ける

  2. ブリン帯の枢結合跳びを入口信号として利用し,偽突破を効果的にフィルターする.

  3. RSI指標の過去の動きを振り返り,誤った取引信号を避けるために

  4. 完全自動化,人工操作なし,アルゴリズムによる取引に適した取引

  5. 戦略のパラメータは,異なる取引品種に合わせて自由に調整できます.

  6. ストップ・ストップを設定し,リスクを効果的にコントロールできます.

リスク分析

  1. ブリン帯のパラメータを正しく設定しない場合,中央判断が失効する可能性があります.

  2. 指数パラメータが正しく設定されていないため,誤った信号が多く発生する可能性があります

  3. 突破は失敗し,価格が再びブリン帯の中央に回転する際に,時効的なストップダストが必要となる.

  4. 取引品の流動性が低い場合,ブレイクアウトはうまくいかない

  5. 取引前に,過去データが充実しているかどうかを確認し,曲線の不適合を避ける

  6. 取引のタイミングに注意し,偽の突破を避ける

最適化の方向

  1. ブリン帯のパラメータを最適化して,中枢をより安定させる

  2. 異なる品種に対する異なる指標パラメータの効果をテストする

  3. 取引量管理を強化し,単一のポジションを過大にしないこと

  4. 時間の判断を増やして,主要取引時間に操作する

  5. 機械学習のアルゴリズムを追加し,信号をより賢くする

  6. 市場全体の動向を判断するためのデータ源の拡大

  7. さらに多くの指標を統合し,指標の組み合わせを形成する

要約する

この戦略は,トレンド指数と振動指数を統合し,トレンドが始まるときに市場に参入することができる.同時に,ブリン帯の枢結合空飛ぶを入場信号として利用し,偽突破を効果的に回避することができる.戦略のパラメータは,異なる品種に適応し,反測効果を最適に調整することができる.次のステップは,最適化パラメータ設定とモデル融合により,戦略をより安定して信頼性のあるものにするため,長期にわたって安定した超利益を得ることができる.

ストラテジーソースコード
/*backtest
start: 2022-10-18 00:00:00
end: 2023-10-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='BroTheJo Strategy', shorttitle='BTJ', overlay=true)

// Input settings
ccimomCross = input.string('CCI', 'Entry Signal Source', options=['CCI', 'Momentum'])
ccimomLength = input.int(10, minval=1, title='CCI/Momentum Length')
useDivergence = input.bool(false, title='Find Regular Bullish/Bearish Divergence')
rsiOverbought = input.int(65, minval=1, title='RSI Overbought Level')
rsiOversold = input.int(35, minval=1, title='RSI Oversold Level')
rsiLength = input.int(14, minval=1, title='RSI Length')
plotMeanReversion = input.bool(true, 'Plot Mean Reversion Bands on the chart')
emaPeriod = input(200, title='Lookback Period (EMA)')
bandMultiplier = input.float(1.6, title='Outer Bands Multiplier')

// CCI and Momentum calculation
momLength = ccimomCross == 'Momentum' ? ccimomLength : 10
mom = close - close[momLength]
cci = ta.cci(close, ccimomLength)
ccimomCrossUp = ccimomCross == 'Momentum' ? ta.cross(mom, 0) : ta.cross(cci, 0)
ccimomCrossDown = ccimomCross == 'Momentum' ? ta.cross(0, mom) : ta.cross(0, cci)

// RSI calculation
src = close
up = ta.rma(math.max(ta.change(src), 0), rsiLength)
down = ta.rma(-math.min(ta.change(src), 0), rsiLength)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down)
oversoldAgo = rsi[0] <= rsiOversold or rsi[1] <= rsiOversold or rsi[2] <= rsiOversold or rsi[3] <= rsiOversold
overboughtAgo = rsi[0] >= rsiOverbought or rsi[1] >= rsiOverbought or rsi[2] >= rsiOverbought or rsi[3] >= rsiOverbought

// Regular Divergence Conditions
bullishDivergenceCondition = rsi[0] > rsi[1] and rsi[1] < rsi[2]
bearishDivergenceCondition = rsi[0] < rsi[1] and rsi[1] > rsi[2]

// Mean Reversion Indicator
meanReversion = plotMeanReversion ? ta.ema(close, emaPeriod) : na
stdDev = plotMeanReversion ? ta.stdev(close, emaPeriod) : na
upperBand = plotMeanReversion ? meanReversion + stdDev * bandMultiplier : na
lowerBand = plotMeanReversion ? meanReversion - stdDev * bandMultiplier : na

// Entry Conditions
prevHigh = ta.highest(high, 1)
prevLow = ta.lowest(low, 1)
longEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition) and (prevHigh >= meanReversion) and (prevLow >= meanReversion)
shortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition) and (prevHigh <= meanReversion) and (prevLow <= meanReversion)

// Plotting
oldLongEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition)
oldShortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition)
plotshape(oldLongEntryCondition, title='BUY', style=shape.triangleup, location=location.belowbar, color=color.new(color.lime, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(oldShortEntryCondition, title='SELL', style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)

// Strategy logic
if (longEntryCondition)
    strategy.entry("Buy", strategy.long)
if (shortEntryCondition)
    strategy.entry("Sell", strategy.short)

// Close all open positions when outside of bands
closeAll = (high >= upperBand) or (low <= lowerBand)

if (closeAll)
    strategy.close_all("Take Profit/Cut Loss")


// Plotting
plot(upperBand, title='Upper Band', color=color.fuchsia, linewidth=1)
plot(meanReversion, title='Mean', color=color.gray, linewidth=1)
plot(lowerBand, title='Lower Band', color=color.blue, linewidth=1)