ドンチアン・チャネル ストップ・ロスト戦略

作者: リン・ハーンチャオチャン, 日付: 2023-12-07 16:53:10
タグ:

img

概要

これは,ドンチアンチャンネル指標に基づくトレンドフォロー戦略であり,ATR指標に基づくダイナミックストップ損失と組み合わせて利益をロックします.これはトレンドフォロー戦略カテゴリーに属します.

戦略の論理

この戦略は20期ドンチアンチャネルを使用し,チャネルミッドラインは最高高と最低低の平均値である.価格がチャネルミッドラインを超えるとロングになり,価格がミッドラインを下回るとショートになる.出口ルールは,価格がダイナミックストップロスのラインに触るとロングポジションのATR値の3分の1をマイナスした最近の3バーの最低値,ショートポジションのATR値の3分の1をプラスした最近の3バーの最高値として計算される.

利点分析

この戦略の主な利点は以下の通りです.

  1. ドンチアン・チャネルは 市場の動向を特定し,動向を把握する上で有効です
  2. ATRに基づく動的ストップロスは,リスクをコントロールしながら利益を固定します.
  3. ストップ・ロスの計算にATRファクタを組み込むと,市場の変動が考慮されるので,ストップはより合理的です.
  4. ストップロスの計算方法は安定して信頼性があり,ストップがあまりにも近くなって早めに停止されないようにします.

リスク分析

この戦略の主なリスクは以下のとおりです.

  1. ドンチアン運河は 遅延効果があり 短期的な機会を逃す可能性があります
  2. ATRパラメータの設定が正しくない場合,ストップ損失が幅が大きくすぎたり,近くすぎたりする可能性があります.
  3. トレンド決定メカニズムは比較的シンプルで,市場の整合中により多くの誤った信号を生む可能性があります.
  4. 効果的なサポート/レジスタンスの判断が欠如し,市場参入のタイミングが不適切になる.

オプティマイゼーションの方向性

この戦略の最適化の方向性:

  1. 明確なトレンドがない場合,頻繁に取引を避けるために他の指標を追加します.
  2. サポート/レジスタンス判断を追加して 入場タイミングを最適化します
  3. ストップロスの戦略をさらに最適化するために,他のダイナミックストップロスの計算方法をテストする.
  4. ドンチアン運河の異なるパラメータが戦略の業績に与える影響をテストする.
  5. 偽信号を減らすために 音量や増幅にフィルターを追加します

結論

トレンドフォロー戦略とは,トレンドフォロー戦略を定義し,ダイナミックなストップ・ロストで利益を固定する.この戦略は,非常に実践的な使用方法であるが,より複雑な市場環境においてより優れたパフォーマンスを獲得するために様々な方法でさらに最適化することができる.


/*backtest
start: 2023-11-29 00:00:00
end: 2023-12-06 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title = "dc",  overlay = true)
atrLength = input(title="ATR Length:", defval=20, minval=1)

testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testEndYear = input(2018, "Backtest Start Year")
testEndMonth = input(12)
testEndDay = input(31, "Backtest Start Day")
testPeriodEnd = timestamp(testEndYear,testEndMonth,testEndDay,0,0)


testPeriod() =>
    true
    //time >= testPeriodStart  ? true : false

dcPeriod = input(20, "Period")

dcUpper = highest(close, dcPeriod)[1]
dcLower = lowest(close, dcPeriod)[1]
dcAverage = (dcUpper + dcLower) / 2
atrValue=atr(atrLength)


useTakeProfit   = na
useStopLoss     = na
useTrailStop    = na
useTrailOffset  = na
//@version=1
Buy_stop = lowest(low[1],3) - atr(20)[1] / 3
plot(Buy_stop, color=red, title="buy_stoploss")
Sell_stop = highest(high[1],3) + atr(20)[1] / 3
plot(Sell_stop, color=green, title="sell_stoploss")

plot(dcLower, style=line, linewidth=3, color=red, offset=1)
plot(dcUpper, style=line, linewidth=3, color=aqua, offset=1)

plot(dcAverage, color=black, style=line, linewidth=3, title="Mid-Line Average")

strategy.entry("simpleBuy", strategy.long, when=(close > dcAverage) and cross(close,dcAverage))
strategy.close("simpleBuy",when= ( close< Buy_stop))
    
strategy.entry("simpleSell", strategy.short,when=(close < dcAverage) and cross(close,dcAverage) )
strategy.close("simpleSell",when=( close > Sell_stop))
    
//strategy.exit("Exit simpleBuy", from_entry = "simpleBuy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
//strategy.exit("Exit simpleSell", from_entry = "simpleSell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)



もっと