SMA 크로스오버 롱-숏 전략


생성 날짜: 2024-04-01 11:11:02 마지막으로 수정됨: 2024-04-01 11:11:02
복사: 0 클릭수: 605
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

SMA 크로스오버 롱-숏 전략

개요

이 전략은 간단한 이동 평균 ((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)