スーパートレンドとCCI戦略による短期取引


作成日: 2024-02-26 10:39:49 最終変更日: 2024-02-26 10:39:49
コピー: 0 クリック数: 927
1
フォロー
1617
フォロワー

スーパートレンドとCCI戦略による短期取引

概要

この戦略は,二つの異なるパラメータセットの超トレンド指標とCCI指標をベースに,短線価格変動を捕捉し,高周波取引を実現することを目的としています.超トレンド指標は,ATRを動的に計算して,価格のトレンド方向を判断します.CCI指標は,市場が超買い超売れているかどうかを判断するために使用されます.戦略は,両者を組み合わせて取引信号を形成します.

戦略原則

  • 14サイクルATRを使用して急速な超トレンドを計算し,設定因子は3; 14サイクルATRを使用して遅い超トレンドを計算し,設定因子は6である.急速な超トレンドはより敏感で,短期的な変化を捉えることができる.遅い超トレンドは主要なトレンド方向を判断する.

  • 急速超トレンドが価格の下を通過し,そして遅い超トレンドが価格上にあるとき,判断可能な反転信号として,多めに; 急速超トレンドが価格上を通過し,そして遅い超トレンドが価格の下にあるとき,判断可能な反転信号として,空っぽに.

  • また,CCIを利用して市場の超買超売状態を判断する.CCIが100時を超えると市場は超買,100時未満になると市場は超売である.CCI信号のフィルタリングと合わさって偽突破である.

  • 超トレンドの指標は,超買いと超売りで反転信号を発信する可能性が高く,これは戦略の核心的な論理である.

優位分析

  • 超トレンド判定のトレンド反転点とCCI判定の超買超売状態を組み合わせて,偽突破を効果的にフィルターして信号の質を向上させることができる.

  • 超トレンドの交差は,取引信号を形成し,高周波の出入りを実現する.

  • CCIのパラメータと超トレンドのパラメータは,異なる市場状況に適応するために柔軟に調整できます.

  • 戦略は明快でわかりやすく,パラメータの調整も簡単です.

リスクと解決策

  • 超トレンド自体は時滞があり,最初の反転の機会を逃す可能性がある。ATR周期を短縮する実験ができる。

  • CCIには逆調整のリスクがあり,波動が大きすぎると重複取引が起こりうる.CCIのパラメータを拡大したり,境界を調整したりすることができる.

  • 高頻度取引は取引頻度や手数料負担を増加させる傾向がある.ポジション保持時間を調整し,平仓の頻度を下げることを推奨している.

思考を最適化する

  • 最大の撤回率や損率などの指標に基づいてパラメータの組み合わせを巡回最適化して,最適なパラメータを探せます.

  • ランダムフォレストのような機械学習の方法と組み合わせて,パラメータに対して特性を選択し,パラメータの自動最適化を可能にします.

  • リスク管理のために,特定の周期で最大開設回数を制限することを探求することができます.

要約する

この戦略は,超トレンド指標を充分活用して短期トレンドの逆転点を判断し,CCI指標のフィルター信号を補足する.パラメータ設定が合理的であれば,高効率のショートライン取引を実現することができる.しかし,あまりにも頻繁な取引がもたらす様々なリスクに警戒する必要もあり,パラメータ調整とアルゴリズム最適化により継続的に改善することで,より良い戦略パフォーマンスを得ることができる.

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

//@version=5
strategy("Supertrend & CCI Strategy Scalp", overlay=true)

// SuperTrend Settings
atrLength1 = input(14, "ATR Length 1")
factor1 = input(3.0, "Factor 1" )
atrLength2 = input(14, "ATR Length 2")
factor2 = input(6.0, "Factor 2")
 // Calculate SuperTrend 1
[superTrend1, direction1] = ta.supertrend(factor1, atrLength1)

// // Calculate SuperTrend 2
[superTrend2, direction2] = ta.supertrend(factor2, atrLength2)

// superTrend1 := barstate.isfirst ? na : superTrend1
// upTrend1 =    plot(direction1 < 0 ? superTrend1 : na, "Up Trend",   color = color.green, style = plot.style_linebr)
// downTrend1 =  plot(direction1 < 0 ? na : superTrend1, "Down Trend", color = color.red,   style = plot.style_linebr)
// bodyMiddle1 = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle",display = display.none)

// fill(bodyMiddle1, upTrend1,   color.new(color.green, 90), fillgaps = false)
// fill(bodyMiddle1, downTrend1, color.new(color.red,   90), fillgaps = false)

// superTrend2 := barstate.isfirst ? na : superTrend2
// upTrend2 =    plot(direction1 < 0 ? superTrend2 : na, "Up Trend",   color = color.green, style = plot.style_linebr)
// downTrend2 =  plot(direction1 < 0 ? na : superTrend2, "Down Trend", color = color.red,   style = plot.style_linebr)
// bodyMiddle2 = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle",display = display.none)

// fill(bodyMiddle2, upTrend2,   color.new(color.green, 90), fillgaps = false)
// fill(bodyMiddle2, downTrend2, color.new(color.red,   90), fillgaps = false)
// CCI Settings
//cciLength = input.int(14, title="CCI Length")
cciLevel = input.int(100, title="CCI Level")

// Calculate CCI
length = input.int(20, minval=1)
src = input(hlc3, title="Source")
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))
//plot(cci, "CCI", color=#2962FF)
//band1 = hline(100, "Upper Band", color=#787B86, linestyle=hline.style_dashed)
//hline(0, "Middle Band", color=color.new(#787B86, 50))
//band0 = hline(-100, "Lower Band", color=#787B86, linestyle=hline.style_dashed)
//fill(band1, band0, color=color.rgb(33, 150, 243, 90), title="Background")

ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
smoothingLength = input.int(title = "Length", defval = 5, minval = 1, maxval = 100, group="Smoothing")

smoothingLine = ma(cci, smoothingLength, typeMA)
//plot(smoothingLine, title="Smoothing Line", color=#f37f20, display=display.none)


// Entry conditions
longCondition = superTrend1 > close and superTrend2 < close and smoothingLine < -100
shortCondition = superTrend1 < close and superTrend2 > close and smoothingLine > 100

/// Initialize variables to track trade direction
var bool isLong = na
var bool isShort = na

// Strategy entry and exit
if (longCondition)
    strategy.entry("Long", strategy.long)
    isLong := true
    isShort := false
    
if (shortCondition)
    strategy.entry("Short", strategy.short)
    isShort := true
    isLong := false

// Close Long positions
if (isLong)
    strategy.close("Long", when = superTrend1 < close or superTrend2 > close or cci > 100)

// Close Short positions
if (isShort)
    strategy.close("Short", when = superTrend1 > close or superTrend2 < close or cci < -100)



// Plotting
plot(superTrend1, color=color.blue, title="SuperTrend 1")
plot(superTrend2, color=color.red, title="SuperTrend 2")
//plot(cci, color=color.orange, title="CCI")