이동평균 앙플로프와 ATR 트레일링 스톱에 기초한 양적 거래

저자:차오장, 날짜: 2023-12-08 15:53:22
태그:

img

전반적인 설명

이 전략은 MADEFlex (Moving Average Envelope and ATR Trailing Stop에 기반한 유연한 양적 거래 전략) 이라고 불립니다. 유연하고 제어 가능한 양적 거래 솔루션을 구현하기 위해 이동 평균 봉투 지표와 ATR 트레일링 스톱 메커니즘을 결합합니다.

원칙

이 전략의 핵심은 이동 평균 이적 한 봉투 (MADE) 지표입니다. MADE는 이동 기하급수적 이동 평균 (EMA) 과 비율 인수를 곱하여 상부와 하부 밴드를 형성합니다. 가격은 상위 밴드 이상으로 넘어갈 때 판매 신호가 생성되고, 가격이 하위 밴드 이하로 넘어갈 때 구매 신호가 생성됩니다. 이 전략은 평균 진정한 범위 (ATR) 트레일링 스톱 메커니즘과 함께 MADE 지표를 통합합니다. ATR 트레일링 스톱은 ATR 값의 여러 배수를 기반으로 스톱 손실을 설정하여 유연한 스톱 손실 라인을 추적 할 수 있습니다. 이것은 불필요한 스톱 손실을 피하면서 기존 수익을 잠금합니다.

특히, MADE 지표는 3 개의 매개 변수를 포함합니다: 기간, PerAb 위의 비율, PerBl 아래의 비율. 기간 매개 변수는 EMA의 기간을 결정합니다. EMA에서 상위 및 하위 대역의 거리는 비율 인자로 제어됩니다. ATR 후속 스톱 부분은 주로 ATR 기간 nATRPeriod 및 ATR 곱하기 nATRMultip에 의해 설정됩니다. 가격이 이전 바의 스톱 손실 라인을 초과하면 스톱 손실 라인은 고정된 ATR 손실을 빼어 가격으로 조정됩니다. 가격이 이전 바의 스톱 손실 라인을 넘어지면 스톱 손실 라인은 가격과 고정된 ATR 손실로 조정됩니다.

마지막으로, 구매 및 판매 신호는 MADE 지표 신호와 ATR 트레일링 스톱 조건을 결합하여 생성됩니다. 역 입력 스위치를 통해 역 거래가 가능합니다.

이점 분석

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

  1. 더 신뢰할 수 있는 결합 신호와 스톱 손실. MADE 자체는 잘못된 신호를 생성하는 경향이 있습니다. ATR 후속 스톱을 통합하면 소음을 효과적으로 필터링 할 수 있습니다.

  2. 풍부한 조정 가능한 매개 변수 및 유연한 제어 MADE 매개 변수 및 ATR 매개 변수는 신호 양과 품질을 제어하기 위해 조정 할 수 있습니다.

  3. 역거래를 지원합니다. 역거래는 응용 시나리오를 풍부하게합니다.

  4. 직관적으로 시각화 된 스톱. 그래프 된 스톱 라인을 통해 시각적으로 스톱 효과를 판단합니다.

위험 분석

MADEFlex 전략은 또한 다음과 같은 위험을 가지고 있습니다.

  1. 부적절한 MADE 매개 변수는 과도한 잘못된 신호를 생성 할 수 있습니다. 적절한 매개 변수는 신중하게 테스트해야합니다.

  2. 과도하게 느슨한 ATR 스톱은 스톱 기회를 놓칠 수 있습니다. 적절한 ATR 배수는 테스트해야합니다.

  3. 리버스 트레이딩의 위험은 높습니다. 특히 높은 변동성 상황에서 리버스 트레이딩은 손실 위험을 증가시킬 수 있습니다. 조심스럽게 사용해야합니다.

  4. 스톱 로스 없이 잠재적으로 더 큰 손실. 극단적인 시장 조건에서 스톱 로스 보호가 부족하면 더 큰 손실이 발생할 수 있습니다.

최적화 방향

MADEFlex 전략은 다음과 같은 방향으로 최적화 될 수 있습니다.

  1. 신호 품질을 향상시키기 위해 MADE 매개 변수를 최적화하십시오. 더 신뢰할 수있는 매개 변수 세트를 찾기 위해 다른 기간과 비율 조합을 테스트 할 수 있습니다.

  2. 더 나은 정지 효과를 위해 ATR 후속 정지 매개 변수를 최적화하십시오. 더 적절한 조합을 결정하기 위해 ATR 기간과 곱셈을 테스트 할 수 있습니다.

  3. 거짓 신호를 더 많이 줄이기 위해 다른 필터를 추가합니다. 예를 들어 필터링을 위해 변동성 지표를 결합합니다.

  4. 특정 수익 수준에서 빠져나갈 수 있는 이윤 취득 메커니즘을 추가합니다. 이것은 이윤을 차단하고 위험을 통제합니다.

  5. 기계 학습 방법을 사용하여 매개 변수를 동적으로 최적화하십시오. 예를 들어 강화 학습. 이것은 전략에 유연성을 추가합니다.

결론

MADEFlex 전략은 이동 평균 봉투 지표와 ATR 트레일링 스톱 방법론의 거래 신호를 성공적으로 결합합니다. 조정 가능한 매개 변수를 통해 유연하고 제어 가능한 양적 거래 솔루션을 구현합니다. 전략은 비교적 높은 신뢰성과 강력한 제어 능력을 가지고 있습니다. 사용 및 최적화를 위한 일부 양적 기반을 가진 사용자에게 적합합니다. 추가 최적화로 더 중요한 전략 성능을 기대할 수 있습니다.


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 27/09/2022
// Moving Average Displaced Envelope. These envelopes are calculated 
// by multiplying percentage factors with their displaced expotential 
// moving average (EMA) core.
// How To Trade Using:
// Adjust the envelopes percentage factors to control the quantity and 
// quality of the signals. If a previous high goes above the envelope 
// a sell signal is generated. Conversely, if the previous low goes below 
// the envelope a buy signal is given.
//
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort 
// The related article is copyrighted material from Stocks & Commodities Jun 2009 
//
// ATR TS used by filter for MADE signals.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title='Moving Average Displaced Envelope & ATRTS', shorttitle='MADE+ATR', overlay=true)
tradeDirection = input.string('Both', title='Trade Direction', options=['Both', 'Long', 'Short'])
Price = input(title='Source', defval=close)
Period = input.int(defval=9, minval=1)
perAb = input.float(title='Percent above', defval=.5, minval=0.01, step=0.1)
perBl = input.float(title='Percent below', defval=.5, minval=0.01, step=0.1)
disp = input.int(title='Displacement', defval=13, minval=1)

nATRPeriod = input(15)
nATRMultip = input(2)
useATR = input(false, title='ATR Filter')
reverse = input(false, title='Trade reverse')

longAllowed = tradeDirection == 'Long' or tradeDirection == 'Both'
shortAllowed = tradeDirection == 'Short' or tradeDirection == 'Both'
pos = 0
sEMA = ta.ema(Price, Period)
top = sEMA[disp] * ((100 + perAb) / 100)
bott = sEMA[disp] * ((100 - perBl) / 100)

xATR = ta.atr(nATRPeriod)
xHHs =ta.sma(ta.highest(nATRPeriod), nATRPeriod)
xLLs =ta.sma(ta.lowest(nATRPeriod),nATRPeriod)
nSpread = (xHHs - xLLs) / 2
nLoss = nATRMultip * xATR
var xATRTrailingStop = 0.0
xATRTrailingStop := close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), close - nLoss) :
     close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), close + nLoss) : 
     close > nz(xATRTrailingStop[1], 0) ? close - nLoss : close + nLoss

ATRLong = close > xATRTrailingStop ? true : false
ATRShort = close < xATRTrailingStop ? true : false

iff_1 = close > top ? 1 : pos[1]
pos := close < bott ? -1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
clr = strategy.position_size
if possig == 1 
    if longAllowed and ATRLong
        strategy.entry('Long', strategy.long)
    else
        if ATRLong or strategy.position_size > 0
            strategy.close_all()
if possig == -1 
    if shortAllowed and ATRShort
        strategy.entry('Short', strategy.short)
    else    
        if ATRShort or strategy.position_size < 0
            strategy.close_all()
if possig == 0
    strategy.close_all()
    
plot(xATRTrailingStop[1], color=color.blue, title='ATR Trailing Stop')
barcolor(clr < 0 ? #b50404 : clr > 0 ? #079605 : #0536b3)



더 많은