戦略をフォローするモメンタム主導の三重確認傾向

作者: リン・ハーンチャオチャン,日付: 2024-01-05 15:46:21
タグ:

img

概要

この戦略は,三重確認メカニズムを用いて取引信号を生成する.すなわち,モメント指標は強い市場傾向を確認し,スーパートレンド指標はトレンド方向を確認し,EMA指標はトレンド方向の追加の検証を提供します.この3つの指標が基準を満たす場合にのみ,戦略は長または短取引信号を生成し,それによって高い確率の取引機会のみを選択することを保証します.

戦略原則

  1. モメントインジケーター (モメントRSI)

    • モメント RSI インディケーターは,市場のトレンドの強さを決定するために使用されます.60以上の値値は,強い市場トレンドを示します.

    • 激しい牛や熊市場でのみ取引信号が生成されます

  2. スーパートレンド分析

    • スーパートレンドラインは市場のトレンド方向を表します.価格がスーパートレンドラインを突破したときのみポジションは考慮されます.

    • 価格がスーパートレンドラインを上向きに突破すると 上向きに変化し 下向きに突破すると 下向きに変化します

  3. EMAの戦略

    • EMAとその補助トレンドラインは,トレンド方向を確認するために使用されます. EMAが補助トレンドラインを上向きに突破したときのみ,買い信号が現れ,ショート信号は逆です.

3つの指標が同時にポジション開設条件を満たすときのみ,真の取引信号が発行される.これは誤った信号の数を大幅に削減し,戦略の安定性を向上させる.

利点分析

この戦略は非常に安定性があり,収益性も高い.主な利点は以下の通りである.

  1. 複数の確認メカニズムによりノイズを効果的にフィルターし,高い確率の取引のみを選択します.

  2. スーパートレンドラインには リスクを効果的にコントロールするための ダイナミックなストップ損失があります

  3. 傾向強さの判断と組み合わせると,強い傾向で取引するだけで,追加のリスクが回避されます.

  4. EMA インディケーターは,取引の方向性が正しいことを確認するための追加の検証を提供します.

  5. 完全にパラメータ化して 需要に応じて調整できます

リスク分析

この戦略の主なリスクは,誤った取引信号を引き起こす異常なブレイクから生じる.主なリスクと解決策は以下のとおりである.

  1. 偽の侵入リスク:侵入の検証メカニズムを強化する.

  2. 大幅な振動範囲リスク: ストップ損失範囲を適切に調整する.

  3. トレンド逆転リスク:保持期間を短縮し,時宜でストップ・ロスをします.

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

この戦略を最適化するための主な方向は以下の通りである.

  1. パラメータ最適化:より多くの品種に合うように指標のパラメータを調整します.

  2. フィルタリングの強化: 信号品質を改善するためにより多くの指標を組み合わせます.

  3. 複合戦略: 補完的な利点を利用するために他の戦略と組み合わせる.

  4. ダイナミックパラメータ調整:市場状況に基づいてパラメータを自動的に調整します.

  5. 機械学習: アルゴリズムを使用して最適パラメータを自動的に探します

概要

この戦略は,モメント,スーパートレンド,EMA指標を効果的に組み合わせることで,複数の確認を持つ高い確率の取引戦略を達成する. 厳格なブレイクアウト検証メカニズムは,非常に強い安定性も与えます. 同時に,非常に高いカスタマイズ可能性と最適化可能性を持っています. 要するに,この戦略は,トレンドフォローとブレイクアウト取引の利点を統合し,非常に有望なアルゴリズム取引戦略です.


/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('The Flash-Strategy (Momentum-RSI, EMA-crossover, ATR)', shorttitle='The Flash-Strategy (Momentum-RSI, EMA-crossover, ATR)', overlay=true,initial_capital = 1000)
//// author -  Baby_whale_to_moon

// MOM Rsi indicator 
group_mom_rsi = "Rsi Of Momentum "
len = input.int(10, minval=1, title="Length Mom-Rsi", group =group_mom_rsi ,tooltip = 'This ind calculate Rsi value of Momentum we use this ind to determine power of trend')
src2 = close
mom = src2 - src2[len]
rsi_mom = ta.rsi(mom, len)
mom_rsi_val = input.int(60, minval=1, title="Mom-Rsi Limit Val", group =group_mom_rsi, tooltip = "When our Mom-Rsi value more then this we open LONG or Short, with help of this indicator we we determine the status of the trend")

// Super Trend Ind
group_supertrend = "SuperTrend indicator"
atrPeriod = input(10, "ATR Length SuperTrend", group = group_supertrend)
factor = input.float(3.0, "Factor SuperTrend", step = 0.01, group = group_supertrend)

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

// Ema Indicator
group_most = "Ema indicator"
src = input(close, 'Source Ema Ind',group = group_most)
AP2 = input.int(defval=12, title='Length Ema Ind', minval=1,group = group_most)
Trail1 = ta.ema(src, AP2) //Ema func
AF2 = input.float(defval=1, title='Percent Ema Ind', minval=0.1,group = group_most) / 100
SL2 = Trail1 * AF2  // Stoploss Ema
Trail2 = 0.0
iff_1 = Trail1 > nz(Trail2[1], 0) ? Trail1 - SL2 : Trail1 + SL2
iff_2 = Trail1 < nz(Trail2[1], 0) and Trail1[1] < nz(Trail2[1], 0) ? math.min(nz(Trail2[1], 0), Trail1 + SL2) : iff_1
Trail2 := Trail1 > nz(Trail2[1], 0) and Trail1[1] > nz(Trail2[1], 0) ? math.max(nz(Trail2[1], 0), Trail1 - SL2) : iff_2

//Bull = ta.barssince(Trail1 > Trail2 and close > Trail2 and low > Trail2) < ta.barssince(Trail2 > Trail1 and close < Trail2 and high < Trail2)

//TS1 = plot(Trail1, 'ExMov', style=plot.style_line, color=Trail1 > Trail2 ? color.rgb(33, 149, 243, 100) : color.rgb(255, 235, 59, 100), linewidth=2)
//TS2 = plot(Trail2, 'ema', style=plot.style_line, color=Trail1 > Trail2 ? color.rgb(76, 175, 79, 30) : color.rgb(255, 82, 82, 30), linewidth=2)
//fill(TS1, TS2, Bull  ? color.green : color.red, transp=90)


// Strategy Sett
group_strategy = "Settings of Strategy"
Start_Time = input(defval=timestamp('01 January 2000 13:30 +0000'), title='Start Time of BackTest', group =group_strategy)
End_Time = input(defval=timestamp('30 April 2030 19:30 +0000'), title='End Time of BackTest', group =group_strategy)
dollar = input.float(title='Dollar Cost Per Position* ', defval=50000, group =group_strategy)
trade_direction = input.string(title='Trade_direction', group =group_strategy, options=['LONG', 'SHORT', 'BOTH'], defval='BOTH')
v1 = input(true, title="Version 1 - Uses SL/TP Dynamically ", group =group_strategy ,tooltip = 'With this settings our stoploss price increase or decrease with price to get better PNL score')

v2 = input(false, title="Version 2 -  Uses SL/TP Statically", group =group_strategy)
v2stoploss_input = input.float(5, title='Static Stop.Loss % Val', minval=0.01, group =group_strategy)/100
v2takeprofit_input = input.float(10, title='Static Take.Prof % Val', minval=0.01, group =group_strategy)/100

v2stoploss_level_long = strategy.position_avg_price * (1 - v2stoploss_input)
v2takeprofit_level_long = strategy.position_avg_price * (1 + v2takeprofit_input)

v2stoploss_level_short = strategy.position_avg_price * (1 + v2stoploss_input)
v2takeprofit_level_short = strategy.position_avg_price * (1 - v2takeprofit_input)

group_line = "Line Settings"
show_sl_tp = input.bool(title='  Show StopLoss - TakeProf Lines',inline = "1", defval=true, group =group_line)
show_trend_line = input.bool(title='  Show Trend Line',inline = '3' ,defval=true, group =group_line)
stoploss_colour = input.color(title='StopLoss Line Colour',inline = '2' ,defval=color.rgb(255, 255, 0), group =group_line)
up_trend_line_colour = input.color(title='Up Trend line Colour',inline = '4' ,defval=color.rgb(0, 255, 0, 30), group =group_line)
down_trend_line_colour = input.color(title='Down Trend line Colour',inline = '4' ,defval=color.rgb(255, 0, 0, 30), group =group_line)

//plot(supertrend ,color = strategy.position_size > 0 and show_sl_tp ? color.rgb(255, 0, 0) :show_sl_tp ? color.rgb(0, 255, 0) : na , style = plot.style_steplinebr,linewidth = 2)
// plot(supertrend ,color = show_sl_tp and v1 ? stoploss_colour : na , style = plot.style_steplinebr,linewidth = 2)

// plot(v2stoploss_level_long ,color = strategy.position_size > 0 and show_sl_tp and v2 ? stoploss_colour : na , style = plot.style_steplinebr,linewidth = 2)
// plot(v2stoploss_level_short ,color = strategy.position_size < 0 and show_sl_tp and v2 ? stoploss_colour : na , style = plot.style_steplinebr,linewidth = 2)
// plot(v2takeprofit_level_long  ,color = strategy.position_size > 0 and show_sl_tp and v2 ? up_trend_line_colour : na , style = plot.style_steplinebr,linewidth = 2)
// plot(v2takeprofit_level_short ,color = strategy.position_size < 0 and show_sl_tp and v2 ? up_trend_line_colour : na , style = plot.style_steplinebr,linewidth = 2)


TS2 = plot(Trail2, 'Ema Strategy', style=plot.style_line, color=show_trend_line and Trail1 < Trail2 ? down_trend_line_colour : show_trend_line ? up_trend_line_colour  : na, linewidth=2)

// bgcolor(buy_signal ? color.rgb(0, 230, 119, 80) : na)
// bgcolor(sell_signal ? color.rgb(255, 82, 82, 80) : na)

Time_interval = true
buy_signal = Trail1 > Trail2 and direction < 0 and rsi_mom > mom_rsi_val and Time_interval
sell_signal =Trail1 < Trail2 and direction > 0 and rsi_mom > mom_rsi_val and Time_interval


// Strategy entries 
if strategy.opentrades == 0 and buy_signal and ( trade_direction == 'LONG' or trade_direction == 'BOTH')
    strategy.entry('Long_0', strategy.long, qty=dollar / close)

if strategy.opentrades == 0 and sell_signal and ( trade_direction == 'SHORT' or trade_direction == 'BOTH')
    strategy.entry('Short_0', strategy.short, qty=dollar / close)


if close < supertrend and v1
    strategy.exit('Long_Close',from_entry = "Long_0", stop=supertrend, qty_percent=100)
if  v2 and strategy.position_size > 0
    strategy.exit('Long_Close',from_entry = "Long_0", stop=v2stoploss_level_long,limit= v2takeprofit_level_long  , qty_percent=100)
    
if close > supertrend and v1
    strategy.exit('Short_Close',from_entry = "Short_0", stop=supertrend, qty_percent=100)
if  v2 and strategy.position_size < 0
    strategy.exit('Short_Close',from_entry = "Short_0", stop=v2stoploss_level_short,limit= v2takeprofit_level_short ,qty_percent=100)
    

もっと