동적 SMMA 및 SMA 크로스오버 전략

저자:차오장, 날짜: 2024-02-02 11:38:08
태그:

img

전반적인 설명

이 전략은 50주기 매끄러운 이동 평균 (SMMA) 과 20주기 간단한 이동 평균 (SMA) 사이의 교차 신호를 사용하여 입출을 결정합니다. 빠른 SMA 라인이 느린 SMMA 라인의 위를 넘을 때 구매 신호를 생성하고, SMA가 SMMA 아래를 넘을 때 판매 신호를 생성합니다. 동시에 전략은 수익을 잠금하고 위험을 제어하기 위해 고정된 수익 및 동적 스톱 손실 수준을 미리 설정합니다.

전략 논리

  1. 50주기 SMMA와 20주기 SMA를 계산하고 그래프화합니다.
  2. SMA가 아래로부터 SMMA를 넘을 때 구매 신호가 생성됩니다. 반대로 SMA가 위에서 SMMA를 넘을 때 판매 신호가 생성됩니다.
  3. 구매 및 판매 신호가 발생하면 각각 BuySell 포지션을 설정합니다.
  4. 각 포지션에 대해 150개의 틱을 고정된 수익 수준으로 설정합니다.
  5. 신호 바 다음 바의 폐쇄 가격에 동적 스톱 로스 수준을 설정합니다.
  6. 만약 가격이 영업이익 수준에 도달하면 영업이익이 발생합니다. 만약 가격이 영업이익 수준을 달성하면 영업이익이 발생합니다.

강점

  1. 이중 이동 평균 전략은 간단한 원칙으로 작동하기 쉽고 이해하기 쉽습니다.
  2. SMMA는 트렌드를 더 잘 파악하기 위해 SMA보다 개선되었습니다.
  3. 서로 다른 기간의 SMA와 SMMA를 결합하면 트렌드를 파악하는 동안 소음을 필터하는 데 도움이 됩니다.
  4. 동적 스톱 손실을 채택하면 시장 변화에 따라 스톱 수준을 조정하여 위험을 효과적으로 제어 할 수 있습니다.
  5. 미리 설정된 수익 수준은 적시에 수익을 확보하는 데 도움이 됩니다.

위험성

  1. 이중 이동 평균 전략은 잘못된 신호를 생성하고 속이는 경향이 있습니다. 과도한 거래를 피하기 위해 신호 필터링을 사용할 수 있습니다.
  2. 고정 취업이익은 강한 추세를 놓칠 수 있습니다. 이동 취업이익 또는 취업이익 비율을 기반으로 취업이익을 고려 할 수 있습니다.
  3. 동적 스톱 로스는 변동성 조건에서 시장 가격에 너무 가까워질 수 있습니다. 적절한 스톱 로스 범위를 넓히는 것이 고려되어야합니다.
  4. 제품과 기간의 차이에 주의가 필요합니다.

최적화 방향

  1. 다양한 매개 변수 (사이클 기간, 필터 기준 등) 의 조합을 테스트하여 최적을 찾습니다.

  2. 부피가 상승하는 것과 같은 다른 요소들을 포함해서 신호를 필터합니다.

  3. 최적의 매개 변수를 찾기 위해 매개 변수 최적화 도구를 사용하십시오.

  4. 후속 정지 또는 이익 비율에 기반한 출구와 같은 다른 수익을 취하는 방법을 통합하는 것을 고려하십시오.

  5. 시장의 변동성을 기반으로 동적 스톱 로스 범위를 계산합니다.

결론

이 전략은 비교적 간단한 논리를 가지고 있으며, 이중 이동 평균을 통해 트렌드 방향을 포착합니다. 이윤을 취득하고 위험 통제를 위해 고정 취득 이익과 동적 스톱 손실의 유연한 사용은 위험과 보상 사이의 균형을 이룬다. 추가 매개 변수 및 논리 최적화는 이 전략을 더 넓은 시장 조건에 적응시킬 수 있습니다.


/*backtest
start: 2023-01-26 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("50 SMMA and 20 SMA Crossover with TP and SL", overlay=true)

// Define 50 SMMA
smma50 = sma(close, 50)

// Define 20 SMA
sma20 = sma(close, 20)

// Plotting the SMMA and SMA
plot(smma50, color=color.blue, title="50 SMMA")
plot(sma20, color=color.red, title="20 SMA")

// Initialize TP and SL variables
tp = 150
var float sl_price = na

// Buy Signal
buySignal = crossover(sma20, smma50)
strategy.entry("Buy", strategy.long, when = buySignal)
strategy.exit("Take Profit/Stop Loss", from_entry="Buy", profit=tp, loss=sl_price)

// Sell Signal
sellSignal = crossunder(sma20, smma50)
strategy.entry("Sell", strategy.short, when = sellSignal)
strategy.exit("Take Profit/Stop Loss", from_entry="Sell", profit=tp, loss=sl_price)

// Update stop loss level on every crossover
if (buySignal or sellSignal)
    sl_price := close[bar_index + 1]

// Plot Stop Loss level
plotshape(series=sl_price != na, title="Stop Loss Level", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)


더 많은