다중 EMA 교차 추세 추종 전략


생성 날짜: 2024-01-04 16:22:07 마지막으로 수정됨: 2024-01-04 16:22:07
복사: 6 클릭수: 588
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

다중 EMA 교차 추세 추종 전략

개요

다중 EMA 평균선 교차 트렌드 추적 전략은 여러 개의 다른 파라미터의 EMA 평균선을 조합하여, 짧은 기간의 EMA에서 골드 포크를 형성할 때 더 많이 하고, 죽은 포크를 형성할 때 공백을 하고, 트렌드 추적 거래를 실현한다. 이 전략은 동시에 12, 26, 50, 100, 200, 89, 144 회기를 포함한 7 개의 EMA 평균선을 사용하여 이러한 EMA의 교차 상황을 비교하여 트렌드 방향을 판단한다.

전략 원칙

이 전략의 핵심 논리는 EMA 평균선의 교차 원칙에 기초한다. EMA 평균선에서, 짧은 주기의 EMA는 가격 변화에 더 민감하게 반응하여 최근의 가격 흐름을 반영할 수 있다. 그리고 긴 주기의 EMA는 가격 변화에 덜 민감하여 장기간의 흐름을 반영할 수 있다. 짧은 주기의 EMA가 아래에서 긴 주기의 EMA를 통과하면, 소위 금색 포크가 형성되며, 이는 단기 경향의 불향을 나타내고, 더 많은 주문을 할 수 있다. 반대로, 짧은 주기의 EMA가 위에서 아래로 긴 주기의 EMA를 통과하면, ?? 은 포크가 형성되고, 짧은 주기의 경향은 불향을 나타내고, 빈 주문을 할 수 있다.

이 전략은 12&26, 12&50, 12&100, 12&200, 12&89 및 12&144을 포함한 7개의 EMA 평균선을 사용한다. 전략은 동시에 이 7개의 EMA의 교차 상황을 비교한다. 예를 들어, 12일 EMA에 26일 EMA를 통과하면 금포크가 형성될 때, 거래소가 열린다.

우위 분석

이 전략의 가장 큰 장점은 여러 시간 스케일의 동시 트렌드를 포착할 수 있다는 것입니다. 여러 EMA 평균선을 조합하여 전략은 단기 트렌드를 포착할 수 있고, 장기 트렌드를 추적할 수 있으며, 여러 시간 축의 트렌드 추적을 구현할 수 있습니다. 또한, 이 전략은 서로 다른 EMA의 매개 변수를 조정하여 성능을 최적화 할 수 있습니다.

위험 분석

이 전략의 주요 위험은 여러 EMA 평균선 조합을 사용할 때 교차 신호가 너무 자주 발생할 수 있다는 것입니다. 예를 들어, 12 일 EMA와 26 일 EMA 사이의 교차는 12 일 EMA와 200 일 EMA 사이의 교차보다 더 자주 발생하며, 포지션 개설 및 포지션의 빈도를 제어하지 않으면 거래 비용과 슬라이드 손실이 증가합니다. 또한, EMA 평균선 자체는 가격 변화에 지각적이며, 신호가 제때 발생하지 않을 수 있습니다.

위와 같은 위험을 줄이기 위해, EMA의 주기적 파라미터를 적절히 최적화하여 교차 빈도가 적절한 범위에 놓을 수 있습니다. 또한 하루에 포지션을 열 수 있는 횟수를 적절히 제한하거나 위험을 제어하기 위해 스톱로스를 설정할 수 있습니다.

최적화 방향

이 전략의 최적화 공간은 주로 EMA 평균선의 파라미터 조정에 집중한다. 더 많은 다른 주기의 파라미터 조합을 시도할 수 있다. 이외에도 다른 유형의 이동 평균도 실험할 수 있다. 또한, 전략은 거래량 지표, 변동률 지표 등과 같은 신호를 필터링하기 위해 부가 조건을 추가할 수 있다. 따라서 신호 품질을 향상시킬 수 있다.

요약하다

다중 EMA 평균선 교차 트렌드 추적 전략은 여러 EMA의 교차 상황을 비교하여 트렌드 방향을 판단하여, 다중 시간 척도의 트렌드 추적을 구현하는 일반적인 트렌드 추적 전략이다. 이 전략의 장점은 다양한 수준의 트렌드를 포착하기 위해 파라미터를 유연하게 조정할 수 있다는 것입니다. 단점은 신호가 너무 자주 발생하여 거래 비용이 증가한다는 것입니다. 파라미터를 최적화하고 보조 조건을 추가하면 전략의 성능을 더욱 향상시킬 수 있습니다.

전략 소스 코드
/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("EMA Trades", overlay=true, pyramiding=4)

src = input(close, title="Source")

shortestLine = input(12, minval=1, title="Shortest Line")
shorterLine = input(26, minval=1, title="Shorter Line")
shortLine = input(50, minval=1, title="Short Line")
middleLine = input(100, minval=1, title="Middle Line")
longLine = input(200, minval=1, title="Long Line")
longerLine = input(89, minval=1, title="Longer Line")
longestLine = input(144, minval=1, title="Longest Line")

shortestLineOutput = ema(src, shortestLine)
shorterLineOutput = ema(src, shorterLine)
shortLineOutput = ema(src, shortLine)
middleLineOutput = ema(src, middleLine)
longLineOutput = ema(src, longLine)
longerLineOutput = ema(src, longerLine)
longestLineOutput = ema(src, longestLine)

//plot(shortestLineOutput, title="Shortest EMA", color=#ffffff)
//plot(shorterLineOutput, title="Shorter EMA", color=#e54fe6)
//plot(shortLineOutput, title="Short EMA", color=#4e6bc3)
//plot(middleLineOutput, title="Middle EMA", color=#1dd6d8)
//plot(longLineOutput, title="Long EMA", color=#d0de10)
//plot(longerLineOutput, title="Longer EMA", color=#ef6a1a)
//plot(longestLineOutput, title="Longest EMA", color=#ff0e0e)

longEnrtyCondition_1 = crossover(shortestLineOutput[1], shorterLineOutput[1]) and shortestLineOutput > shorterLineOutput
longEntryCondition_2 = crossover(shortestLineOutput[1], shortLineOutput[1]) and shortestLineOutput > shortLineOutput
longEnrtyCondition_3 = crossover(shortestLineOutput[1], middleLineOutput[1]) and shortestLineOutput > middleLineOutput
longEntryCondition_4 = crossover(shortestLineOutput[1], longLineOutput[1]) and shortestLineOutput > longLineOutput

shortEnrtyCondition_1 = crossunder(shortestLineOutput[1], shorterLineOutput[1]) and shortestLineOutput < shorterLineOutput
shortEntryCondition_2 = crossunder(shortestLineOutput[1], shortLineOutput[1]) and shortestLineOutput < shortLineOutput
shortEnrtyCondition_3 = crossunder(shortestLineOutput[1], middleLineOutput[1]) and shortestLineOutput < middleLineOutput
shortEntryCondition_4 = crossunder(shortestLineOutput[1], longLineOutput[1]) and shortestLineOutput < longLineOutput

if (longEnrtyCondition_1)
    strategy.entry("Buy1", strategy.long)
    strategy.exit("Sell1")

if (longEntryCondition_2)
    strategy.entry("Buy2", strategy.long)
    strategy.exit("Sell2")

if (longEnrtyCondition_3)
    strategy.entry("Buy3", strategy.long)
    strategy.exit("Sell3")

if (longEntryCondition_4)
    strategy.entry("Buy4", strategy.long)
    strategy.exit("Sell4")

if (shortEnrtyCondition_1)
    strategy.entry("Sell1", strategy.short)
    strategy.exit("Buy1")

if (shortEntryCondition_2)
    strategy.entry("Sell2", strategy.short)
    strategy.exit("Buy2")

if (shortEnrtyCondition_3)
    strategy.entry("Sell3", strategy.short)
    strategy.exit("Buy3")

if (shortEntryCondition_4)
    strategy.entry("Sell4", strategy.short)
    strategy.exit("Buy4")