価格格差とトレード戦略の傾向

作者: リン・ハーンチャオチャン開催日:2023年10月25日 18:02:11
タグ:

img

概要

この戦略は,CCI指標とモメントインジケーターをRSI指標と組み合わせて,市場のトレンドを特定し,オーバーバイト/オーバーセールゾーンにギャップが現れるときに入力する.また,トレンドと平均リバーション範囲を認識するためにボリンジャーバンドを使用する.この戦略は,ブレイクアウトとプルバックを効果的に特定し,トレンド開始の早期に入れて,パラメータを調整することによって異なる製品に適応することができます.

戦略の論理

第一に,戦略は,CCI指標やモメント指標によって 0線以上/下を横断する長信号と短信号を決定する.また,誤った信号を避けるために,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)

もっと