리소스 로딩... 로딩...

브레이크오웃 및 주파수 필터 (장만) 로 트렌드를 따라가기

저자:차오장, 날짜: 2024-05-28 14:00:24
태그:EMAAO

img

전반적인 설명

이 전략은 브레이크아웃 및 주파수 필터링에 기반한 트렌드 다음 전략이며, 단지 긴 포지션을 취하는 것입니다. 전략의 주요 아이디어는 현재 트렌드 방향을 결정하기 위해 EMA 지표를 사용하여 가격이 특정 범위 내에서 가장 높은 가격에서 벗어날 때 긴 신호를 생성하고, 너무 자주 포지션을 열지 않도록 트레이딩 주파수를 제어하기 위해 주파수 필터를 사용하는 것입니다. 전략은 또한 위험을 제어하기 위해 스톱 로스 포인트를 설정하고 트렌드가 끝나면 포지션을 닫습니다.

전략 원칙

  1. 현재 트렌드 방향을 결정하기 위해 EMA 지표를 계산합니다. 종료 가격이 EMA보다 높을 때 상승 추세로 간주됩니다.
  2. 특정 범위 내에서 가장 높은 가격을 브레이크 아웃 조건으로 계산합니다. 가장 짧은 또는 가장 긴 뷰백 기간 내에 가장 높은 가격에서 폐쇄 가격이 깨지고 현재 트렌드가 상승하면 긴 신호가 생성됩니다.
  3. 빈도 필터를 도입하여 연속적인 포지션 오픈 사이의 최소 간격 시간을 제어하여 과도한 거래 빈도를 피합니다.
  4. 스톱 로스 포인트를 설정합니다. 가격이 스톱 로스 가격 이하로 떨어지면 위험을 조절하기 위해 포지션을 닫습니다.
  5. 트렌드 종료 신호를 정의합니다. 종료 가격이 EMA 이하로 떨어지면 트렌드가 종료 된 것으로 간주됩니다. 이 시점에서 긴 지위가 유지되면 지점을 닫습니다.

전략적 장점

  1. 트렌드 추적: EMA 지표를 사용하여 트렌드 방향을 결정하고 트렌드에 따라 거래함으로써 전략 수익률을 향상시키는 데 도움이됩니다.
  2. 브레이크아웃 확인: 가격 브레이크아웃을 입시 신호로 사용하면 트렌드의 시작에 적시에 입시하여 더 많은 수익 잠재력을 확보 할 수 있습니다.
  3. 주파수 제어: 연속적인 포지션 오픈 사이의 시간 간격을 제어하기 위해 주파수 필터를 도입하면 과도한 거래가 방지되고 거래 비용과 위험을 줄입니다.
  4. 스톱 로스 보호: 가격이 특정 규모로 반대 방향으로 움직일 때 즉시 손실을 중지하기 위해 스톱 로스 포인트를 설정하면 하향 위험을 효과적으로 제어 할 수 있습니다.
  5. 동적 포지션 폐쇄: 트렌드 종료 신호에 기반한 동적 포지션 폐쇄는 현존하는 수익을 적시에 잠금하고 트렌드 반전으로 인한 손실을 피합니다.

전략 위험

  1. 매개 변수 민감성: 전략의 성능은 매개 변수 선택에 상대적으로 민감하며, 다른 매개 변수 설정은 전략 성능에 상당한 차이를 초래할 수 있습니다. 충분한 역 테스트 및 매개 변수 최적화가 필요합니다.
  2. 브레이크오프 실패: 가격 브레이크오프는 트렌드가 확실히 계속될 것을 보장하지 않으며, 브레이크오프 실패가 발생할 수 있으며, 그 결과 전략의 연속 손실이 발생할 수 있습니다.
  3. 트렌드 인식: 전략은 트렌드를 판단하기 위해 EMA 지표에 의존하지만, EMA 지표는 전략의 정확성에 영향을 미치는 지연 또는 잘못된 판단을 경험할 수 있습니다.
  4. 빈번한 거래: 전략은 빈도 필터를 도입하지만 시장 변동성이 높을 때 거래 비용을 증가시키는 빈번한 포지션 개장 및 폐쇄가 발생할 수 있습니다.
  5. 스톱 로스 위험: 스톱 로스 포인트를 설정하는 것은 전략의 최대 마감을 완전히 피할 수 없으며 극단적인 시장 조건에서는 여전히 큰 손실이 발생할 수 있습니다.

전략 최적화 방향

  1. 매개 변수 최적화: 최적의 매개 변수 조합을 찾고 전략 안정성 및 수익성을 향상시키기 위해 EMA 길이, 룩백 기간 길이, 스톱 손실 비율 등 전략의 주요 매개 변수를 최적화합니다.
  2. 신호 필터링: 브레이크 신호가 생성된 후, 신호를 두 번째로 확인하기 위해 다른 기술적 지표 또는 조건을 도입하여 신호 품질을 향상시키고 잘못된 판단과 잘못된 신호를 줄일 수 있습니다.
  3. 트렌드 판단: MACD, DMI 등과 같은 다른 트렌드 판단 지표를 사용하거나 여러 지표를 결합하여 트렌드를 공동으로 판단하고 트렌드 인식의 정확성을 향상시키십시오.
  4. 동적 스톱 로스: 시장 변동성 조건에 따라 동적으로 스톱 로스 포인트를 조정합니다. 예를 들어 동적 스톱 로스 가격을 계산하기 위해 ATR 지표를 사용하거나 위험을 더 잘 제어하기 위해 후속 스톱 로스 전략을 도입하십시오.
  5. 포지션 관리: 포지션 관리 전략을 최적화하고 시장 변동성과 계좌 자본 조건에 따라 포지션 크기를 동적으로 조정하고 단일 거래의 위험 노출을 제어하고 자본 활용 효율을 향상시킵니다.

요약

이 전략은 브레이크아웃과 주파수 필터링을 기반으로하는 트렌드 다음 전략이다. 트렌드 방향을 결정하기 위해 EMA 지표를 사용하여 가격 브레이크아웃을 입점 신호로 사용하고, 트레이딩 주파수를 제어하기 위해 주파수 필터를 도입하고, 위험을 제어하기 위해 스톱 로스 포인트를 설정한다. 전략의 장점은 트렌드 추적, 브레이크아웃 확인, 주파수 제어, 스톱 로스 보호 및 동적 포지션 폐쇄에 속하지만, 또한 매개 변수 민감성, 브레이크 실패, 트렌드 인식, 빈번한 거래 및 스톱 로스 위험과 같은 잠재적 위험도 있다. 전략을 더 최적화하기 위해서는 매개 변수 최적화, 신호 필터링, 트렌드 판단, 동적 스톱 로스 및 포지션 관리와 같은 측면에서 출발하여 전략의 안정성과 수익성을 향상시킬 수 있다.


/*backtest
start: 2023-05-22 00:00:00
end: 2024-05-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Trend Following with Breakout and Frequency Filter (Long Only)", overlay=true)

// 输入参数
emaLength = input.int(50, title="EMA长度")
lookbackPeriodMin = input.int(80, title="最短回溯期")
lookbackPeriodMax = input.int(120, title="最长回溯期")
stopLossPct = input.float(2, title="止损百分比") / 100  // 止损百分比
minHoldBars = input.int(10, title="最小持仓K线数量")  // 最小持仓K线数量

// 计算EMA
ema = ta.ema(close, emaLength)

// 计算最高价和最低价
highestHigh = ta.highest(high, lookbackPeriodMax)
lowestLow = ta.lowest(low, lookbackPeriodMax)

// 定义趋势方向
isBullish = close > ema

// 定义突破信号
breakoutCondition = (ta.crossover(close, highestHigh[lookbackPeriodMin]) or ta.crossover(close, highestHigh[lookbackPeriodMax])) and isBullish

// 计算止损点
stopLossLevelLong = close * (1 - stopLossPct)

// 绘制EMA
plot(ema, title="EMA", color=color.blue)

// 记录上次开仓时间
var float lastEntryTime = na

// 策略执行并标注信号
if (breakoutCondition and (na(lastEntryTime) or (time - lastEntryTime) > minHoldBars * timeframe.multiplier))
    strategy.entry("做多", strategy.long)
    label.new(bar_index, high, text="买入", style=label.style_label_up, color=color.green, textcolor=color.white)
    strategy.exit("止损", from_entry="做多", stop=stopLossLevelLong)
    lastEntryTime := time

// 定义趋势结束信号
exitCondition = close < ema

if (exitCondition and (strategy.position_size > 0) and (time - lastEntryTime) > minHoldBars * timeframe.multiplier)
    strategy.close("做多")
    label.new(bar_index, low, text="卖出", style=label.style_label_down, color=color.red, textcolor=color.white)

관련

더 많은