이동 평균 크로스 신호 전략

저자:차오장, 날짜: 2024-01-08 15:54:32
태그:

img

전반적인 설명

이 전략은 구매 및 판매 신호를 생성하기 위해 이동 평균 교차 신호를 구현하기 위해 다양한 유형의 이동 평균을 계산하고 그래프화합니다.

전략 원칙

  1. 이 전략은 SMA, EMA, WMA 등을 포함한 다양한 종류의 이동 평균을 선택할 수 있습니다.
  2. 이 전략은 주요 이동 평균을 계산하고 또한 두 번째 이동 평균을 선택할 수 있습니다.
  3. 주요 이동 평균과 두 번째 이동 평균의 교차 상황을 기반으로 시장 트렌드를 판단하십시오.
  4. 주요 이동 평균이 자신의 지정된 주기 이동 평균을 넘을 때 구매 신호가 생성됩니다. 주요 이동 평균이 자신의 지정된 주기 이동 평균을 넘을 때 판매 신호가 생성됩니다.
  5. 따라서 이동 평균의 교차 상황으로 시장 동향을 더 명확하게 판단 할 수 있습니다.

전략 의 장점

  1. 다른 필요를 충족시키기 위해 이동 평균의 사용자 정의 가능한 유형.
  2. 더 명확한 신호를 위해 두 번째 이동 평균을 추가합니다.
  3. 이동 평균의 사용자 정의 가능한 주기가 다른 시간 주기에 적합합니다.
  4. 더 명확한 그래프를 만들기 위해 부드러운 색상 렌더링
  5. 트렌드를 정확하게 판단하기 위해 크로스 신호 메커니즘을 사용합니다.

위험 및 전략 최적화

  1. 이동 평균은 지연 속성을 가지고 있으며 잘못된 신호가 발생할 수 있습니다. 곡선 적합 이동 평균은 적절하게 사용할 수 있습니다.
  2. 이동 평균 주기의 부적절한 설정은 놓친 거래 기회를 초래할 수 있습니다. 최적의 매개 변수를 찾기 위해 더 많은 조합을 테스트 할 수 있습니다.
  3. 위험을 줄이기 위해 확인을 위해 거래량 에너지와 같은 다른 지표를 사용하는 것이 좋습니다.
  4. 신호의 정확성을 향상시키기 위해 신호 이동 평균을 커블 평균으로 바꾸는 것을 고려하십시오.
  5. LSTM 같은 모델은 전략을 최적화하는데 사용될 수 있습니다.

결론

이 전략의 전반적인 아이디어는 시장 트렌드를 판단하기 위해 이동 평균 크로스 원칙을 사용하여 다양한 요구를 충족시키기 위해 사용자 정의 가능한 매개 변수를 사용하여 명확합니다. 또한 몇 가지 문제가 있지만 모델과 매개 변수를 최적화하여 개선 할 수 있습니다. 전반적으로이 전략은 이동 평균에 기반한 거래 전략의 전형적인 대표입니다.


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

//@version=3
strategy("Moving averages-Strategy", overlay=true)
//Created by user ChrisMoody 4-24-2014
//Plots The Majority of Moving Averages
//Defaults to Current Chart Time Frame --- But Can Be Changed to Higher Or Lower Time Frames
//2nd MA Capability with Show Crosses Feature

//inputs
src = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
resCustom = input(title="Use Different Timeframe? Uncheck Box Above",defval="D")
len = input(20, title="Moving Average Length - LookBack Period")
atype = input(1,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA")
cc = input(true,title="Change Color Based On Direction?")
smoothe = input(2, minval=1, maxval=10, title="Color Smoothing - 1 = No Smoothing")
doma2 = input(false, title="Optional 2nd Moving Average")
len2 = input(50, title="Moving Average Length - Optional 2nd MA")
atype2 = input(1,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA")
cc2 = input(true,title="Change Color Based On Direction 2nd MA?")
warn = input(false, title="***You Can Turn On The Show Dots Parameter Below Without Plotting 2nd MA to See Crosses***")
warn2 = input(false, title="***If Using Cross Feature W/O Plotting 2ndMA - Make Sure 2ndMA Parameters are Set Correctly***")
sd = input(false, title="Show Dots on Cross of Both MA's")


res = useCurrentRes ? timeframe.period : resCustom
//hull ma definition
hullma = wma(2*wma(src, len/2)-wma(src, len), round(sqrt(len)))
//TEMA definition
ema1 = ema(src, len)
ema2 = ema(ema1, len)
ema3 = ema(ema2, len)
tema = 3 * (ema1 - ema2) + ema3

avg = atype == 1 ? sma(src,len) : atype == 2 ? ema(src,len) : atype == 3 ? wma(src,len) : atype == 4 ? hullma : atype == 5 ? vwma(src, len) : atype == 6 ? rma(src,len) : tema
//2nd Ma - hull ma definition
hullma2 = wma(2*wma(src, len2/2)-wma(src, len2), round(sqrt(len2)))
//2nd MA TEMA definition
sema1 = ema(src, len2)
sema2 = ema(sema1, len2)
sema3 = ema(sema2, len2)
stema = 3 * (sema1 - sema2) + sema3

avg2 = atype2 == 1 ? sma(src,len2) : atype2 == 2 ? ema(src,len2) : atype2 == 3 ? wma(src,len2) : atype2 == 4 ? hullma2 : atype2 == 5 ? vwma(src, len2) : atype2 == 6 ? rma(src,len2) : tema

out = avg 
out_two = avg2

out1 = request.security(syminfo.tickerid, res, out)
out2 = request.security(syminfo.tickerid, res, out_two)

ma_up = out1 >= out1[smoothe]
ma_down = out1 < out1[smoothe]

col = cc ? ma_up ? lime : ma_down ? red : aqua : aqua
col2 = cc2 ? ma_up ? lime : ma_down ? red : aqua : aqua

circleYPosition = out2

plot(out1, title="Multi-Timeframe Moving Avg", style=line, linewidth=4, color = col)
plot(doma2 and out2 ? out2 : na, title="2nd Multi-TimeFrame Moving Average", style=circles, linewidth=4, color=col2)
plot(sd and cross(out1, out2) ? circleYPosition : na,style=cross, linewidth=5, color=yellow)


longCondition = crossover(out1, out1[smoothe])
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(out1, out1[smoothe])
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

더 많은