단일 이동 평균 크로스오버 볼링거 밴드 전략

저자:차오장, 날짜: 2023-12-22 14:10:14
태그:

img

전반적인 설명

이 전략은 단일 이동 평균 및 볼링거 밴드 지표에 기반합니다. 가격이 볼링거 밴드의 상부 또는 하부 밴드를 통과 할 때 구매 및 판매 신호를 생성합니다. 또한 트렌드를 결정하기 위해 이동 평균의 방향을 통합하여 MA가 상승하고 MA가 감소 할 때 오래 걸립니다.

전략 논리

이 전략은 주로 다음의 지표를 이용해서 판단합니다.

  1. 이동 평균 (SMA): CLOSE 가격의 단순한 이동 평균, 가격 추세를 나타냅니다.
  2. 상부 볼링거 밴드: 저항 수준을 나타냅니다. 브레이크오웃은 강한 추진력을 나타냅니다.
  3. 로버 볼링거 밴드 (Lower Bollinger Band): 지원 수준을 나타냅니다. 분포는 트렌드 역전 가능성을 나타냅니다.

특정 거래 신호는 다음과 같습니다.

  1. 구매 신호: 닫기 가격이 상단 범위를 뚫고 MA가 상승할 때
  2. 판매 신호: 닫기 가격이 하위 대역을 넘어서고 MA가 떨어질 때

트렌드와 브레이크오웃을 결합하면 거래 신호가 더 신뢰할 수 있고 가짜 브레이크오웃을 피할 수 있습니다.

장점

  1. 간단하고 명확한 규칙, 이해하기 쉽고 실행하기 쉽습니다.
  2. MA는 짧은 황금 시장과 긴 곰 시장을 피하는 일반적인 경향을 판단합니다.
  3. 볼링거 밴드 상부와 하부 밴드는 지역 브레이크오웃 포인트를 정확하게 찾습니다.
  4. 상대적으로 작은 수요는 대부분의 사람들의 위험 선호도에 부합합니다.

위험성

  1. 단일 지표는 잘못된 신호를 생성하는 경향이 있습니다. 매개 변수 조정으로 개선 될 수 있습니다.
  2. 큰 시장 변동에 대처할 수 없습니다, 그에 따라 중지 손실을 조정할 수 있습니다.
  3. 메가 트렌드에서 더 많은 이익을 얻을 수 없으므로 더 큰 포지션 크기를 고려할 수 있습니다.

개선

  1. 더 많은 제품에 맞게 MA 기간을 최적화하십시오.
  2. MACD 같은 다른 필터를 추가하여 잘못된 신호를 줄이십시오.
  3. 최대 마감량을 제한하기 위해 동적으로 스톱 손실을 조정합니다.
  4. PnL의 성과를 안정시키기 위해 자금 관리를 도입합니다.

결론

일반적으로 이것은 대부분의 사람들에게 적합한 간단하지만 실용적인 전략입니다. 일부 조정 및 최적화로 더 견고하고 더 많은 시장 상황에 적응 할 수 있습니다. 그것은 추천 할 가치가있는 전략입니다.


/*backtest
start: 2023-12-14 00:00:00
end: 2023-12-18 19:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title="single sma cross", shorttitle="single sma cross",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,overlay=true,currency="USD")
s=input(title="s",defval=90)
p=input(title="p",type=float,defval=.9,step=.1)

sa=sma(close,s)
plot(sa,color=red,linewidth=3)
band=stdev(close,s)*p
plot(band+sa,color=lime,title="")
plot(-band+sa,color=lime,title="")

// ===Strategy Orders============================================= ========
inpTakeProfit = input(defval = 0, title = "Take Profit", minval = 0)
inpStopLoss = input(defval = 0, title = "Stop Loss", minval = 0)
inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na

longCondition = crossover(close,sa+band) and rising(sa,5)
shortCondition = crossunder(close,sa-band) and falling(sa,5)
crossmid = cross(close,sa)


strategy.entry(id = "Long", long=true, when = longCondition)
strategy.close(id = "Long", when = shortCondition)
strategy.entry(id = "Short", long=false, when = shortCondition)
strategy.close(id = "Short", when = longCondition)
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=crossmid)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=crossmid)

더 많은