스윙 트렌드 이동 평균 전략

저자:차오장, 날짜: 2024-02-04 15:44:54
태그:

img

전반적인 설명

스윙 트렌드 이동 평균 전략 (Swing Trend Moving Average Strategy) 은 트렌드 방향을 식별하기 위해 장기 이동 평균을 사용하여 트렌드 방향을 평균 진실 범위와 결합하여 가짜 아웃을 필터링하고 전반적인 드라우다운을 제한하는 시스템이다. 트렌드 방향을 결정하기 위해 기하급수적인 이동 평균을 채택하고 가짜 브레이크오웃인지 감지하기 위해 평균 진실 범위를 사용합니다. 이것은 범위 시장을 효과적으로 필터링하고 전반적인 전략 드라우다운을 줄일 수 있습니다.

전략 논리

이 전략은 다음과 같은 원칙을 바탕으로 설계됩니다.

  1. 전체 트렌드 방향을 결정하기 위해 지수 이동 평균을 사용하십시오. 기본 기간은 200 바입니다.
  2. 지난 10바트의 평균 진 범위를 계산합니다.
  3. 닫기 가격이 이동 평균 + 평균 진정한 범위 보다 높으면 상승 추세로 결정됩니다.
  4. 닫기 가격이 이동 평균 - 평균 실제 범위 아래로 떨어지면 하락 추세로 결정됩니다.
  5. 상승 추세에서 장거리, 하락 추세에서 단거리
  6. 기본적으로 이동 평균은 스톱 로스 라인으로 사용된다. 또한 이동 평균 ± 평균 진 범위를 스톱 로스 라인으로 사용할 수 있다.

이점 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 주요 트렌드를 결정하기 위해 이동 평균을 사용하면 단기 시장 소음을 효과적으로 필터링 할 수 있습니다.
  2. 필터 조건으로 Average True Range를 추가하면 범위 시장에서 거래 신호를 생성하는 것을 피하고 불필요한 손실을 줄입니다.
  3. 스톱 로스 라인은 이동 평균 또는 그 역 범위에 가깝고, 빠른 스톱 로스를 통해 최대 유출을 줄일 수 있습니다.
  4. 간단한 매개 변수 설정으로 이해하기 쉽고 최적화 할 수 있습니다.

위험 분석

이 전략은 또한 몇 가지 잠재적인 위험을 가지고 있습니다.

  1. 트렌드 반전은 보통 이동 평균 시스템에서 어느 정도의 마감으로 이어집니다.
  2. 이동평균 및 평균 참 범위의 매개 변수 설정은 전략 성능에 큰 영향을 줄 수 있습니다. 잘못된 매개 변수 설정은 거래 기회를 놓칠 수 있거나 불필요한 손실을 증가시킬 수 있습니다.
  3. 전략 자체는 가격과 부피 사이의 관계를 고려하지 않습니다. 그것은 일부 잘못된 신호를 생성 할 수 있습니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 특정 주식이나 제품에 가장 적합한 것을 찾기 위해 다양한 종류의 이동 평균을 테스트하십시오.
  2. 이동 평균 기간 매개 변수를 최적화하여 거래된 주식 또는 제품의 특성에 더 적합하도록 합니다.
  3. 트렌드를 놓치지 않고 범위를 필터링하는 최고의 조합을 찾기 위해 평균 진정한 범위 매개 변수를 최적화하십시오.
  4. 유효하지 않은 브레이크를 피하기 위해 볼륨 규칙을 추가합니다.
  5. 최적의 솔루션을 결정하기 위해 다른 스톱 손실 방법을 테스트하고 비교합니다.

결론

전반적으로, 스윙 트렌드 이동 평균 전략은 매우 간단하고 실용적인 트렌드 다음 전략이다. 또한 좋은 위험 통제를 가지고 있다. 전략은 많은 요소를 고려하지 않지만, 세분화된 테스트와 매개 변수 및 스톱 로스 방법의 최적화가 여전히 필요하다. 그러나, 그것의 간단한 거래 논리와 매개 변수 설정은 특히 비트코인 같은 암호화폐 거래에 적합하여 다양한 제품에 널리 적용된다.


/*backtest
start: 2023-01-28 00:00:00
end: 2024-02-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Inkedlau

//@version=5
strategy('Swing Trend Strategy', overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, commission_value=0.1)

use_short = input.bool(false, 'Open Short Positions?')
exit_type = input.bool(true, 'Exit trade on Moving Average Cross?')
src = input.source(close, 'Source')
len = input.int(200, 'Trend Length')
ma_type = input.string('ema', 'Moving Average Type', options=['sma', 'ema', 'rma', 'wma', 'vwma'], tooltip='Select the type of Moving Average to use to calculate the Trend')
atr_multiplier = input.float(1., 'ATR Threshold', step=0.5, tooltip='Filter the ranging market using the Average True Range')

// ----------------------- DESCRIPTION -----------------------
// THIS SCRIPT IS A TREND FOLLOWING SYSTEM THAT USES A COMBINATION OF MOVING AVERAGE AND AVERAGE TRUE RANGE
// TO SPOT THE TRENDS AND ENTER THE MARKET ACCODINGLY.
// THE MARKET IS CONSIDERED IN AN UPTREND WHEN THE PRICE CLOSES ABOVE THE MOVING AVERAGE + THE AVERAGE TRUE RANGE OF THE LAST 10 PERIODS
// THE MARKET IS CONSIDERED IN AN DOWNTREND WHEN THE PRICE CLOSES BLOW THE MOVING AVERAGE - THE AVERAGE TRUE RANGE OF THE LAST 10 PERIODS
// BY DEFAULT, THE STRATEGY WILL ENTER LONG WHEN AN UPTREND IS SPOTTED, THEN CLOSES WHEN THE PRICE CLOSES BELOW THE MOVING AVERAGE
// THE STRATEGY WILL ENTER SHORT WHEN A DOWNTREND IS SPOTTED, THEN CLOSES WHEN THE PRICE CLOSES ABOVE THE MOVING AVERAGE

// ------------------ INDICATORS CALCULATION------------------
my_ma()=>
    ma = close
    if ma_type == 'sma'
        ma := ta.sma(src, len)
    if ma_type == 'ema'
        ma := ta.ema(src, len)
    if ma_type == 'rma'
        ma := ta.rma(src, len)
    if ma_type == 'wma'
        ma := ta.wma(src, len)
    if ma_type == 'vwma'
        ma := ta.vwma(src, len)
    ma

trend = my_ma()
atr = ta.atr(10)
uptrend = trend + atr * atr_multiplier
downtrend = trend - atr * atr_multiplier

// ---------------- ENTRY AND EXIT CONDITIONS ----------------

open_long = strategy.position_size == 0 and src > uptrend
close_long = exit_type ? strategy.position_size > 0 and src < trend : strategy.position_size > 0 and src < downtrend

open_short = use_short and strategy.position_size == 0 and src < downtrend
close_short = exit_type ? strategy.position_size < 0 and src > trend : strategy.position_size < 0 and src > uptrend

strategy.entry('long', strategy.long, when=open_long)
strategy.close('long', when=close_long)

strategy.entry('short', strategy.short, when=open_short)
strategy.close('short', when=close_short)


// ------------------ PLOTTING AND COLORING ------------------
tcolor = src > uptrend ? color.green : src < downtrend ? color.red : na

ptrend = plot(trend, color=color.blue, linewidth=1)
puptrend = plot(uptrend, color=color.green, linewidth=1)
pdowntrend = plot(downtrend, color=color.red, linewidth=1)
pclose = plot(close, color=na)

fill(puptrend, pclose, color=close > uptrend ? color.green : na, transp = 90)
fill(pdowntrend, pclose, color=close < downtrend ? color.red : na, transp = 90)



더 많은