반전 이중 이동 평균 크로스오버 전략

저자:차오장, 날짜: 2023-12-28 12:00:27
태그:

img

개요: 이 전략은 이동 평균 크로스오버의 고전적인 거래 전략에 기반합니다. 간단한 이동 평균 (SMA), 기하급수적인 이동 평균 (EMA), 변수 가중화 이동 평균 (VWMA) 및 헐 이동 평균 (HMA) 을 포함한 이중 이동 평균을 사용합니다.

원칙: 전략의 핵심 논리는 이중 이동 평균 크로스오버입니다. 다른 매개 변수와 함께 두 이동 평균을 계산함으로써 빠른 이동 평균이 느린 평균을 넘을 때 구매 신호가 생성되고 빠른 이동 평균이 느린 평균을 넘을 때 판매 신호가 생성됩니다. 이동 평균 크로스오버는 단기 및 장기 가격 트렌드의 전환점을 나타냅니다.

이점 분석: 이중 이동 평균 크로스오버 전략의 주요 장점은 단순성과 작동 용이성입니다. 단 하나의 신호로, 너무 많은 매개 변수 선택과 조정 없이 가장 기본적인 트렌드 판단을 얻을 수 있으며, 초보 트레이더에게 매우 적합합니다. 또한 다양한 조합을 최적화하기 위해 다양한 유형의 이동 평균이 테스트됩니다.

위험 분석: 이 전략의 주요 위험은 일반적인 이동 평균 크로스오버 전략이 많은 잘못된 신호를 가지고 있으며, 이로 인해 여러 개의 작은 이익과 평면 포지션이 발생하여 전체 수익에 영향을 미칩니다. 또한 고정된 빠르고 느린 이동 평균 길이 설정은 특정 주기에 실패 할 수 있습니다.

최적화 방향: 1) 이동 평균 교차의 최적의 조합을 결정하기 위해 다른 기간을 테스트하십시오. 2) 잘못된 신호를 줄이기 위해 판단에 도움이되는 이동 평균 매개 변수와 RSI 지표의 두 번째 세트를 도입하는 것을 고려하십시오. 3) 더 신뢰할 수있는 교차 판단을 얻기 위해 단순한 교차 대신 MA 지표의 점진적 변화에 기반한 조건 판단을 도입하십시오.

요약: 이 전략은 전통적인 이동 평균 크로스오버 전략의 틀을 채택하여 이동 평균 기간의 최적의 조합을 찾기 위해 이중 이동 평균을 테스트합니다. 동시에 이동 평균의 ROC와 가격에 기반한 스톱 로스 판단을 추가합니다. 전반적으로 양적 거래 논리에 부합하는 간단하고 사용하기 쉬운 이중 이동 평균 전략입니다. 또한 풍부한 최적화 아이디어는이 전략의 추가 개발을위한 공간을 제공합니다.


/*backtest
start: 2023-11-27 00:00:00
end: 2023-12-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true)
src = input(close, title="Source")

price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(5, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"])

ma2 = input(7, title="2nd MA Length")
type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"])

f_hma(_src, _length)=>
    _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length)))
price1 = if (type1 == "SMA")
    sma(price, ma1)
else
    if (type1 == "EMA")
        ema(price, ma1)
    else
        if (type1 == "VWMA")
            vwma(price, ma1)
        else
            f_hma(price, ma1)
    
price2 = if (type2 == "SMA")
    sma(price, ma2)
else
    if (type2 == "EMA")
        ema(price, ma2)
    else
        if (type2 == "VWMA")
            vwma(price, ma2)
        else
            f_hma(price, ma2)

//plot(series=price, style=line,  title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line,  title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)


longCondition = crossover(price1, price2)
if (longCondition) // and time>timestamp(2018,6,1,9,30)
    strategy.entry("Long", strategy.long)

shortCondition = crossunder(price1, price2)
if (shortCondition) // and time>timestamp(2018,6,1,9,30)
    strategy.entry("Short", strategy.short)

lookback1 = input(1, "Lookback 1")
roc1 = roc(price1, lookback1)

ma1up = false
ma1down = false
ma2up = false
ma2down = false

ma1up := nz(ma1up[1])
ma1down := nz(ma1down[1])
ma2up := nz(ma2up[1])
ma2down := nz(ma2down[1])

trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01

if crossover(roc1, trendStrength1)
    ma1up := true
    ma1down := false
    
if crossunder(roc1, -trendStrength1) 
    ma1up := false
    ma1down := true

shortexitCondition = ma1up and ma1down[1]
if (shortexitCondition)
    strategy.close("Short")

longexitCondition = ma1down and ma1up[1]
if (longexitCondition)
    strategy.close("Long")



더 많은