캔들스틱 패턴을 기반으로 한 모멘텀 브레이크아웃 트레이딩 전략


생성 날짜: 2023-11-28 10:33:31 마지막으로 수정됨: 2023-11-28 10:33:31
복사: 0 클릭수: 349
1
집중하다
1166
수행원

캔들스틱 패턴을 기반으로 한 모멘텀 브레이크아웃 트레이딩 전략

이 글은 K선 형태를 기반으로 한 동적 돌파 거래 전략을 소개한다. 이 전략은 형태를 식별하여 시장의 추세와 진입 시기를 판단한다.

전략 개요

동력 돌파 전략은 주로 잠재적인 반전 신호를 판단하고, 다중 헤드 포식 형태 또는 공중 포식 형태를 식별하여 경기장에 진입한다. 신호를 식별한 후, 빠르게 추세를 추적하여 초과 수익을 달성한다.

전략 원칙

동력 돌파 전략의 핵심 판단 논리는 포식 형태를 식별하는 데 기초하고 있으며, 포식 형태는 다중 머리 포식과 공허 머리 포식 두 종류로 나다.

다중 헤드 삼키는 것은 당일 종결 가격이 개시 가격보다 높고, 상위 K 선의 종결 가격이 상위 K 선의 개시 가격보다 낮다는 것을 의미한다. 이러한 형태는 일반적으로 시장 정서의 변화를 예고하며, 다중 공간 정신이 역전되기 때문에 적절한 추적을위한 좋은 시간이다.

공수 삼키는 것은 다수 삼는 것과는 정반대이며, 이는 당일 종결 가격이 개시 가격보다 낮고, 상위 K 선의 종결 가격이 상위 K 선의 개시 가격보다 높다는 것을 의미한다. 이것은 또한 시장 정서가 변화하고, 따라서 공수 개입의 기회이기도 하다.

포식 형태를 식별 한 후, 동적 돌파 전략은 신속하게 포지션을 구축하고, 과도한 레버리지를 달성하고, 잠재적인 역동 경향을 추적합니다. 또한, 전략은 스톱 손실 가격과 스톱 가격을 동적으로 조정하고, 수익을 보장하면서 위험을 엄격하게 제어합니다.

전략적 이점

  1. 시장의 전환 시기를 빠르게 판단하여 잠재적인 기회를 잡습니다.
  2. 위험과 이익이 일치하고, 스톱 스이 합리적입니다.
  3. 리버리지 비율은 다른 위험 선호도에 맞게 조정할 수 있습니다.
  4. 완전 자동 거래, 더 효율적인 거래

전략적 위험

  1. 은 형태는 참고용으로만 사용되며, 역방향을 완전히 확인할 수 없습니다.
  2. 역전 실패 확률이 존재하며, 좁은 진동이 발생할 수 있습니다.
  3. 지렛대가 너무 높으면 부실할 수 있습니다.
  4. 충분한 자금이 필요하며, 적절한 지위를 지탱합니다.

위험 요소에 대해 최적화할 수 있는 방법은 다음과 같습니다.

  1. 다른 지표와 결합하여 필터링 신호
  2. 리버리지 리스크를 적절하게 조정합니다.
  3. 포지션을 구축하는 단계를 늘리고, batch 비용의 평균값
  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)