더블 이동 평균과 윌리엄스 이동 평균 조합 전략


생성 날짜: 2024-01-26 16:36:27 마지막으로 수정됨: 2024-01-26 16:36:27
복사: 0 클릭수: 566
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

더블 이동 평균과 윌리엄스 이동 평균 조합 전략

개요

이 전략은 쌍 지수 이동 평균과 세 개의 윌리엄스 평균을 조합하여 종합적인 트렌드 추적과 트렌드 역전 신호를 생성하는 시스템을 형성한다. 그것은 우수한 포지션 보유 효율을 가지고 있으며, 가짜 신호를 효과적으로 필터링 할 수 있다.

전략 원칙

이 전략은 크게 두 가지의 하위 전략으로 구성됩니다.

  1. 이중 지수 이동 평균 (Double Exponential Moving Average, DEMA). 이 지표는 단일 지수 이동 평균의 트렌드 추적 성능과 이중 지수 이동 평균의 지연성을 결합합니다. 가격이 상승하면 더 빨리 할 수 있고, 가격이 떨어지면 더 빨리 평점 할 수 있습니다.

  2. 윌리엄스 삼선 평균. 이 지표는 긴 선, 중간 선, 그리고 짧은 선으로 이루어져 있다. 그것은 서로 다른 주기적 평균의 교차를 사용하여 트렌드의 변화를 판단하여 거래 신호를 생성한다. 짧은 선에서 중간 선과 중간 선에서 긴 선을 통과할 때 다중 신호로 한다. 짧은 선 아래 중간 선과 중간 선 아래 긴 선을 통과할 때 공백 신호로 한다.

이 전략의 거래 신호는 위의 두 가지 하위 전략의 결과를 과 연산하는 것이다. 즉, 두 가지 하위 전략이 동시에 신호를 발신할 때만 이 전략은 주문을 발신한다. 이것은 가짜 신호를 효과적으로 줄이고 포지션의 안정성을 높일 수 있다.

우위 분석

이 전략의 가장 큰 장점은 전략의 구조에 의해 결정되는 가짜 신호를 효과적으로 필터링 할 수 있다는 것입니다. 두 개의 이동 평균과 윌리엄스 평균은 단점이 있지만, 둘을 결합하면 각각의 장점을 발휘하여 서로를 보상 할 수 있습니다. 이것은 이 전략이 트렌드 상황에서 효율적인 지위를 달성 할 수있게하고, 상쇄 상태에서 손실을 제 시간에 막을 수 있습니다.

또한, 이 전략의 파라미터를 최적화할 수 있는 공간은 넓고, 이중 이동 평균의 파라미트와 윌리엄스 3개 줄 평균의 파라미트를 조정하여, 다른 품종과 주기에서의 시장 특성에 적응할 수 있으며, 강한 적응력을 가지고 있다.

위험 분석

이 전략의 주요 위험은 시장 상황이 급격한 변동에 빠졌을 때, 스톱 로즈 지점이 돌파되어 큰 손실이 발생할 수 있다는 것입니다. 이것은 이동 평균 전략의 일반적인 문제입니다. 또한, 충격적인 상황에서 이 전략은 빈번하게 입점을 열어 거래 비용을 증가시킬 수 있습니다.

이러한 위험을 제어하기 위해, 최적화 파라미터를 사용할 때 Walk Forward Analysis 방법을 사용하는 것이 권장되며, 합리적인 중지 지점을 설정한다. 또한, 상가 상태를 판단하는 부가적인 지표를 도입하여, 충격적인 상가 상황에서 거래를 중지 할 수 있다.

최적화 방향

이 전략은 다음과 같은 몇 가지 최적화 방향을 가지고 있습니다.

  1. 이중 이동 평균의 파라미터를 다른 품종과 주기에 맞게 조정한다.

  2. 윌리엄스 평균의 3개 선주기를 조정하여 시장의 변동 빈도에 맞게 조정한다.

  3. 포지션 개시 조건을 추가하여 특정 시점의 거래 신호를 필터링한다. 예를 들어, 급격한 변동성에서 거래하지 않는다.

  4. 손실을 통제하기 위해 스톱로스 지표를 추가한다. 스톱로스, 평균 스톱로스 등의 방법을 실험할 수 있다.

  5. 기계 학습 알고리즘의 자동 최적화 파라미터를 도입한다.

요약하다

이 전략은 이진 이동 평균과 윌리엄스 평균의 장점을 조합하여 거래 신호의 효율적인 필터링을 구현하여 가짜 신호를 줄이고 포지션 효율성을 향상시킵니다. 시장 상황에 따라 파라미터를 최적화하여 더 나은 성과를 얻을 수 있으며, 큰 응용 잠재력을 가지고 있습니다. 또한 위험 관리에 주의를 기울이고 급격한 변동으로 인한 손실을 제어해야합니다.

전략 소스 코드
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 21/04/2022
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This indicator plots 2/20 exponential moving average. For the Mov 
// Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met.
//
// Second strategy
// This indicator calculates 3 Moving Averages for default values of
// 13, 8 and 5 days, with displacement 8, 5 and 3 days: Median Price (High+Low/2).
// The most popular method of interpreting a moving average is to compare 
// the relationship between a moving average of the security's price with 
// the security's price itself (or between several moving averages).
//
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
EMA20(Length) =>
    pos = 0.0
    xPrice = close
    xXA = ta.ema(xPrice, Length)
    nHH = math.max(high, high[1])
    nLL = math.min(low, low[1])
    nXS = nLL > xXA or nHH < xXA ? nLL : nHH
    iff_1 = nXS < close[1] ? 1 : nz(pos[1], 0)
    pos := nXS > close[1] ? -1 : iff_1
    pos


BWA3Lines(LLength,MLength,SLength,LOffset,MOffset,SOffset) =>
    pos = 0.0
    xLSma = ta.sma(hl2, LLength)[LOffset]
    xMSma = ta.sma(hl2, MLength)[MOffset]
    xSSma = ta.sma(hl2, SLength)[SOffset]
    pos := close < xSSma and xSSma < xMSma and xMSma < xLSma ? -1 :
    	     close > xSSma and xSSma > xMSma and xMSma > xLSma ? 1 : nz(pos[1], 0) 
    pos

strategy(title='Combo 2/20 EMA & Bill Williams Averages. 3Lines', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════ 3Lines ═════●'
LLength = input.int(13, minval=1, group=I2)
MLength = input.int(8,minval=1, group=I2)
SLength = input.int(5,minval=1, group=I2)
LOffset = input.int(8,minval=1, group=I2)
MOffset = input.int(5,minval=1, group=I2)
SOffset = input.int(3,minval=1, group=I2)
var misc = '●═════ MISC ═════●'
reverse = input.bool(false, title='Trade reverse', group=misc)
var timePeriodHeader = '●═════ Time Start ═════●'
d = input.int(1, title='From Day', minval=1, maxval=31, group=timePeriodHeader)
m = input.int(1, title='From Month', minval=1, maxval=12, group=timePeriodHeader)
y = input.int(2005, title='From Year', minval=0, group=timePeriodHeader)
StartTrade = time > timestamp(y, m, d, 00, 00) ? true : false
posEMA20 = EMA20(Length)
prePosBWA3Lines = BWA3Lines(LLength,MLength,SLength,LOffset,MOffset,SOffset)
iff_1 = posEMA20 == -1 and prePosBWA3Lines == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosBWA3Lines == 1 and StartTrade ? 1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
if possig == 1
    strategy.entry('Long', strategy.long)
if possig == -1
    strategy.entry('Short', strategy.short)
if possig == 0
    strategy.close_all()
barcolor(possig == -1 ? #b50404 : possig == 1 ? #079605 : #0536b3)