スーパートレンドとMACDに基づくリスク管理戦略


作成日: 2024-03-11 11:24:20 最終変更日: 2024-03-11 11:24:20
コピー: 0 クリック数: 699
1
フォロー
1617
フォロワー

スーパートレンドとMACDに基づくリスク管理戦略

概要

この戦略は,スーパートレンド指標とMACD指標を組み合わせて,小さなトレンドを捕捉して利益を得ます.戦略は,スーパートレンド指標を使用して,現在の市場動向を判断し,MACD指標をエントリーとアウトの補助条件として使用します.戦略の論理は明確で,理解しやすく,実行できます.

戦略原則

  1. 超トレンド指数は,ATR周期と倍数因子であるta.supertrend関数を使用して計算されます.
  2. 超トレンド指標の方向の変化に基づいて多空トレンドを判断する.方向が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")