サムスガ スーパートレンドMACD戦略

作者: リン・ハーンチャオチャン開催日:2024年3月11日 11:24:20
タグ:

img

概要

この戦略は,スーパートレンド指標とMACD指標を組み合わせて,利益を得るために小さなトレンドを把握する.現在の市場傾向とMACD指標をエントリーと出口のための補助条件として決定するためにスーパートレンド指標を使用する.戦略論理は明確で理解し実行するのが簡単です.

戦略原則

  1. ta.supertrend関数を使用して,ATR期間のパラメータと倍数因数を含むSuperTrend指標を計算します.
  2. 超トレンド指標の方向の変化に基づいて,長/短トレンドを決定する.方向が0より大きくて0未満または0に変化すると,上向きトレンドとみなされ,そうでなければ,下向きトレンドとみなされます.
  3. request.security関数を使用して,MACD線,信号線,ヒストグラムを含む30分間の時間枠におけるMACD指標値を取得します.
  4. 上昇傾向の場合,MACDヒストグラムが0を超えると,ロングポジションを開き,以前のショートポジションを閉じる.
  5. ダウントレンドでは,MACDヒストグラムが0未満であれば,ショートポジションを開き,以前のロングポジションを閉じる.

利点分析

  1. トレンドフォローとモメントインジケーターを組み合わせて,異なる市場状況にうまく適応できるようにします.
  2. より長いタイムフレームのMACDインジケーターを補助条件として使用し,誤った信号を効果的にフィルタリングすることができます.
  3. 戦略の論理はシンプルで直ぐで 理解し実行しやすいし 初心者が学ぶのに適しています
  4. 戦略パラメータは調整可能で,異なる市場や道具に最適化できます.

リスク分析

  1. この戦略は,不安定な市場で頻繁に取引信号を生成し,高い取引頻度とスライプコストを引き起こす可能性があります.
  2. スーパートレンド指標はパラメータ設定に敏感で,異なるパラメータ値は異なる結果を生む可能性があります.
  3. MACD インジケーターは価格から逸脱し,誤った取引信号が生じる可能性があります.
  4. 戦略にはストップ・ロスの対策がないため,傾向の継続性や予期せぬ出来事の弱さによりリスクが高まる可能性があります.

最適化方向

  1. 信号の信頼性を向上させるために,重要なサポート/レジスタンスレベルを通過する価格,取引量の変化など,より多くのフィルタリング条件を追加することを検討する.
  2. 波動性のある市場では,より短い時間枠のMACD指標または範囲限定市場に適した他の指標を使用してトレンドを決定することを検討してください.
  3. 取引ごとに最大リスクを制御するために,固定ポイントストップ損失,トラッキングストップ損失などストップ損失対策を組み込む.
  4. パラメータを最適化し,最も適切なパラメータの組み合わせを見つけます.

結論

この戦略は,スーパートレンドインジケーターとMACDインジケーターを組み合わせることで,トレンド連続性を考慮しながら,小さなトレンドを把握し,比較的包括的でバランスの取れた戦略となっています.この戦略の強みは,明確な論理,理解し実行しやすさ,および誤ったシグナルを効果的にフィルタリングするための補助条件として,より長いタイムフレームMACDインジケーターの使用にあります.しかし,この戦略には,不安定な市場で頻繁な取引の可能性,パラメータ設定に対する敏感性,ストップロスの対策の欠如などのいくつかのリスクもあります.これらのリスクに対処するために,より多くのフィルタリング条件を追加し,パラメータを最適化し,ストップロスを組み込むなどにより改善ができます.全体的に,この戦略は,継続的な最適化と改善により,一貫して収益性の高い戦略になる可能性のある基本的な戦略フレームワークとして機能することができます.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Samsuga supertrend", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)


atrPeriod = input.int(7,    "ATR Length", minval = 1)
factor =    input.float(1.0, "Factor",     minval = 0.01, step = 0.01)

[supertrend, direction] = ta.supertrend(factor, atrPeriod)

supertrend := barstate.isfirst ? na : supertrend
upTrend =    plot(direction <= 0 ? supertrend : na, "Up Trend",   color = color.green, style = plot.style_linebr)
downTrend =  plot(direction <= 0 ? na : supertrend, "Down Trend", color = color.red,   style = plot.style_linebr)
bodyMiddle = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle",display = display.none)
longcondition = direction[1] > direction 
shortCondition = direction[1] < direction 

macdp1 = 3
macdp2=10
macdp3=6

[macdLine, signalLine, histLine] =request.security(symbol = syminfo.tickerid, timeframe = "30",expression = ta.macd(close,macdp1,macdp2,macdp3),lookahead=barmerge.lookahead_on)
// plot(macdLine,   title = "MACD",   color = #2962FF)
// plot(signalLine, title = "Signal", color = #FF6D00)
// 8, 21, 5
// 8,13,9
// 12,26,9
//  1--> 3, 17, 5
// 3, 10, 16
// log.info(str.tostring(syminfo.tickerid)+str.tostring(histLine[0]))
//  /////////----------------METHOD 1-----------------////////////////
// if(longcondition)
//     if(strategy.opentrades>0)
//         strategy.close("Long","Prev Exit", immediately = true)
//     if( histLine[0] > 0.1)
//         strategy.entry(id= "Long", direction=strategy.long,  comment = "update long")

    
// else if(shortCondition and strategy.openprofit<=0.1) 
//     strategy.close("Long",comment = "Close",immediately = true)
//  /////////----------------METHOD 2-----------------////////////////
// if(longcondition)
//     if(histLine[0] > 0)
//         strategy.entry(id= "Long", direction=strategy.long,  comment = "update long" )
//         strategy.exit("Long", loss = close*0.2)


    
// else if(shortCondition ) 
//     strategy.close("Long",comment = "Close",immediately = true)
//  /////////----------------METHOD 3-----------------////////////////
// log.info(str.tostring(syminfo.tickerid)+str.tostring(histLine[0]))
if(longcondition)
    if(histLine[0] > 0)    
        strategy.close("Short",comment = "E-S", alert_message = "E-S",disable_alert = true)
        strategy.entry(id= "Long", direction=strategy.long,  comment = "L",alert_message = "L")
else if(shortCondition) 
    if(histLine[0] < 0)    
        strategy.close("Long",comment = "E-L",alert_message = "E-L",disable_alert = true)
        strategy.entry(id= "Short", direction=strategy.short,  comment = "S",alert_message = "S")

もっと