スーパートレンド・デュアル・ムービング・アベア戦略は,スーパートレンド指標とシンプル・ムービング・アベアをベースとした定量的な取引戦略である.この戦略は,スーパートレンド指標を使用して市場のトレンドの方向性を決定し,その後,主要トレンド方向に沿ってロングとショートポジションを開くフィルタリングのために200日間のシンプル・ムービング・アベアを組み合わせる.
戦略は2つの指標を使用しています.
スーパートレンドインジケーター: 真の変動ATRと倍数値に基づいて上下レールを計算する. 閉値が上下レールより高い場合,上昇傾向を示します. 下下レールより低い場合,下落傾向を示します.
200日間のシンプル・ムービング・アベア:過去200日間の閉店価格の算術平均を取ります.閉店価格がこの線を超えると,大きな上昇傾向を表します.この線を下回ると,大きな下落傾向を表します.
戦略論理:
超トレンド指標が上昇信号 (超トレンド値が0以上) を与え,閉じる価格が200日間のMAよりも高くなった場合,ロングします.
超トレンド指標が下落信号 (超トレンド値が0未満) を示し,閉じる価格が200日間MAより低い場合,ショートします.
スーパートレンドインジケーターが前回と対照的に反転信号を出すとポジションを閉じる.
ストップ・ロスは25%です
この戦略は,短期トレンドを決定するためにスーパートレンド指標と,長期トレンドを決定するために200日MAを組み合わせ,偽のブレイクを効果的にフィルタリングし,勝利率を改善しながら取引頻度を減らすことができます. 有意な市場トレンドでは,トレンドは大きなストップ損失スペースと利益目標で十分に明確です.
この戦略の主なリスクは,ストップロスの範囲が比較的大きいことである.高レバレッジ状況では強制清算のリスクを増加させる可能性がある.また,市場は範囲に制限されている場合,スーパートレンド指標は冗長な信号を生成し,取引コストと取引頻度を増加させる.
リスクは,ATR期間,倍数パラメータ,ストップ損失範囲を適切に調整することによって軽減できます.
戦略は以下の側面で最適化できます.
超トレンド指標を最適化するために,ATR期間と倍数パラメータを調整する.
EMA や VIDYA のような他の MA インジケーターを試してください.
さらに信号フィルタリングのために,BOLLチャンネルやKD指標などの他の補助指標を追加する.
ストップ・ロスの戦略を最適化します. 例えば,ストップ・ロスはブレイク・イブポイントやトライリング・ストップに移動し,より高いタイムフレームレベルを設定します.
この戦略は,短期的なトレンド判断と長期的トレンド判断の両方を考慮し,合理的なストップロスト設定で,パラメータ調整と最適化によってより良い結果を達成することができます.これは実際の取引検証と適用に価値がある.
/*backtest start: 2023-12-16 00:00:00 end: 2024-01-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/ // © wielkieef //@version=5 strategy("Smart SuperTrend Strategy ", shorttitle="ST Strategy", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=25, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.01) // Parametry wskaźnika SuperTrend atrLength = input(10, title="Lenght ATR") factor = input(3.0, title="Mult.") // Parametry dla SMA lengthSMA = input(200, title="Lenght SMA") // Parametry dla Stop Loss sl = input.float(25.0, '% Stop Loss', step=0.1) // Obliczanie ATR atr = ta.atr(atrLength) // Obliczanie podstawowej wartości SuperTrend up = hl2 - (factor * atr) dn = hl2 + (factor * atr) // Obliczanie 200-SMA sma200 = ta.sma(close, lengthSMA) // Inicjalizacja zmiennych var float upLevel = na var float dnLevel = na var int trend = na var int trendWithFilter = na // Logika SuperTrend upLevel := close[1] > upLevel[1] ? math.max(up, upLevel[1]) : up dnLevel := close[1] < dnLevel[1] ? math.min(dn, dnLevel[1]) : dn trend := close > dnLevel[1] ? 1 : close < upLevel[1] ? -1 : nz(trend[1], 1) // Filtr SMA i aktualizacja trendWithFilter trendWithFilter := close > sma200 ? math.max(trend, 0) : math.min(trend, 0) // Logika wejścia longCondition = trend == 1 shortCondition = trend == -1 // Wejście w pozycje if (longCondition) and close > sma200 strategy.entry("Long", strategy.long) if (shortCondition) and close < sma200 strategy.entry("Short", strategy.short) // Warunki zamknięcia pozycji Long_close = trend == -1 and close > sma200 Short_close = trend == 1 and close < sma200 // Zamknięcie pozycji if (Long_close) strategy.close("Long") if (Short_close) strategy.close("Short") // Kolory superTrendu z filtrem sma200 trendColor = trendWithFilter == 1 ? color.green : trendWithFilter == -1 ? color.red : color.blue //ploty plot(trendWithFilter == 1 ? upLevel : trendWithFilter == -1 ? dnLevel : na, color=trendColor, title="SuperTrend") // Stop Loss ( this code is from author RafaelZioni, modified by wielkieef ) per(procent) => strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na) // -------------------------------------------------------------------------------------------------------------------- strategy.exit('SL',loss=per(sl)) //by wielkieef