サポート抵抗と平均ボリュームの突破に基づくトレーリングストップロス戦略


作成日: 2024-01-11 17:58:26 最終変更日: 2024-01-11 17:58:26
コピー: 0 クリック数: 548
1
フォロー
1617
フォロワー

サポート抵抗と平均ボリュームの突破に基づくトレーリングストップロス戦略

概要

この戦略の主な考えは,サポートレジスタンスと取引量の突破を組み合わせて入場タイミングを決定し,ATR指標を使用して,利益の後にストップ・ロスト・トラッキング価格を動的に調整して,より多くの潜在的利益を得ることです.

戦略原則

この戦略は,以下の論理で構成されています.

  1. ta.pivothighとta.pivotlowの関数を使って,抵抗線と支柱線としてL_Bars根K線の最高値とR_Bars根K線の最低値を計算する.

  2. 閉盤価格上では抵抗線を突破し,取引量がボリュームレンジの値を破るときは,多めに; 閉盤価格下ではサポート線を突破し,取引量がボリュームレンジの値を破るときは,空っぽに.

  3. オーダーした後に,close-ATR_LOを長ストップとして;空いた後に,close+ATR_SHを短ストップとして,動的調整トラッキングストップを実現する.

  4. 取引時間 ((0915-1445),毎日の最初の取引シグナル,利益または損失がリスクの額に達した後に新しい項目を開くことはありません.

戦略的優位性

  1. 支柱抵抗理論を用い,交差量指標を組み合わせ,入場時刻をより精確にします.

  2. ATR指標を使用してストロップを追跡し,市場の波動程度に応じてストロップポジションを柔軟に調整することができ,利益の獲得後に利益の還元を減らす可能性を実現する.

  3. 一日間の取引数と取引リスクを適切に管理することで,トレンドを把握し,過度の止損を避けるのに役立ちます.

戦略リスク

  1. 支援抵抗が機能しなくなり,有効な入場信号を提供できなくなるかもしれない.

  2. ATRの設定が大きすぎると,止損距離が長すぎ,損失のリスクが増加する可能性があります.

  3. 交付量指標が小さすぎると,機会が逃れることになり,大きすぎると,誤判信号が発生する可能性があります.

解決策は

  • 異なる品種特性に応じて,サポート抵抗パラメータを調整する

  • ATR倍数と取引量値パラメータを最適化

  • 他の指標と組み合わせた タイミングの判断

戦略最適化の方向性

  1. 移動平均などの他の指標と組み合わせて入場タイミングを判断します.

  2. ATR倍数と取引量値パラメータの最適化

  3. 機械学習アルゴリズムと組み合わせた動的パラメータ最適化

  4. 他の品種に拡大してパラメータの規則性を探す

要約する

この戦略は,複数の分析ツールを統合し,サポートレジスタンス,成交量,およびストップ・ローズ方法の使用により,回測段階の優れた効果を達成した.しかし,現場で,より多くの不確実性に直面し,パラメータの最適化および他の判断指標の導入により,現場のパフォーマンスをさらに強化する必要がある.全体的に,この戦略は,考えが明確で,理解が容易であり,量化取引戦略のための良い参照事例を提供している.

ストラテジーソースコード
/*backtest
start: 2024-01-03 00:00:00
end: 2024-01-10 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//   ____________                _________                      _____________
//  |____________|             ||________|                      ||__________|
//       ||            ____    ||        ||                     ||                    ______ ________    _____ ________
//       ||    |   || ||       ||________|| |   || ||    ||     ||     |   ||   /\\   |   // |______| || ||    |______|
//       ||    |===|| |===     ||__________ |   || ||    ||     ||     |===||  /__\\  |===      ||    ||   \\     ||
//       ||    |   || ||___    ||        || |___|| ||___ ||___  ||     |   || /    \\ |   \\    ||    || ___||    ||
//       ||                    ||________||                     ||__________
//       ||                    ||________|                      ||__________|
  
//@version=5
strategy("SUPPORT RESISTANCE STRATEGY [5MIN TF]",overlay=true )
L_Bars = input.int(defval = 10, minval = 1 , maxval = 50, step =1)
R_Bars = input.int(defval = 15, minval = 1 , maxval = 50, step =1)
volumeRange = input.int(20, title='Volume Break [threshold]', minval = 1)

// ═══════════════════════════ //
// ——————————> INPUT <——————— //
// ═══════════════════════════ //

EMA1 = input.int(title='PRICE CROSS EMA', defval = 150, minval = 10 ,maxval = 400)
factor1 = input.float(title='_ATR LONG',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL LONG")
factor2 = input.float(title='_ATR SHORT',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL SHORT")
risk = input.float(title='RISK',defval = 200 , minval = 1 , maxval = 5000 , step = 50, tooltip = "RISK PER TRADE")


var initialCapital = strategy.equity
t = time(timeframe.period, '0915-1445:1234567')
time_cond = not na(t)

// ══════════════════════════════════ //
// ———————————> EMA DATA <——————————— //
// ══════════════════════════════════ //
ema1 = ta.ema(close, EMA1)

plot(ema1, color=color.new(color.yellow, 0), style=plot.style_linebr, title='ema1')

// ══════════════════════════════════ //
// ————————> TRAIL DATA <———————————— //
// ══════════════════════════════════ //
// *******Calculate LONG TRAIL data*****
ATR_LO = ta.atr(14)*factor1

// *******Calculate SHORT TRAIL data*****
ATR_SH = ta.atr(14)*factor2

long_trail = close - ATR_LO
short_trail = close + ATR_SH

// Plot atr data
//plot(longStop, color=color.new(color.green, 0), style=plot.style_linebr, title='Long Trailing Stop')
//plot(shortStop , color=color.new(color.red, 0), style=plot.style_linebr, title='Short Trailing Stop')

// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //
// ————————————————————————————————————————————————————————> RESISTANCE/SUPPORT LEVELS DATA <————————————————————————————————————————————————————————————————————————————————————————————— //
// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //

Resistance_pi = fixnan(ta.pivothigh(L_Bars, R_Bars)[1])
Support_pi = fixnan(ta.pivotlow(L_Bars, R_Bars)[1])
r1 = plot(Resistance_pi, color=ta.change(Resistance_pi) ? na : color.red,  offset=-(R_Bars + 1),linewidth=2, title='RESISTANCE')
s1 = plot(Support_pi, color=ta.change(Support_pi) ? na : color.green, offset=-(R_Bars + 1),linewidth=2, title='SUPPORT')

//Volume 
vol_1 = ta.ema(volume, 5)
vol_2 = ta.ema(volume, 10)
osc_vol = 100 * (vol_1 - vol_2) / vol_2

// ══════════════════════════════════//
// ————————> LONG POSITIONS <————————//
// ══════════════════════════════════//
//******barinstate.isconfirmed used to avoid repaint in real time*******

if ( ta.crossover(close, Resistance_pi) and osc_vol > volumeRange and not(open - low > close - open) and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close >= ema1 )
    strategy.entry(id= "Long" ,direction = strategy.long, comment = "BUY")
    
plot(long_trail , color=color.new(color.blue, 0), style=plot.style_linebr, title='long Stop')

if strategy.position_size > 0 
    strategy.exit("long tsl", "Long" , stop = long_trail ,comment='SELL')
 
// ═════════════════════════════════════//
// ————————> SHORT POSITIONS <————————— //
// ═════════════════════════════════════//
if ( ta.crossunder(close, Support_pi) and osc_vol > volumeRange and not(open - close < high - open)  and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close <= ema1 )
    strategy.entry(id = "Short" ,direction = strategy.short,  comment = "SELL") 

if strategy.position_size < 0
    strategy.exit("short tsl", "Short" ,  stop = short_trail ,comment='BUY')

// ════════════════════════════════════════════════//
// ————————> CLOSE ALL POSITIONS BY 3PM <————————— //
// ════════════════════════════════════════════════//
strategy.close_all(when = hour == 14 and minute == 55)

// ════════════════════════════════════════//
// ————————> MAX INTRADAY LOSS  <————————— //
// ════════════════════════════════════════//
// strategy.risk.max_intraday_loss(type = strategy.cash, value = risk)