この戦略は,クラシックなコモディティチャネルインデックス (CCI) に基づいており,長期間のみ行われます.CCI指標が非常に低いレベル (CCI <-150またはユーザー定義の
ストップ・ロスは,価格がCCI上位帯を超えると終了する.
目標としては,トレンドの全期間を把握するのではなく,収益性の高い取引率 (50%以上) を達成することである.したがって,潜在的な損失を嫌う人々には適している.
ta.sma() を使ってCCIインジケーターと帯を構成し,ta.dev() 関数
バックテストの開始日を選択するために入力を使用します.
入力信号:CCIは下帯を下を通過し,増加し始めます.追加のフィルターは0.25%閉じて開く必要があります.
出口1:CCIが上位帯を超え,利益を得る
エグジット2 ストップ・ロスの値を下回る ストップ・ロスの値を下回る
戦略はCCIの強みに 基づいて リスク管理のために 立ち止まるだけです
この戦略には以下の利点があります.
CCIで買い過ぎ/売り過ぎを特定し,逆転を資本化します.
長期指向だけが 悪い取引による過剰なリスクを回避します
価格強度フィルターは,入場前に形成されたサポートを保証します.
ストップ・ロスのメカニズムは,取引損失を制限し,資本を管理します.
柔軟なバックテストパラメータで 入力フィルターを調整できます
高利回率はリスク管理を重視する投資家に適しています
明確な論理とシンプルな実装
リスクもあります:
短期的な下落傾向を見逃すかもしれません
CCI パラメーターの調節が不十分なら 失敗する
ストップ・ロスは負荷を制限できない
強い上昇傾向がストップを突破し 大きな損失を引き起こします
高い取引頻度は 取引コストを増加させます
可能な解決策:
最適値を見つけるために CCI パラメータを最適化する.
ストップ・ロスを調整してリスクとスライドをバランスする.
コストを考慮して入力の頻度を管理する
トレンドとレンジフィルターと組み合わせます
戦略を改善する方法:
市場変動に基づいて 動的ストップを導入する
ストップが幅が大きすぎないように MACD のようなフィルターを追加します
CCIが過熱すると ショートサイドを組み込む
費用を考慮し 最低利益目標を設定します
時間枠のパラメータを最適化
自動パラメータ調整のための機械学習です
ダイナミックアロケーションのための位置サイズを追加します.
概要すると,このロングストップ戦略は,価格強度フィルターとストップ損失を備えたCCIオーバーバイト/オーバーセールレベルをキャピタライズする.容易な実装,良いリスク制御,高い勝利率を提供しています.ロングストップと固定ストップの限界は,パラメータ最適化,ショートエントリー,ダイナミックストップなどを通じて解決できます.この戦略は,高い勝利率と適切なリスク管理を求める投資家に適しています.
/*backtest start: 2022-11-08 00:00:00 end: 2023-11-14 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title='CCI High Performance long only', overlay=false ) src = input(close) length = input.int(20, title='Period', minval=1) lossp = input.float(8, title='Stop Loss percentage', minval=0.5, step=0.5) scart = input.float(0.25, title='Close of the signal bar higher than Open %', minval = 0) upperline = input.int(150, title='Upper Band', minval=0, step=10) lowline = input.int(-150, title='Low Band', maxval=0, step=10) // construction of CCI (not on close but in totalprice) and of bands ma = ta.sma(src, length) cci = (src - ma) / (0.015 * ta.dev(src, length)) plot(cci, 'CCI', color=color.new(#996A15, 0)) band1 = hline(upperline, 'Upper Band', color=#C0C0C0, linestyle=hline.style_dashed) band0 = hline(lowline, 'Lower Band', color=#C0C0C0, linestyle=hline.style_dashed) fill(band1, band0, color=color.new(#9C6E1B, 90), title='Background') // === INPUT BACKTEST RANGE === fromMonth = input.int(defval = 1, title = "From Month", minval = 1, maxval = 12) fromDay = input.int(defval = 1, title = "From Day", minval = 1, maxval = 31) fromYear = input.int(defval = 2016, title = "From Year", minval = 1970) thruMonth = input.int(defval = 1, title = "Thru Month", minval = 1, maxval = 12) thruDay = input.int(defval = 1, title = "Thru Day", minval = 1, maxval = 31) thruYear = input.int(defval = 2112, title = "Thru Year", minval = 1970) // === FUNCTION EXAMPLE limit for backtest === start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window window() => time >= start and time <= finish ? true : false // create function "within window of time" //ENTRY CONDITIONS // strategy: enter when CCI is under the low line and starts increasing. The filter is that the signal candle should mark a close higher than a x-percent // (0.25%) of the open // Exit when either when it reaches the target of a prices highest than high level of CCI or fixed stop loss (in percentage) scart_level = open * (1+scart/100) entryl = cci[1] < lowline[1] and cci > cci[1] and close > scart_level and window() exit1 = cci> upperline strategy.entry('Long', strategy.long, when=entryl) strategy.close('Long', when=exit1, comment='target') // money management (only stop loss) losspel = strategy.position_avg_price * (1 - lossp / 100) fixed_stop_long = close < losspel strategy.close('Long', when=fixed_stop_long, comment='Stop Loss')