적응형 가격 교차 이동 평균 거래 전략

HMA SL TP
생성 날짜: 2024-09-26 16:12:36 마지막으로 수정됨: 2024-09-26 16:12:36
복사: 2 클릭수: 441
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

적응형 가격 교차 이동 평균 거래 전략

개요

자기 적응 가격 크로스 일률 거래 전략은 헐 이동 평균 (Hull Moving Average, HMA) 을 기반으로 한 양적 거래 방법이다. 이 전략은 가격과 HMA의 크로스를 사용하여 구매 및 판매 신호를 생성하며, 고정된 중지 및 중지 수준을 설정하여 위험과 수익을 관리한다. 이 전략은 104주기의 HMA를 주요 지표로 사용하고, 가격 크로스와 결합하여 거래를 촉발한다.

전략 원칙

이 전략의 핵심은 Hull 이동 평균 ((HMA) 을 주요 지표로 사용하는 것입니다. HMA는 가격 변화에 빠르게 반응하면서 지연을 줄일 수 있는 고급 이동 평균입니다. 전략 논리는 다음과 같습니다.

  1. 104주기의 HMA를 계산한다.
  2. HMA를 넘어서면 더 많은 지분을 니다.
  3. HMA를 넘어가면 포지션은 공백됩니다.
  4. 매 거래마다 고정된 스톱로스 ($1.25) 와 스톱로스 ($37.5) 를 설정한다.
  5. 매 거래마다 2개의 계약이 사용된다.

전략은 오픈 포지션을 추적하여 기존의 포지션을 재개시하지 않도록합니다. 거래가 평정되면 시스템이 새로운 거래 신호가 적용되도록 표시를 재설정합니다.

전략적 이점

  1. 적응력: HMA는 시장의 변화에 빠르게 적응하여 잘못된 신호를 줄일 수 있습니다.
  2. 위험 관리: 고정된 스톱로스 및 스톱 레벨을 사용하여 거래 당 위험을 효과적으로 제어합니다.
  3. 단순하고 명확한 거래 규칙: 명확하고 이해하기 쉽고 실행하기 쉬운 거래 규칙
  4. 양방향 거래: 상승과 하락의 기회를 동시에 포착하여 수익 잠재력을 높여줍니다.
  5. 자동화: 전략이 완전히 자동화되어 인간의 개입과 감정적 영향을 줄일 수 있습니다.

전략적 위험

  1. 자주 거래: 격렬한 시장에서 과도한 거래 신호가 발생하여 거래 비용을 증가시킬 수 있습니다.
  2. 고정된 스톱/스트롭: 모든 시장 조건에 적합하지 않을 수 있으며, 어떤 경우에는 조기 출전하거나 큰 트렌드를 놓칠 수 있다.
  3. 단일 지표에 의존: 특정 시장 환경에서 HMA에만 의존하는 것은 좋지 않을 수 있습니다.
  4. 지연성: HMA가 지연을 줄였음에도 불구하고 급격한 전환점에서는 여전히 반응이 부족할 수 있습니다.
  5. 시장 환경 필터 부족: 전체 시장 추세나 변동성을 고려하지 않고, 부적절한 시장 조건에서 거래할 수 있습니다.

전략 최적화 방향

  1. 추가 지표 도입: 다른 기술 지표 (RSI 또는 MACD와 같은) 와 결합하여 신호를 확인하고 정확성을 향상시킵니다.
  2. 동적 중단/정지: 시장의 변동성에 따라 중단 및 정지 수준을 조정하여 다른 시장 환경에 적응합니다.
  3. 시장 필터를 추가하십시오: 추세 강도 또는 변동률 필터를 추가하여 불리한 시장 조건에서 거래하는 것을 피하십시오.
  4. HMA 매개 변수를 최적화하십시오. 특정 시장에 가장 적합한 매개 변수를 찾기 위해 다양한 HMA 주기를 테스트하십시오.
  5. 포지션 관리를 도입: 시장 위험과 계좌 규모에 따라 거래 규모를 동적으로 조정한다.
  6. 시간 필터를 추가하십시오. 중요한 경제 자료가 발표되는 것과 같은 시장의 변동성이 높은 기간 동안 거래를 피하십시오.

요약하다

자동화 된 가격 크로스 일률 거래 전략은 간단하고 효과적인 양적 거래 방법입니다. 헐 이동 평균의 장점을 활용하여 시장 추세를 포착 할 수 있으며 고정 된 위험 관리 조치로 자금을 보호 할 수 있습니다. 전략에는 몇 가지 잠재적인 위험이 있지만 지속적인 최적화 및 개선으로 성능과 적응력을 더욱 향상시킬 수 있습니다. 자동화 된 거래 솔루션을 찾는 거래자에게는 고려해야 할 기본 전략 프레임 워크입니다.

전략 소스 코드
/*backtest
start: 2024-01-01 00:00:00
end: 2024-03-23 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("SHIESTD", overlay=true)

// Function to calculate Hull Moving Average (HMA)
hma(src, length) =>
    wma1 = ta.wma(src, length)
    wma2 = ta.wma(src, length / 2)
    hma = ta.wma(2 * wma2 - wma1, math.round(math.sqrt(length)))
    hma

// Parameters
hma_length = 104

// Calculate Hull Moving Average
hma_value = hma(close, hma_length)

// Plot HMA
plot(hma_value, title="104-period Hull Moving Average", color=color.blue, linewidth=2)

// Define SL and TP values in dollars
long_sl_amount = 1.25
long_tp_amount = 37.5
short_sl_amount = 1.25
short_tp_amount = 37.5

// Number of contracts
contracts = 2

// Function to calculate SL and TP prices based on entry price and dollar amounts
long_sl_price(entry_price) =>
    entry_price - long_sl_amount

long_tp_price(entry_price) =>
    entry_price + long_tp_amount

short_sl_price(entry_price) =>
    entry_price + short_sl_amount

short_tp_price(entry_price) =>
    entry_price - short_tp_amount

// Trading conditions
price_intersects_hma = ta.crossover(close, hma_value) or ta.crossunder(close, hma_value)

// Long and Short Conditions based on price intersecting HMA
long_condition = ta.crossover(close, hma_value)
short_condition = ta.crossunder(close, hma_value)

// Track open positions
var bool long_open = false
var bool short_open = false

// Handle Long Positions
if (long_condition and not long_open)
    entry_price = close
    strategy.entry("Long", strategy.long, qty=contracts)
    strategy.exit("Exit Long", from_entry="Long", stop=long_sl_price(entry_price), limit=long_tp_price(entry_price))
    long_open := true

// Handle Short Positions
if (short_condition and not short_open)
    entry_price = close
    strategy.entry("Short", strategy.short, qty=contracts)
    strategy.exit("Exit Short", from_entry="Short", stop=short_sl_price(entry_price), limit=short_tp_price(entry_price))
    short_open := true

// Reset flags when the position is closed
if (strategy.opentrades == 0)
    long_open := false
    short_open := false