ローソク足パターンに基づくモメンタムブレイクアウト取引戦略


作成日: 2023-11-28 10:33:31 最終変更日: 2023-11-28 10:33:31
コピー: 0 クリック数: 602
1
フォロー
1617
フォロワー

ローソク足パターンに基づくモメンタムブレイクアウト取引戦略

この記事では,K線形状に基づく動的突破取引戦略について説明する. この戦略は,形状を識別し,市場動向と入場タイミングを判断する.

戦略概要

動力突破戦略は,主に潜在的反転信号を判断し,多頭吞食形態または空頭吞食形態を識別して場内に入る.信号を認識した後,迅速にトレンドを追跡し,余剰利益を実現する.

戦略原則

動力突破戦略の核心判断論理は,吞食形態を識別したもので,吞食形態は多頭吞食と空頭吞食の2種類に分けられる.

多頭吞食は,当日の閉盘価格が開盘価格より高く,上位K線の閉盘価格が上位K線の開盘価格より低いことを意味する.この形態は,通常,市場の感情の変化を予兆し,多空心理が逆転するので,適切な追尾を行うのに良い時間である.

空頭吞食は,多頭吞食とは正反対で,その日の閉盘価格が開盘価格より低いことを意味し,上方のK線の閉盘価格が上方のK線の開盘価格より高いことを意味する.これはまた,市場情緒の変化を予兆し,したがって空頭介入の機会でもある.

吞食パターンを認識すると,ダイナミックな突破戦略は,ポジションを迅速に確立し,過剰レバレッジを実現し,潜在的な反転トレンドを追跡する.さらに,戦略は,ストップ・ロスの価格とストップ・値を動的に調整し,利益を保証しながら,リスクを厳しく制御する.

戦略的優位性

  1. 市場が逆転するタイミングを素早く判断し,潜在的な機会を捉える
  2. リスク・リターン・マッチング,合理的なストップ・ストップ設定
  3. リスク偏好に応じて調整できるレバレッジ率
  4. 自動取引により効率が向上する

戦略リスク

  1. 完全には逆転が確認できない.
  2. 逆転の失敗の可能性があり,狭い振動が起こり得る
  3. 杆が高すぎると 破綻しやすい
  4. 適切なポジションを支えるための十分な資金が必要です

リスクの最適化には,以下の方法があります.

  1. 他の指標と組み合わせたフィルター信号
  2. レバレッジを適正に調整する
  3. 倉庫建設のステップを増やし,平均コストを批量化
  4. ストップ・ストップ・ロスの戦略を最適化し,収益を保証する

戦略の最適化

ダイナミック・ブレイクストラテジーは,以下のいくつかの側面から最適化できます.

  1. 複数の要素で信号の信頼性を検証 平均線,波動率などの指標を付加して吞食信号を検証し,信号の信頼性を確保することができる.

  2. 市場心理を判断する感情指標 市場におけるパニック指数,貪欲指数などの感情判断指標を組み合わせると,市場が逆転するタイミングをより正確に判断できる.

  3. ストップ・ストップ・ロスの最適化 移動ストップ,漸進ストップ,移動ストップなどの方法で利潤をロックして,撤回リスクを低減することができる.

  4. アルゴリズムによる取引の導入 機械学習などのアルゴリズムのモデルを使用して,取引シグナルを判断し,戦略の自動化程度を高めることができます.

要約する

動量突破戦略は,全体的に比較して典型的な反転戦略である.それは,重要なK線信号を捕捉し,迅速に判断し,市場トレンドの反転を追跡する.一定のリスクは依然として存在するが,複数の方法によって効果的に最適化することができ,収益リスク比を合理的な範囲で制御し,積極的な進出型投資家に適した方法で採用することができる.

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

//@version=5
strategy(title = "MomGulfing", shorttitle = "MomGulfing", overlay = true, initial_capital=10000, pyramiding=3, calc_on_order_fills=false, calc_on_every_tick=false, currency="USD", default_qty_type=strategy.cash, default_qty_value=1000, commission_type=strategy.commission.percent, commission_value=0.04)

syear = input(2021)
smonth = input(1)
sday = input(1)
fyear = input(2022)
fmonth = input(12)
fday = input(31)
start = timestamp(syear, smonth, sday, 01, 00)
finish = timestamp(fyear, fmonth, fday, 23, 59)
date = time >= start and time <= finish ? true : false

longs = input(true)
shorts = input(true)
rr = input(2.5)
position_risk_percent = input(1)/100
signal_bar_check = input.string(defval="3", options=["1", "2", "3"])
margin_req = input(80)
sl_increase_factor = input(0.2)
tp_decrease_factor = input(0.0)
check_for_volume = input(true)
var long_sl = 0.0
var long_tp = 0.0
var short_sl = 0.0
var short_tp = 0.0
var long_lev = 0.0
var short_lev = 0.0

initial_capital = strategy.equity
position_risk = initial_capital * position_risk_percent

bullishEngulfing_st = close[1] < open[1] and close > open and high[1] < close and (check_for_volume ? volume[1]<volume : true)
bullishEngulfing_nd = close[2] < open[2] and close[1] > open[1] and close > open and high[2] > close[1] and high[2] < close and (check_for_volume ? volume[2]<volume : true)
bullishEngulfing_rd = close[3] < open[3] and close[2] > open[2] and close[1] > open[1] and close > open and high[3] > close[2] and high[3] > close[1] and high[3] < close and (check_for_volume ? volume[3]<volume : true)
bullishEngulfing = signal_bar_check == "1" ? bullishEngulfing_st : signal_bar_check == "2" ? bullishEngulfing_st or bullishEngulfing_nd : bullishEngulfing_st or bullishEngulfing_nd or bullishEngulfing_rd
long_stop_level = bullishEngulfing_st ? math.min(low[1], low) : bullishEngulfing_nd ? math.min(low[2], low[1], low) : bullishEngulfing_rd ? math.min(low[3], low[2], low[1], low) : na
rr_amount_long = close-long_stop_level
long_exit_level = close + rr*rr_amount_long
long_leverage = math.floor(margin_req/math.floor((rr_amount_long/close)*100))

bearishEngulfing_st = close[1] > open[1] and close < open and low[1] > close and (check_for_volume ? volume[1]<volume : true)
bearishEngulfing_nd = close[2] > open[2] and close[1] < open[1] and close < open and low[2] < close[1] and low[2] > close and (check_for_volume ? volume[2]<volume : true)
bearishEngulfing_rd = close[3] > open[3] and close[2] < open[2] and close[1] < open[1] and close < open and low[3] < close[2] and low[3] < close[1] and low[3] > close and (check_for_volume ? volume[3]<volume : true)
bearishEngulfing = signal_bar_check == "1" ? bearishEngulfing_st : signal_bar_check == "2" ? bearishEngulfing_st or bearishEngulfing_nd : bearishEngulfing_st or bearishEngulfing_nd or bearishEngulfing_rd
short_stop_level = bearishEngulfing_st ? math.max(high[1], high) : bearishEngulfing_nd ? math.max(high[2], high[1], high) : bearishEngulfing_rd ? math.max(high[3], high[2], high[1], high) : na
rr_amount_short = short_stop_level-close
short_exit_level = close - rr*rr_amount_short
short_leverage = math.floor(margin_req/math.floor((rr_amount_short/short_stop_level)*100))

long = longs and date and bullishEngulfing
short = shorts and date and bearishEngulfing
bgcolor(long[1] ? color.new(color.teal, 80) : (short[1] ? color.new(color.purple, 80) : na))

if long and strategy.position_size <= 0
    long_lev := long_leverage

if short and strategy.position_size >= 0
    short_lev := short_leverage

long_pos_size = long_lev * position_risk
long_pos_qty = long_pos_size/close
short_pos_size = short_lev * position_risk
short_pos_qty = short_pos_size/close

if long
    if strategy.position_size <= 0
        long_sl := long_stop_level
        long_tp := long_exit_level

    else if strategy.position_size > 0
        long_sl := long_stop_level + sl_increase_factor*rr_amount_long
        long_tp := long_exit_level - tp_decrease_factor*rr_amount_long

    strategy.entry("L"+str.tostring(long_lev)+"X", strategy.long, qty=long_pos_qty)
    label_text = str.tostring(long_lev)+"X\nSL:"+str.tostring(long_sl)+"\nTP:"+str.tostring(long_tp)
    label.new(bar_index+1, na, text=label_text, color=color.green, style=label.style_label_up, xloc=xloc.bar_index, yloc=yloc.belowbar)

else if short
    if strategy.position_size >= 0
        short_sl := short_stop_level
        short_tp := short_exit_level

    else if strategy.position_size < 0
        short_sl := short_stop_level - sl_increase_factor*rr_amount_short
        short_tp := short_exit_level + tp_decrease_factor*rr_amount_short

    strategy.entry("S"+str.tostring(short_lev)+"X", strategy.short, qty=short_pos_qty)
    label_text = str.tostring(short_lev)+"X\nSL:"+str.tostring(short_sl)+"\nTP:"+str.tostring(short_tp)
    label.new(bar_index+1, na, text=label_text, color=color.red, style=label.style_label_down, xloc=xloc.bar_index, yloc=yloc.abovebar)

if (strategy.position_size > 0)
    strategy.exit(id="L TP/SL", stop=long_sl, limit=long_tp)

if (strategy.position_size < 0)
    strategy.exit(id="S TP/SL", stop=short_sl, limit=short_tp)

sl_level = strategy.position_size > 0 ? long_sl : strategy.position_size < 0 ? short_sl : na
plot(sl_level, color=color.red, style=plot.style_linebr)

tp_level = strategy.position_size > 0 ? long_tp : strategy.position_size < 0 ? short_tp : na
plot(tp_level, color=color.green, style=plot.style_linebr)