
이 전략은 두 개의 다른 파라미터 세트의 이동 평균을 계산하여 가격 추세를 그것의 방향 변화에 따라 판단하고 방향 변화의 민감성 파라미터를 설정하여 거래 신호를 생성합니다.
이 전략의 핵심 지표는 이중 이동 평균이다. 이 전략은 이동 평균의 유형 (SMA, EMA 등) 과 길이 및 가격 출처 (폐쇄 가격, 전형적인 가격 등) 를 선택할 수 있다. 이동 평균의 두 세트를 계산한 후, 매개 변수 (reaction) 를 정의하여 방향을 판단한다.
또한, 전략은 변화의 방향과 지속적인 상승/하락의 조건을 결정하여 잘못된 신호를 발생하지 않도록 한다. 그리고 다른 색으로 시각적으로 가격의 하락 상태를 나타낸다. 가격이 계속 상승할 때, movavg 선은 녹색으로, 하락할 때 빨간색으로 표시된다.
이 이중 movavg 전략은 서로 다른 파라미터를 설정하는 빠른 느린 라인을 결합하여 강력한 트렌드를 식별하는 거래 시장의 잡음을 효과적으로 어낼 수 있습니다. 단일 movavg 전략에 비해 잘못된 신호를 줄여서 트렌드가 더 분명할 때 진입할 수 있으므로 더 높은 승률을 얻을 수 있습니다.
민감성 파라미터 반응은 이 전략을 다른 주기 및 품종에 따라 유연하게 적응할 수 있게 한다. 전략 과정은 직관적이고 간단하며 이해하기 쉽고 최적화된다.
이 전략의 가장 큰 위험은 전환점을 놓치고 손실을 입거나 역으로 포지션을 구축하는 것입니다. 이것은 파라미터 반응 설정과 관련이 있습니다. 반응이 너무 작다면 잘못된 신호가 발생할 수 있습니다. 반응이 너무 크면 더 나은 입구점을 놓칠 수 있습니다.
또 다른 위험은 손실을 효과적으로 통제할 수 없다는 것입니다. 가격이 급격하게 변동할 때, 손실을 빠르게 멈출 수 없기 때문에 손실이 확대됩니다. 이것은 손실을 제어하기 위해 중단 전략과 함께 필요합니다.
이 전략의 최적화 방향은 주로 변수 반응, 이동 평균 유형 및 길이의 선택에 집중한다. 반응은 잘못된 신호를 줄이기 위해 적절히 증가 할 수 있다. 이동 평균 변수는 다른 주기 및 품종에 따라 테스트되어 신호를 가장 잘 생성하는 조합을 선택할 수 있다.
또한, RSI, KD 등과 같은 다른 보조 지표와 결합하여 거래 신호를 확인하는 것도 최적화 아이디어입니다. 또는 기계 학습 방법을 사용하여 자동적으로 선호하는 매개 변수입니다.
이 전략은 전체적으로 간단하고 실용적이며, 두 개의 이동 평균 필터링 파동과 거래 신호를 생성하여 트렌드 반전을 효과적으로 식별 할 수 있으며, 전형적인 트렌드 추적 전략입니다. 최적화 된 파라미터 조합 후, 상시 캡처 능력과 상시 포지션 보유 능력 모두 향상됩니다.
/*backtest
start: 2023-11-03 00:00:00
end: 2023-12-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(shorttitle="MA_color strategy", title="Moving Average Color", overlay=true)
// === INPUTS
ma_type = input(defval="HullMA", title="MA Type: ", options=["SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "ZEMA", "TMA", "SSMA"])
ma_len = input(defval=32, title="MA Lenght", minval=1)
ma_src = input(close, title="MA Source")
reaction = input(defval=2, title="MA Reaction", minval=1)
// SuperSmoother filter
// © 2013 John F. Ehlers
variant_supersmoother(src,len) =>
a1 = exp(-1.414*3.14159 / len)
b1 = 2*a1*cos(1.414*3.14159 / len)
c2 = b1
c3 = (-a1)*a1
c1 = 1 - c2 - c3
v9 = 0.0
v9 := c1*(src + nz(src[1])) / 2 + c2*nz(v9[1]) + c3*nz(v9[2])
v9
variant_smoothed(src,len) =>
v5 = 0.0
v5 := na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len
v5
variant_zerolagema(src,len) =>
ema1 = ema(src, len)
ema2 = ema(ema1, len)
v10 = ema1+(ema1-ema2)
v10
variant_doubleema(src,len) =>
v2 = ema(src, len)
v6 = 2 * v2 - ema(v2, len)
v6
variant_tripleema(src,len) =>
v2 = ema(src, len)
v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)
v7
variant(type, src, len) =>
type=="EMA" ? ema(src,len) :
type=="WMA" ? wma(src,len):
type=="VWMA" ? vwma(src,len) :
type=="SMMA" ? variant_smoothed(src,len) :
type=="DEMA" ? variant_doubleema(src,len):
type=="TEMA" ? variant_tripleema(src,len):
type=="HullMA"? wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len))) :
type=="SSMA" ? variant_supersmoother(src,len) :
type=="ZEMA" ? variant_zerolagema(src,len) :
type=="TMA" ? sma(sma(src,len),len) : sma(src,len)
// === Moving Average
ma_series = variant(ma_type,ma_src,ma_len)
direction = 0
direction := rising(ma_series,reaction) ? 1 : falling(ma_series,reaction) ? -1 : nz(direction[1])
change_direction= change(direction,1)
change_direction1= change(direction,1)
pcol = direction>0 ? lime : direction<0 ? red : na
plot(ma_series, color=pcol,style=line,join=true,linewidth=3,transp=10,title="MA PLOT")
/////// Alerts ///////
alertcondition(change_direction,title="Change Direction MA",message="Change Direction MA")
longCondition = direction>0
shortCondition = direction<0
if (longCondition)
strategy.entry("BUY", strategy.long)
if (shortCondition)
strategy.entry("SELL", strategy.short)