
この戦略は,商品通路指数 (CCI) をベースに,オーバーセール時にオーバー,オーバーバイ時にオフを打つように設計されている.また,指数移動平均 (EMA) フィルターを選択的に使用して,トレンド方向のみの取引を制御する.この戦略は,固定パーセントまたは平均リアルレンジ (ATR) に基づくストップ・ロスを提供する.
CCIの指標を使って市場動向を判断する
CCIは,現在の価格と一定の期間の平均価格を比較して動力を測定します.
CCI above 150はオーバーバイ,Below -100はオーバーセール
選択的にEMAフィルターを使用
価格がEMAより高い場合にのみ追加し,価格がEMAより低い場合に空白します.
EMAでトレンドの方向を判断し,反トレンド取引を避ける
2種類の止損対策が提供されています
固定パーセントに基づくストップ・ストップ:入場価格の固定パーセントを使用してストップ・ストップを設定する
ATR ベースのストップ:ATR の倍数を使ってストップを設定し,リスク・リターン比率に基づいてストップを計算する
入学条件
CCIは100線を突破する
CCIの下の150線を横切るときに空席
EMAを有効にすると,価格がEMAより高く,価格がEMAより低い場合は空白します.
出場条件
価格がストップ・ロープに達した.
CCIが超買超売領域に再入った時,平仓
地図
CCIは,CCI指標の古典的な使い方である,超買いと超売りを判断するために使用されます.
オプションのEMAは,トレンド方向のみで取引を保証し,逆転を回避します.
2つのストップ・ストップ方式が提供され,ストップ・ストップのパラメータは市場に応じて調整できます.
CCIの指数で再び超買超売り領域に入ると,トレンド逆転の利益をロックできる
CCI信号を強調した図で読みやすい.
戦略の論理は明確でシンプルで,理解しやすく最適化できます.
CCIの指標が遅れているため,反転を逃したり,偽信号を生成したりする可能性があります.
EMAのパラメータを正しく設定しない場合,トレンドを逃すか,戦略を無効にすることができます.
パーセンテージ・ストップ・ストップは,市場変化に適応し難い,より広いパラメータを想定する
ATR 止損停止は間隔周期に敏感で,最適なパラメータに調整する
撤回リスクが高いため,ポジション管理を適切に調整する
効果 市場環境の変化に応じて指標のパラメータを適時評価する
異なる周期のCCIパラメータを評価し,最適なパラメータの組み合わせを見つける
異なるEMAサイクルをテストし,最も適切なトレンド判断サイクルを決定する
ストップ・ストップ・パラメータを調整して,最適のリスク・利益の比率を得ます.
取引量などの他のフィルター条件を追加し,偽信号をさらにフィルターします.
トレンドラインやグラフを組み合わせて形状判断を行い,効果を高める.
ポジション管理策の追加,例えばポジション固定,撤回リスクを制御する
市場環境のデータと動的調整パラメータを全面的に回測する
この戦略は,CCI指標のクラシックオーバーバイオーバーセール原理を適用して入場する.EMAフィルターを追加してトレンドの方向を制御できる.二つのストップ・ストップの方法を提供して調節を容易にする.突出信号の読みやすい図を描く.戦略ロジックはシンプルで明確で,理解しやすく,最適化できる.パラメータの調整,フィルター条件の追加,リスク管理などによって効果をさらに向上させることができる.
/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © alifer123
//@version=5
// strategy("CCI+EMA Strategy with Percentage or ATR TP/SL [Alifer]", shorttitle = "CCI_EMA_%/ATR_TP/SL", overlay=false,
// initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.045)
length = input(14, "CCI Length")
overbought = input.int(150, step = 10, title = "Overbought")
oversold = input.int(-140, step = 10, title = "Oversold")
src = hlc3
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))
// EMA
useEMA = input(true, "Use EMA", tooltip = "Only enters long when price is above the EMA, only enters short when price is below the EMA")
emaLength = input(55, "EMA Length")
var float ema = na
if useEMA
ema := ta.ema(src, emaLength)
// Take Profit and Stop Loss Method
tpSlMethod_percentage = input(true, "Percentage TP/SL", group="TP/SL Method")
tpSlMethod_atr = input(false, "ATR TP/SL", group="TP/SL Method")
// Percentage-based Take Profit and Stop Loss
tp_percentage = input.float(10.0, title="Take Profit (%)", step=0.1, group="TP/SL Method")
sl_percentage = input.float(10.0, title="Stop Loss (%)", step=0.1, group="TP/SL Method")
// ATR-based Take Profit and Stop Loss
atrLength = input(20, title="ATR Length", group="TP/SL Method")
atrMultiplier = input(4, title="ATR SL Multiplier", group="TP/SL Method")
riskRewardRatio = input(2, title="Risk Reward Ratio", group="TP/SL Method")
// Calculate TP/SL levels based on the selected method, or leave them undefined if neither method is selected
longTP = tpSlMethod_percentage ? strategy.position_avg_price * (1 + tp_percentage / 100) : na
longSL = tpSlMethod_percentage ? strategy.position_avg_price * (1 - sl_percentage / 100) : na
shortTP = tpSlMethod_percentage ? strategy.position_avg_price * (1 - tp_percentage / 100) : na
shortSL = tpSlMethod_percentage ? strategy.position_avg_price * (1 + sl_percentage / 100) : na
if tpSlMethod_atr
longSL := strategy.position_avg_price - ta.atr(atrLength) * atrMultiplier
longTP := ((strategy.position_avg_price - longSL) * riskRewardRatio) + strategy.position_avg_price
shortSL := strategy.position_avg_price + ta.atr(atrLength) * atrMultiplier
shortTP := ((strategy.position_avg_price - shortSL) * riskRewardRatio) - strategy.position_avg_price
// Enter long position when CCI crosses below oversold level and price is above EMA
longCondition = ta.crossover(cci, oversold) and (not useEMA or close > ema)
if longCondition
strategy.entry("Buy", strategy.long)
// Enter short position when CCI crosses above overbought level and price is below EMA
shortCondition = ta.crossunder(cci, overbought) and (not useEMA or close < ema)
if shortCondition
strategy.entry("Sell", strategy.short)
// Close long positions with Take Profit or Stop Loss
if strategy.position_size > 0
strategy.exit("Long Exit", "Buy", limit=longTP, stop=longSL)
// Close short positions with Take Profit or Stop Loss
if strategy.position_size < 0
strategy.exit("Short Exit", "Sell", limit=shortTP, stop=shortSL)
// Close positions when CCI crosses back above oversold level in long positions or below overbought level in short positions
if ta.crossover(cci, overbought)
strategy.close("Buy")
if ta.crossunder(cci, oversold)
strategy.close("Sell")
// Plotting
color_c = cci > overbought ? color.red : (cci < oversold ? color.green : color.white)
plot(cci, "CCI", color=color_c)
hline(0, "Middle Band", color=color.new(#787B86, 50))
obband = hline(overbought, "OB Band", color=color.new(#78867a, 50))
osband = hline(oversold, "OS Band", color=color.new(#867878, 50))
fill(obband, osband, color=color.new(#787B86, 90))