CCI 強力な突破戦略

作者: リン・ハーンチャオチャン,日付: 2023年11月15日 16:52:06
タグ:

img

概要

この戦略は,クラシックなコモディティチャネルインデックス (CCI) に基づいており,長期間のみ行われます.CCI指標が非常に低いレベル (CCI <-150またはユーザー定義の値) に到達し,価格の"強度"をフィルターでフィルターで,市場に戻ります (つまり,シグナルバーの閉じる値は,開く時点から一定差 (0.25%で決まる) よりも高くなければなりません).

ストップ・ロスは,価格がCCI上位帯を超えると終了する.

目標としては,トレンドの全期間を把握するのではなく,収益性の高い取引率 (50%以上) を達成することである.したがって,潜在的な損失を嫌う人々には適している.

戦略の論理

  1. ta.sma() を使ってCCIインジケーターと帯を構成し,ta.dev() 関数

  2. バックテストの開始日を選択するために入力を使用します.

  3. 入力信号:CCIは下帯を下を通過し,増加し始めます.追加のフィルターは0.25%閉じて開く必要があります.

  4. 出口1:CCIが上位帯を超え,利益を得る

  5. エグジット2 ストップ・ロスの値を下回る ストップ・ロスの値を下回る

  6. 戦略はCCIの強みに 基づいて リスク管理のために 立ち止まるだけです

利点分析

この戦略には以下の利点があります.

  1. CCIで買い過ぎ/売り過ぎを特定し,逆転を資本化します.

  2. 長期指向だけが 悪い取引による過剰なリスクを回避します

  3. 価格強度フィルターは,入場前に形成されたサポートを保証します.

  4. ストップ・ロスのメカニズムは,取引損失を制限し,資本を管理します.

  5. 柔軟なバックテストパラメータで 入力フィルターを調整できます

  6. 高利回率はリスク管理を重視する投資家に適しています

  7. 明確な論理とシンプルな実装

リスク分析

リスクもあります:

  1. 短期的な下落傾向を見逃すかもしれません

  2. CCI パラメーターの調節が不十分なら 失敗する

  3. ストップ・ロスは負荷を制限できない

  4. 強い上昇傾向がストップを突破し 大きな損失を引き起こします

  5. 高い取引頻度は 取引コストを増加させます

可能な解決策:

  1. 最適値を見つけるために CCI パラメータを最適化する.

  2. ストップ・ロスを調整してリスクとスライドをバランスする.

  3. コストを考慮して入力の頻度を管理する

  4. トレンドとレンジフィルターと組み合わせます

増進 の 機会

戦略を改善する方法:

  1. 市場変動に基づいて 動的ストップを導入する

  2. ストップが幅が大きすぎないように MACD のようなフィルターを追加します

  3. CCIが過熱すると ショートサイドを組み込む

  4. 費用を考慮し 最低利益目標を設定します

  5. 時間枠のパラメータを最適化

  6. 自動パラメータ調整のための機械学習です

  7. ダイナミックアロケーションのための位置サイズを追加します.

結論

概要すると,このロングストップ戦略は,価格強度フィルターとストップ損失を備えた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')



もっと