N 바스 브레이크업 전략

저자:차오장, 날짜: 2024-04-12 16:57:15
태그:

img

전반적인 설명

N 바스 브레이크아웃 전략 (N Bars Breakout Strategy) 은 가격 브레이크아웃을 기반으로 한 양적 거래 전략이다. 이 전략의 주요 아이디어는 폐쇄 가격이 지난 N 바의 가장 높은 수준을 넘어서면 긴 포지션을 열고 종료 가격이 지난 N 바의 가장 낮은 수준을 넘어서면 긴 포지션을 닫는 것입니다. 현재의 가격을 과거 N 바의 가장 높은 가격과 가장 낮은 가격과 비교함으로써이 전략은 강력한 브레이크아웃 움직임을 포착하고 트렌드 다음 효과를 달성하는 것을 목표로합니다.

전략 원칙

  1. 지난 N 바의 가장 높고 가장 낮을 계산합니다.
  2. 현재 종료 가격이 가장 높은 가격보다 높으면 긴 포지션을 개척합니다.
  3. 현재 종료 가격이 가장 낮은 가격보다 낮으면 긴 포지션 (쇼트 포지션) 을 닫습니다.
  4. 시그널 소스로 닫기 가격 (닫기) 또는 높은/저한 가격 (높은/저한) 을 선택할 수 있습니다.
  5. 신호 소스에 따라 가장 높은 가격과 가장 낮은 가격을 계산하기 위해 가장 높은 가격과 가장 낮은 가격을 사용하십시오.
  6. ta.crossover와 ta.crossunder를 사용하여 가격 파장을 결정합니다.

전략적 장점

  1. 단순하고 명확한 논리, 구현하고 최적화하기 쉬운.
  2. 강력한 브레이크아웃 움직임을 효과적으로 포착할 수 있고, 강한 트렌드 추적 능력을 가지고 있습니다.
  3. 매개 변수 최적화를 위한 넓은 공간, 다른 도구와 시간 프레임에 최적화 될 수 있습니다.
  4. 폭넓은 적용 가능성, 대부분의 기기와 시간 프레임에 잘 작동합니다.
  5. 신호 소스의 유연한 선택, 전략 적응력을 향상

전략 위험

  1. 불안정하고 작은 변동이 있는 시장에서 낮은 성과를 거두며, 높은 거래 비용을 초래하는 빈번한 포지션 개척과 폐쇄로 인해
  2. 부적절한 매개 변수 선택은 과도한 적합성 위험을 초래할 수 있습니다.
  3. 트렌드 반전 때 큰 마감률을 경험할 수 있습니다.
  4. 단일 신호 소스는 신호 왜곡의 위험에 직면 할 수 있습니다.

전략 최적화 방향

  1. 트렌드 필터링 조건, 예를 들어 MA 트렌드 방향, ADX 등을 추가하여 불안정한 시장에서 거래를 줄이십시오.
  2. N 값, 신호 소스 등과 같은 매개 변수 선택을 최적화하여 전략 안정성과 수익성을 향상시킵니다.
  3. 단일 거래 위험을 제어하기 위해 스톱 로스 및 후속 스톱 로스 로직을 추가합니다.
  4. 시그널 신뢰성을 높이기 위해 여러 신호 소스를 결합하는 것, 예를 들어 폐쇄 가격과 높은/저한 가격 브레이크오웃을 모두 고려하는 것.
  5. 매개 변수와 논리를 각기 다른 도구와 시간 프레임에 맞게 최적화합니다.

요약

N 바스 브레이크아웃 전략 (N Bars Breakout Strategy) 은 가격 브레이크아웃을 포착함으로써 좋은 트렌드 추후 효과를 달성하는 간단하고 실용적인 양적 거래 전략이다. 전략은 명확한 논리, 큰 최적화 공간 및 광범위한 적용 가능성을 가지고 있으며, 추가 연구 및 최적화를 가치가 있는 양적 전략이다. 합리적인 매개 변수 최적화 및 논리 개선을 통해이 전략의 안정성과 수익성이 더 향상되어 다른 시장 환경에 더 잘 적응 할 수 있습니다.


/*backtest
start: 2023-04-06 00:00:00
end: 2024-04-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Breakout", overlay=true, precision=6, pyramiding=0, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=25.0, commission_value=0.05)

n = input.int(5, "N Bars", minval=1)
src_input = input.string("Close", "Source", ["Close", "High/Low"])

bull_src = switch src_input
	"Close" => close
	"High/Low" => high
	=>
		runtime.error("Invalid source input")
		na

bear_src = switch src_input
	"Close" => close
	"High/Low" => low
	=>
		runtime.error("Invalid source input")
		na

highest = ta.highest(bull_src[1], n)
lowest = ta.lowest(bear_src[1], n)

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
// Plots
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

bool long = ta.crossover(bull_src, highest)
bool short = ta.crossunder(bear_src, lowest)

//Plots
lowest_plot  = plot(lowest,  color=color.red, title="Lowest")
highest_plot  = plot(highest,  color=color.green, title="Highest")
bull_src_plot = plot(bull_src, color=color.blue, title="Bull")
bear_src_plot = plot(bear_src, color=color.orange, title="Bear")

// this message is an alert that can be sent to a webhook, which allows for simple automation if you have a server that listens to alerts and trades programmatically.
enter_long_alert = '{"side": "Long", "order": "Enter", "price": ' + str.tostring(open) + ', "timestamp": ' + str.tostring(timenow) + '}'
exit_long_alert = '{"side": "Long", "order": "Exit", "price": ' + str.tostring(open) + ', "timestamp": ' + str.tostring(timenow) + '}'

if long
    strategy.entry(id="Long", direction=strategy.long, limit=open, alert_message=enter_long_alert)

if short
    strategy.close(id="Long", comment="Close Long", alert_message=exit_long_alert)

더 많은