
이 전략은 20일 지수 이동 평균 (EMA) 을 기반으로 한 트렌드 추적 거래 시스템이다. 핵심 아이디어는 가격이 20일 평균선을 뚫고 상향으로 올라가는 다중 트렌드 기회를 포착하고, 가격이 평균선을 넘어가는 경우 평점 퇴출하는 것이다. 이 전략은 간단하고 직관적이며, 일선 레벨 상향으로 운행하는 것을 좋아하는 트렌디 자산에 적용되며, 중장기 상승 추세를 효과적으로 포착할 수 있다.
이 전략의 핵심 원리는 기술 분석의 평형 이론에 기초하고, 구체적으로 구현 논리는 다음과 같다:
코드 구현에서 볼 때, 이 전략은 Pine Script 언어로 작성되어 TradingView의 전략 모듈을 통해 재검토된다. 입문 조건 (longCondition) 과 출구 조건 (exitCondition) 은 명확하게 정의되어 있으며 거래 실행은 간단하고 직관적입니다. 전략에는 승률 계산 논리도 포함되어 있으며, 평점시의 순이익이 긍정적 인지를 판단하여 거래가 수익성이 있는지 판단하고, 차트에 승률 데이터를 동적으로 표시합니다.
간단하고 이해하기 쉬운: 전략 논리가 명확하고, 복잡한 지표 조합이 없으며, 이해하기 쉽고 실행이 쉬워서 거래자의 심리적 부담을 줄입니다.
트렌드 포착 능력20일 EMA는 중장기 트렌드의 효과적인 지표로, 단기 시장 소음을 필터링하여 주요 트렌드 방향을 효과적으로 포착할 수 있다.
자동화 거래이 전략의 규칙은 명확하고, 완전히 자동화되어서, 인간의 감정적 방해가 없앨 수 있습니다.
매우 적응력이 좋다이 전략은 여러 가지 트렌드 자산에 적용되며, 특히 일선 수준에서 트렌드 특성이 뚜렷한 품종에 적용됩니다.
성과 추적: 내장된 승률 통계 기능으로, 전략의 실적을 실시간으로 파악할 수 있으며, 거래자가 전략의 효과를 객관적으로 평가할 수 있도록 돕는다.
위험 관리에 대한 명확함“이번 경기에서, 우리가 할 수 있는 것은, 우리가 할 수 있는 것은, 우리가 할 수 있는 것은, 우리가 할 수 있는 것은, 우리가 할 수 있는 것은, 우리가 할 수 있는 것은, 우리가 할 수 있는 것은, 우리가 할 수 있는 것은, 우리가 할 수 있는 것은, 우리가 할 수 있는 것은”.
자금 효율성: 전략은 트렌드 확인 후 풀 포지션으로 트렌드 강점에서의 자금 효율을 최대한 활용할 수 있다.
시장의 부진수평 변동 시장에서 20 일 EMA를 자주 통과하는 것은 자주 거래와 “화장” 현상을 유발하여 연속적으로 작은 손실을 초래합니다.
뒤처진 문제: 지연 지표로서, EMA는 트렌드 전환점에 지연이 있을 것이며, 이는 진입이 늦거나 진출이 늦어 최상위 가격을 놓치게 할 수 있다.
위험 관리 요소의 부재현재 전략에는 스톱로스 및 스톱스 매개 변수가 설정되어 있지 않으며, 극단적인 상황에서는 더 큰 철회 위험을 감수할 수 있습니다.
자금 관리가 너무 급진적이었습니다.: 전략은 기본적으로 100%의 자금을 사용하여 거래하고, 변동성에 따라 포지션 크기를 조정하지 않고, 위험을 더 많이 감수한다.
단 하나의 지표에 지나치게 의존하는 것20일 EMA의 결정에만 의존하고, 다중 지표 확인 메커니즘이 없어서 잘못된 신호가 발생할 수 있습니다.
오차 위험을 감지합니다.: 간단한 평형 전략은 재검토에서 잘 작동할 수 있지만 실전에서는 미끄러짐, 유동성 및 수수료와 같은 요인에 영향을 받을 수 있습니다.
시장 환경의 필터링 부족: 트렌드 강도, 변동률 등 다양한 시장 환경에 따라 전략 매개 변수가 조정되지 않으며, 적응성이 제한된다.
트렌드 강도 필터링: ADX ((평균 방향 지수) 와 같은 트렌드 강도 지표를 도입할 수 있으며, 트렌드가 명확한 시장 환경에서만 거래하고, 흔들리는 시장의 빈번한 거래를 피한다.
다중 주기 확인 메커니즘: 더 높은 레벨 (예: 주경선) 과 더 낮은 레벨 (예: 4 시간선) 의 트렌드 방향 확인을 결합하여 신호 품질을 향상시킵니다.
동적 중지 손해 설정: ATR (진실 변동의 폭) 지표를 도입하여 시장 변동에 따라 위험 을 조정하는 동적 스톱로스를 설정합니다.
자금 관리 최적화: 변동률이나 위험에 따라 포지션 크기를 조정합니다. 예를 들어, 높은 변동성이있을 때 포지션을 줄이고 낮은 변동성이있을 때 포지션을 증가시킵니다.
추가된 숫자가 확인됩니다.: 합성 트래픽 분석으로, 돌파 신호가 충분한 트래픽을 지원하고, 신호의 신뢰성을 높인다.
매개 변수 최적화 및 적응: EMA 주기에 대한 파라미터 최적화를 수행하고, 심지어는 적응 평균선 (KAMA와 같은) 을 사용하는 것을 고려하여, 다른 시장 상태에 더 잘 적응한다.
이윤 보호 장치 추가: 트렌드 트래킹 기능, 트렌드 상황에서 수익을 보호하고 수익률을 높여줍니다.
계절적 또는 시간적 필터를 추가합니다.: 특정 자산에 대해 계절적 규칙이 존재할 수 있고, 시간 필터 조건을 추가하여 거래 시기를 최적화한다.
20평선 트렌드 브레이크 양적 거래 전략은 가격과 20일 EMA의 교차 신호를 포착하여 거래하는 단순하고 고전적인 트렌드 추적 시스템이다. 이 전략의 가장 큰 장점은 논리적으로 명확하고 실행 및 모니터링이 쉽고, 특히 트렌드가 명확한 시장 환경에 적합하다. 그러나 단일 지표 전략으로서, 그것은 또한 충격적인 시장의 부실성과 신호 지연과 같은 전형적인 위험에 직면합니다.
트렌드 강도 필터링, 다중 주기 확인, 동적 상쇄 및 최적화 자금 관리와 같은 방향의 개선을 추가하여 이 전략은 눈에 띄게 향상 될 수 있습니다. 이 전략을 사용할 때, 거래자는 시장 환경에 대한 적합성에 주의를 기울여야하며 특정 거래 품종의 특성에 따라 타겟 조정해야합니다.
전반적으로, 이것은 초보자 입문자 양적 거래에 적합한 기본 전략이며, 더 복잡한 거래 시스템의 기본 구성 요소로도 사용될 수 있습니다. 지속적인 최적화 및 개선으로, 포트폴리오에 지속적인 알파 수익을 기여하는 안정적인 거래 시스템이 될 잠재력이 있습니다.
/*backtest
start: 2024-04-02 00:00:00
end: 2025-04-01 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © SirTraderUSA
//@version=6
plot(close)//@version=5
strategy("EMA 20 Bullish Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Define 20-day EMA
emaLength = 20
ema20 = ta.ema(close, emaLength)
// Entry Condition: Price crosses above EMA 20
longCondition = ta.crossover(close, ema20)
// Exit Condition: Price crosses below EMA 20
exitCondition = ta.crossunder(close, ema20)
// Execute Trades
if longCondition
strategy.entry("Long", strategy.long)
if exitCondition
strategy.close("Long")
// Win/Loss Calculation
var float wins = 0
var float losses = 0
var float totalTrades = 0
if strategy.position_size == 0 and strategy.opentrades > totalTrades
totalTrades := strategy.opentrades
if strategy.netprofit > 0
wins := wins + 1
else
losses := losses + 1
// Winning Percentage
winRate = totalTrades > 0 ? (wins / totalTrades) * 100 : na
// Display Win Rate on Chart
label = "Win Rate: " + str.tostring(winRate, "#.##") + "%"
labelText = label + "\nTotal Trades: " + str.tostring(totalTrades, "#")
label_pos = close * 1.02