トレンドブレイクアウト-ロングシャドウ戦略


作成日: 2023-11-15 16:43:17 最終変更日: 2023-11-15 16:43:17
コピー: 2 クリック数: 665
1
フォロー
1617
フォロワー

トレンドブレイクアウト-ロングシャドウ戦略

この戦略は,K線の陽影長比を計算して,現在のトレンド方向を判断し,平均真波幅ATRと連携してトレンド識別を行い,突破点で逆転開札を行い,ストップ・ロストを設定し,短期トレンドを捕捉する.

戦略原則

この戦略は主にK線の陽影長比を計算して,現在のトレンドの方向を判断し,陰線長すぎると下向きトレンドと判断し,陽線長すぎると上向きトレンドと判断する.

この戦略の論理は以下の通りです.

  1. K線の下の影の長さを計算する: close-low (閉店価格 - 最低価格)
  2. K線の上影長を計算する:high-open ((最高価格-オープン価格)
  3. 影の長さとして下影と上影の最大値を取ります.
  4. K線実体長を計算する:high-low ((最高価格 - 最低価格)
  5. 影長と実体長の比を計算する
  6. 比率が0.5以上で,下影が上影より大きいときは,下向きのトレンドとして判断し,複数シングル入場を設定する
  7. 比率が0.5以上で,上影が下影より大きいときは,上向きに判断し,空席を設定する
  8. 入場時にK線実体長が0.75倍以上のATR平均真波幅であるかどうかを同時に判断し,無効突破を避ける
  9. 入場後にストップ・ロスを設定し,ストップ・ロスは入場価格に係数で,ストップ・ロスは入場価格に係数で2倍に係数で,利益損失比は2:1を実現する.

戦略の基本的な取引論理は,トレンドの突破点を認識し,逆転してポジションを開き,ストップ・ロストを設定して利益を最適化することです.

戦略的優位性

  1. 陽影比でトレンドの方向を判断し,区別が高くなる
  2. ATR指標と組み合わせた有効な突破判断で,偽信号を避ける
  3. リスク管理に役立つ Stop Loss Stop を設定する
  4. 2:1の利益・損失比で,量的な取引基準に適合する
  5. 高波動性株のショートライン取引
  6. 戦略の論理はシンプルで明快で,実行は簡単です.

戦略リスク

  1. 株価が急激に波動すると,ストップ・ロスが破られ,損失が拡大する可能性があります.
  2. 効果はパラメータ設定と密接に関連しており,パラメータを最適化する必要があります.
  3. トレンドが逆転すると,損失が発生する可能性があります.
  4. ストップとストップの範囲を同時に拡大すると,損失の可能性が増加します.
  5. 突破に失敗すると,大きな損失を伴う.

合理的な止損,最適化パラメータ,及時な止損によってリスクを制御することができる.

戦略の最適化

戦略は以下の点で最適化できます.

  1. 日陰比のパラメータを最適化して,最適な値を見つける
  2. ATRパラメータを最適化して,K線長を決定する
  3. 最適なリスク/利益の比率を実現するストップ・ストップ係数を最適化
  4. ポジション管理の増強,例えば,ポジションの増強
  5. 追尾ストロスを増やし,利益保護を実現する
  6. 他の指標と組み合わせた入場信号のフィルタリング
  7. 市場における各段階の効果を試すため,フィードバックの期間を最適化

戦略の効果を最大化するには,多面的なテストと最適化が必要です.

概して,この戦略は,トレンド認識とリスク管理の方法によって,短期価格変動を利用して利益を得るという,効果が安定するショートライン突破戦略である.最適化すると,量化取引の重要な部分になる.

ストラテジーソースコード
/*backtest
start: 2022-11-08 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ondrej17

//@version=4
strategy("longWickstrategy", overlay=true )
 
// Inputs
st_yr_inp = input(defval=2020, title='Backtest Start Year')
st_mn_inp = input(defval=01, title='Backtest Start Month')
st_dy_inp = input(defval=01, title='Backtest Start Day')
en_yr_inp = input(defval=2025, title='Backtest End Year')
en_mn_inp = input(defval=01, title='Backtest End Month')
en_dy_inp = input(defval=01, title='Backtest End Day')
sltp_inp = input(defval=0.8, title='N - % offset for N*SL and (2N)*TP')/100
 
// Dates
start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00)
end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00)
canTrade = time >= start and time <= end
// Indicators Setup


 
// Strategy Calcuations
lowerWick = (open > close) ? close-low : open - low
upperWick = (open > close) ? high-open : high-close
wickLength = max(lowerWick,upperWick)
candleLength = high-low
wickToCandleRatio = wickLength / candleLength
entryFilterCandleLength = candleLength > 0.75*atr(48)


// Entries and Exits
 
longCondition = entryFilterCandleLength and wickToCandleRatio > 0.5 and lowerWick > upperWick and canTrade and strategy.position_size == 0
shortCondition = entryFilterCandleLength and wickToCandleRatio > 0.5 and lowerWick < upperWick and canTrade and strategy.position_size == 0

strategy.entry("pendingLong", strategy.long, limit=low+wickLength/2, when = longCondition)
strategy.entry("pendingShort", strategy.short, limit=high-wickLength/2, when = shortCondition)

longStop = strategy.position_size > 0 ? strategy.position_avg_price*(1-sltp_inp) : na
longTP = strategy.position_size > 0 ? strategy.position_avg_price*(1+2*sltp_inp) : na
shortStop = strategy.position_size < 0 ? strategy.position_avg_price*(1+sltp_inp) : na
shortTP = strategy.position_size < 0 ? strategy.position_avg_price*(1-2*sltp_inp) : na

strategy.exit("longSLTP","pendingLong", stop=longStop, limit = longTP)
strategy.exit("shortSLTP","pendingShort", stop=shortStop, limit = shortTP)  
 

plot(longStop, color=color.red, style=plot.style_linebr, linewidth=2)
plot(shortStop, color=color.red, style=plot.style_linebr, linewidth=2)
plot(longTP, color=color.green, style=plot.style_linebr, linewidth=2)
plot(shortTP, color=color.green, style=plot.style_linebr, linewidth=2)

plotLongCondition = longCondition ? high+abs(open-close) : na
plot(plotLongCondition, style=plot.style_circles, linewidth=4, color=color.green)
plotShortCondition = shortCondition ? high+abs(open-close) : na
plot(plotShortCondition, style=plot.style_circles, linewidth=4, color=color.red)