
이 전략은 간단한 이동 평균 ((SMA) 과 평균 실제 변동률 ((ATR) 을 기반으로 한 동적 추적 스톱로스를 설정하는 긴 라인 거래 전략이다. 그것은 트렌드 추적과 위험 관리의 장점을 결합하여 회수 제어와 이익을 극대화하기 위해 고안되었습니다.
종결 가격 상위에서 SMA 200일과 ATR 14일을 통과할 때, 더 많은 입장을 한다. 종결 가격 아래에서 SMA 200일과 ATR 14일을 통과할 때, 평소 위치 상쇄한다. 이 전략은 SMA 200을 사용하여 큰 트렌드 방향을 판단하고, ATR을 사용하여 중지 손실 라인을 설정하여 동적 추적 상쇄를 실현한다. 구체적으로, 구매 신호는 종결 가격 SMA 200일과 ATR 14일을 돌파하는 것이며, 이 돌파는 현재 상승 추세에 있다는 것을 나타냅니다.
이 전략은 SMA와 ATR 두 지표의 장점을 결합한다. SMA 200은 시장 소음을 필터링하여 긴 선의 주 방향을 고정시킬 수 있으며, ATR 14일은 최근 2 주간의 변동에 따라 스톱 라인을 설정하여 동적으로 추적한 스톱의 효과를 얻을 수 있다. 이것은 추세에서 지속적인 수익을 창출하는 동시에 회전을 효과적으로 제어할 수 있다.
수익률이 높다. 동향을 따라가며, 손실을 제어하는 위험을 막고, 높은 수익률을 얻는다.
회수 제어 ATR 동적 추적은 갑작스러운 사건의 영향을 줄이고, 효과적으로 회수를 제어
매개 변수는 간단하다. 단 두 개의 매개 변수만 사용해서 위험과 이익의 균형을 이루고, 과도한 최적화를 피한다.
이 전략에는 몇 가지 위험도 있습니다. 주요 위험은 다음과 같습니다:
트렌드 반전 위험. 전략 자체는 트렌드 반전을 판단할 수 없으며, 갑작스러운 변동이 발생하면 큰 손실을 초래할 수 있다.
SMA 지연 위험. SMA는 지연성이 있어서 트렌드 변화를 즉각적으로 반영할 수 없다.
ATR 변수 설정 위험. ATR 변수가 너무 크거나 너무 작으면 정책 성능에 영향을 미칩니다.
대응방법:
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
다양한 SMA와 ATR 변수 조합을 테스트하여 최적의 변수를 찾습니다.
다른 기술 지표 판단 역전, 예를 들어 MACD를 추가하십시오.
변화 제지, 이동 제지 등으로 손해 제지를 최적화한다.
주식의 기본 지표와 결합하여, 부진한 주식을 구입하는 것을 피하십시오.
이 전략은 트렌드 추적 및 동적 위험 관리 방법을 통합하여 긴 선을 보유하는 동안의 중지 손실 및 정지 최적화를 구현합니다. 그것은 높은 수익률, 회수 제어, 위험 이익 균형의 특징을 가지고 있습니다. 그러나 또한 특정 트렌드 반전 위험과 변수 최적화 어려움이 있습니다.
/*backtest
start: 2023-01-30 00:00:00
end: 2024-02-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("SMA+ATR Strategie", overlay=true)
// Benutzer-Inputs für SMA, ATR und die Anzeigeoption
smaLength = input(200, title="SMA Länge")
atrLength = input(14, title="ATR Länge")
showSMAandATR = input(true, title="Zeige SMA und ATR-Bänder")
// Berechnung von SMA und ATR
sma = ta.sma(close, smaLength)
atr = ta.atr(atrLength)
// Kauf- und Verkaufslogik basierend auf SMA und ATR
buyCondition = close > sma + atr
sellCondition = close < sma - atr
// Variable zum Speichern des Eintrittspreises
var float entryPrice = na
// Kauf- und Verkaufssignale
if (buyCondition)
strategy.entry("Buy", strategy.long)
entryPrice := close // Speichere den Eintrittspreis
if (sellCondition)
// Nur wenn ein Kauf stattgefunden hat
if not na(entryPrice)
// Berechne die Performance seit dem Kaufsignal
performanceSinceBuy = ((close - entryPrice) / entryPrice) * 100
// Anzeigen der Performance
// Wähle die Box-Farbe basierend auf dem Vorzeichen der Performance
plColor = performanceSinceBuy >= 0 ? color.green : color.red
// Anzeigen der Performance in der entsprechenden Farbe
plBox = "P/L: " + str.tostring(performanceSinceBuy, "#.##") + "%"
label.new(bar_index, high, text=plBox, color=plColor, textcolor=color.white, style=label.style_label_center, yloc=yloc.price)
// Schließe den Trade und setze den Eintrittspreis zurück
strategy.close("Buy")
entryPrice := na
// Optionale Anzeige von SMA und ATR-Band
plot(showSMAandATR ? sma : na, color=color.blue, title="SMA 200")
plot(showSMAandATR ? sma + atr : na, color=color.green, title="SMA 200 + ATR")
plot(showSMAandATR ? sma - atr : na, color=color.red, title="SMA 200 - ATR")