SMA 크로스오버 컴파운딩 전략

저자:차오장, 날짜: 2024-04-01 11:11:02
태그:

img

전반적인 설명

이 전략은 간단한 이동 평균 (SMA) 의 교차를 기반으로 한 긴 / 짧은 전략이다. 거래 신호를 생성하기 위해 서로 다른 기간을 가진 두 개의 SMA를 사용합니다. 빠른 SMA가 아래에서 느린 SMA 위에 넘을 때 긴 신호를 생성합니다. 빠른 SMA가 위에서 느린 SMA 아래에 넘을 때 짧은 신호를 생성합니다. 전략은 주류 계좌 잔액 크기 및 누적 이익에 따라 포지션을 복합화하고 동적으로 조정하는 개념을 포함합니다. 이것은 계정 잔액이 시간이 지남에 따라 성장하여 전략의 수익성을 향상시킵니다.

전략 원칙

이 전략의 핵심 원칙은 SMA 크로스오버를 활용하여 거래 신호를 생성하는 것입니다. SMA는 특정 기간 동안의 종료 가격을 평균화하여 가격의 전반적인 방향을 결정하는 트렌드를 따르는 지표입니다. 서로 다른 기간을 가진 두 개의 SMA를 사용하여 전략은 시장 트렌드의 변화를 포착 할 수 있습니다. 빠른 SMA가 느린 SMA 위에 넘어가면 상승 추세가 형성 될 수 있음을 나타냅니다. 반대로 빠른 SMA가 느린 SMA 아래에 넘어가면 하락 추세가 발전할 수 있음을 나타냅니다.

이 전략은 포지션 사이징을 관리하기 위해 컴파운딩의 개념을 사용합니다. 현재 계좌 잔액과 누적 이익에 기초하여 포지션 크기를 계산합니다. 이것은 계좌 잔액이 증가함에 따라 전략이 비율적으로 포지션 크기를 증가시켜 수익 잠재력을 극대화한다는 것을 의미합니다. 포지션 크기를 동적으로 조정함으로써 전략은 계좌 성장의 장점을 완전히 활용 할 수 있습니다.

전략적 장점

  1. 단순성: 전략은 SMA 크로스오버에 기반하여 간단하고 직설적인 트렌드를 따르는 전략입니다. 복잡한 시장 타이밍이나 주관적인 판단이 필요하지 않아 구현 및 관리가 쉽습니다.

  2. 트렌드 추적: SMA 크로스오버를 활용함으로써 전략은 시장 트렌드를 효과적으로 포착합니다. 상승 추세 동안 긴 거래와 하락 추세 동안 짧은 거래를 수행하여 수익 잠재력을 극대화 할 수 있습니다.

  3. 동적 포지션 사이징: 전략은 포지션 크기를 관리하기 위해 컴파운딩의 개념을 사용합니다. 계정 잔액과 누적 이익에 따라 포지션 크기를 동적으로 조정함으로써 전략은 계정 성장의 이점을 완전히 활용하여 수익성을 향상시킬 수 있습니다.

  4. 적응력: 전략은 주식, 외환, 원자재 등 다양한 시장과 자산 클래스에 적용될 수 있습니다. 단순성과 적응력이 다재다능한 거래 전략으로 만듭니다.

전략 위험

  1. 시장 위험: 전략은 시장 트렌드의 지속에 의존합니다. 시장 변동성 또는 트렌드 역전 중에 손실을 입을 수 있습니다. 예기치 않은 사건, 경제 데이터 발표 및 기타 요인은 시장 방향의 갑작스러운 변화를 유발하여 전략에 부정적인 영향을 줄 수 있습니다.

  2. 매개 변수 위험: 전략의 성능은 SMA 기간 선택에 달려 있습니다. 다른 기간 조합은 다른 결과를 가져올 수 있습니다. 잘못된 매개 변수 선택은 최적의 전략 성능 또는 놓친 거래 기회로 이어질 수 있습니다.

  3. 오버 트레이딩: 변동적인 시장 조건에서 빈번한 SMA 크로스오버는 오버 트레이딩, 트랜잭션 비용 증가 및 미끄러짐으로 이어질 수 있으며 이는 전략의 전반적인 성과에 영향을 줄 수 있습니다.

  4. 합성 위험: 합성 위험은 전략의 수익성을 향상시킬 수 있지만 손실 위험을 증폭시킵니다. 연속 손실의 경우 계좌 잔액이 빠르게 감소하여 전략의 회복 잠재력을 제한 할 수 있습니다.

전략 최적화 방향

  1. 매개 변수 최적화: 전략의 성능을 향상시키는 최적의 매개 변수 조합을 찾기 위해 SMA의 기간을 최적화합니다. 역 테스트를 위해 역사적 데이터를 활용하고 가장 좋은 매개 변수를 식별하기 위해 그리드 검색 또는 유전 알고리즘과 같은 최적화 알고리즘을 사용합니다.

  2. 리스크 관리: 거래 당 손실을 제한하고 이익을 보호하기 위해 스톱 로스 및 테이크 노프트와 같은 리스크 관리 조치를 도입합니다. 다른 시장 조건에 적응하기 위해 시장 변동성에 따라 스톱 로스 및 테이크 노프트 수준을 동적으로 조정합니다.

  3. 트렌드 확인: SMA 크로스오버 외에도 MACD 또는 ADX와 같은 다른 트렌드 확인 지표를 통합하여 잘못된 신호를 필터링하고 신호 품질을 향상시킵니다. 여러 지표가 동시에 트렌드를 확인 할 때만 거래를 실행하여 전략의 신뢰성을 향상시킵니다.

  4. 포지션 사이즈 최적화: 거래 당 위험 노출을 제한하기 위해 위험 통제 조치를 도입하여 복합 전략의 포지션 사이즈 규칙을 최적화하십시오. 각 거래에 대한 포지션 크기를 결정하고 위험과 보상을 균형을 맞추기 위해 켈리 기준 또는 고정 위험 비율을 사용하는 것을 고려하십시오.

결론

이 전략은 SMA 크로스오버를 기반으로 트렌드 추적 전략이며, 포지션 크기를 관리하기 위해 컴파운딩의 개념을 통합합니다. 이 전략의 장점은 단순성, 트렌드 추적 능력, 동적 포지션 사이징 및 적응력입니다. 그러나 시장 위험, 매개 변수 위험, 오버 트레이딩 및 컴파운딩 위험과 같은 과제에도 직면합니다. 전략을 개선하기 위해 매개 변수 최적화, 위험 관리 조치 도입, 트렌드 확인 및 포지션 사이징 규칙을 최적화하는 것을 고려하십시오. 지속적인 최적화 및 정밀화로 전략은 다양한 시장 조건에서 일관된 성능을 달성 할 잠재력을 가지고 있습니다.


/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Umesh SMA Crossover Strategy", overlay=true)

// Input parameters
fast_length = input.int(9, title="Fast SMA Length")
slow_length = input.int(21, title="Slow SMA Length")

// Calculate SMAs
fast_sma = ta.sma(close, fast_length)
slow_sma = ta.sma(close, slow_length)

// Plot SMAs
plot(fast_sma, color=color.blue, title="Fast SMA")
plot(slow_sma, color=color.red, title="Slow SMA")

// Strategy logic
longCondition = ta.crossover(fast_sma, slow_sma)
shortCondition = ta.crossunder(fast_sma, slow_sma)

// Initialize cumulative profit with netprofit
var float cumulative_profit = na
if (na(cumulative_profit))
    cumulative_profit := strategy.netprofit

// // Initialize starting balance
// var float starting_balance = na
// if (na(starting_balance))
//     starting_balance := strategy.equity

// Initialize starting balance
var float starting_balance = na
if (na(starting_balance))
    starting_balance := 100000.0 // Initial balance

// Calculate profit or gains
if (strategy.opentrades != 0)
    cumulative_profit := strategy.netprofit + (strategy.equity - starting_balance)

// Calculate position size based on current balance and cumulative profit
//position_size = 100000 
position_size = starting_balance + cumulative_profit

// Entry conditions
if (longCondition)
    strategy.entry("Long", strategy.long, qty = position_size / close)
if (shortCondition)
    strategy.entry("Short", strategy.short, qty = position_size / close)

// // Entry conditions
// if (longCondition)
//     strategy.entry("Long", strategy.long, qty = 100000 / close)
// if (shortCondition)
//     strategy.entry("Short", strategy.short, qty = 100000 / close)


// Plot strategy.equity 
plot(strategy.equity, color=color.green, title="Cumulative Profit")

// Print cumulative profit value on chart
label.new(x = bar_index, y = strategy.equity, text = str.tostring(strategy.equity), style=label.style_label_down, color=color.new(color.green, 0), size=size.small)
// Plot cumulative profit
plot(cumulative_profit, color=color.green, title="Cumulative Profit")

// Print cumulative profit value on chart
label.new(x = bar_index, y = cumulative_profit, text = str.tostring(cumulative_profit), style=label.style_label_down, color=color.new(color.green, 0), size=size.small)

// Plot cumulative profit
plot(position_size, color=color.green, title="Cumulative Profit")

// Print cumulative profit value on chart
label.new(x = bar_index, y = position_size, text = str.tostring(position_size), style=label.style_label_down, color=color.new(color.green, 0), size=size.small)


더 많은