N 바 브레이크아웃 전략


생성 날짜: 2024-04-12 16:57:15 마지막으로 수정됨: 2024-04-12 16:57:15
복사: 0 클릭수: 572
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

N 바 브레이크아웃 전략

개요

N Bars 브레이크 전략은 가격 브레이크를 기반으로 한 양적 거래 전략이다. 이 전략의 주요 아이디어는 종결 가격이 지난 N 거래 날의 최고 가격을 뚫었을 때 상장을 열고, 종결 가격이 지난 N 거래 날의 최저 가격을 넘어갔을 때 평소 상장을 하는 것이다. 이 전략은 현재 가격을 지난 N 거래 날의 최고 최저 가격과 비교하여 강력한 돌파 행태를 포착하여 트렌드 추적의 효과를 달성한다.

전략 원칙

  1. 지난 N 거래일 동안의 최고 가격 (highest) 과 최저 가격을 (lowest) 계산한다.
  2. 만약 현재 종료가격이 highest보다 높다면, 더 많은 포지션을 열게 된다.
  3. 현재 폐장 가격이 lowest보다 낮다면, 상장 (short) 을 한다.
  4. 종결 가격 ((close) 또는 높은 낮은 가격 ((high/low) 을 신호 소스로 사용할 수 있다.
  5. 신호 출처에 따라 최고 가격과 최저 가격을 계산하기 위해 ta.highest와 ta.lowest을 사용한다.
  6. 가격 돌파구를 판단하기 위해 ta.crossover와 ta.crossunder를 사용한다.

전략적 이점

  1. 논리는 간단하고 명확하며, 구현 및 최적화하기 쉽습니다.
  2. 강세를 포착하고, 트렌드를 추적할 수 있다.
  3. 파라미터를 조정할 수 있는 공간이 넓고, 다양한 품종과 주기에 따라 최적화할 수 있다.
  4. 적용이 넓고, 대부분의 품종과 주기에도 잘 어울린다.
  5. 이 시스템은 또한 다양한 종류의 신호를 전달할 수 있습니다.

전략적 위험

  1. 충격적인 상황과 소규모 변동에 대한 성능이 좋지 않아, 빈번한 평점으로 인해 거래 비용이 높습니다.
  2. 매개 변수 선택이 잘못되면 과도한 적합성의 위험이 발생할 수 있습니다.
  3. 이 추세 전환은 더 큰 반향을 가져올 수 있습니다.
  4. 단 하나의 신호 소스는 신호가 틀릴 위험이 있습니다.

전략 최적화 방향

  1. 트렌드 필터 조건을 추가하여 마 트렌드 방향, adx 등과 같은 트렌드 필터 조건을 추가하고, 흔들림 상태의 거래를 줄여줍니다.
  2. 최적화 파라미터 선택, 예를 들어 N값, 신호 소스 등은 전략 안정성과 수익성을 향상시킵니다.
  3. 단편 거래의 위험을 제어하기 위해 스톱로스 및 이동 스톱로스 논리를 증가시킵니다.
  4. 여러 신호 출처를 결합하여 신호 신뢰성을 높여, 예를 들어, 동시에 종료 가격과 높은 낮은 가격의 돌파구를 고려한다.
  5. 다양한 품종과 주기에 따라 각각 최적화 변수와 논리.

요약하다

N Bars 돌파 전략은 가격 돌파 행태를 포착하여 좋은 트렌드 추적 효과를 달성하는 간단한 실용적인 정량화 거래 전략이다. 이 전략은 논리적으로 명확하고, 최적화 공간이 넓으며, 적용 범위가 넓으며, 추가 연구 및 최적화를 할 가치가 있는 정량화 전략이다. 합리적인 매개 변수 최적화 및 논리적 개선을 통해 이 전략의 안정성과 수익성을 더욱 높일 수 있으며, 다양한 시장 환경에 더 잘 적응할 수 있다.

전략 소스 코드
/*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)