BB채널 교차 및 SMA200 이동평균 돌파 추세추종 전략


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

BB채널 교차 및 SMA200 이동평균 돌파 추세추종 전략

개요

이 전략은 부린 띠와 이동 평균을 결합하여 트렌드를 추적하는 거래 시스템을 설계했습니다. 가격이 부린 띠를 뚫고 SMA200보다 높을 때 더 많이하고, 가격이 부린 띠를 넘어갈 때 일부 평점, 가격이 SMA200을 넘어갈 때 완전히 평점입니다. 이 전략은 트렌드를 추적하고, 트렌드 변화가 있을 때 적시에 중단합니다.

전략 원칙

  1. SMA200 Exponential Moving Average를 계산하여 큰 추세를 판단합니다.
  2. 브린 띠를 계산하고, 상단, 중단, 하단 레일을 포함하고, 수익 영역으로 색을 채웁니다.
  3. 부린이 SMA200보다 높을 때 상승 추세에 있음을 나타냅니다.
  4. 가격 상승이 부린 반도 중간 궤도를 통과하면 더 많은 입장을 취하십시오.
  5. 가격 하향으로 부린 반도 하향 경로를 벗어나면 부분적으로 평행합니다.
  6. 가격이 SMA200을 넘어서면, 큰 추세가 반전되고, 모든 지점이 평평해집니다.
  7. 막상 손실을 방지하기 위해 스톱포인트를 설정하세요.
  8. 계좌 자금과 위험 부담을 기준으로 계산한 거래 수

이 전략은 트렌드가 존재한다는 전제를 가지고 있으며, 브린은 SMA200 위에 완전히 위치해야하며, 명확한 상승 추세에서만 다중 방향 진입을 선택합니다. 하향 추세가 올 때, 핵심 지점 주식 손실과 전체 포지션 손실을 통해 위험을 제어합니다.

우위 분석

  1. 단 하나의 지표에 근거하지 않고, 브린 대역을 이용한 판단이 확연한 추세입니다.
  2. SMA200는 큰 트렌드 방향을 판단하고, 흔들리는 상황에서 무의미한 거래를 피합니다.
  3. 일부 손실과 이익, 트렌드 추적
  4. 중요한 지점에서의 손실을 적시적으로 막고, 손실을 최대한 막는 것
  5. 거래 수를 계산하여 단일 손실을 너무 많이 방지하기 위해 위험 관리 개념을 도입합니다.

위험 분석

  1. 브린의 상하부 뚫림으로 인해 발생하는 거래 신호는 높은 가짜 신호 비율을 나타낼 수 있습니다.
  2. 일부 정지점 설정은 조기 정지를 방지하기 위해 최적화해야 합니다.
  3. 스톱포인트가 너무 작아서 너무 자주 스톱포인트가 발생할 수 있습니다.
  4. SMA 사이클 파라미터는 지연과 민감성을 균형을 맞추기 위해 테스트 최적화가 필요합니다.
  5. 거래 수를 계산하는 방법은 과도한 단편을 방지하기 위해 최적화가 필요할 수 있습니다.

브린 대역을 신중하게 테스트하고, 부분 손실 전략을 최적화하고, SMA 주기 대역을 조정하고, 더 과학적인 위험 관리 방법을 도입함으로써 이러한 위험을 줄일 수 있다.

최적화 방향

  1. 테스트는 브린 대역변수를 최적화하여 신호 오차율을 낮춘다.
  2. 더 적절한 부분적 중단점을 설정하는 방법을 연구합니다.
  3. SMA 주기 변수의 최우수값 테스트
    1. 고정 스톱 포인트 대신 적응 스톱 포인트를 도입하는 것을 고려하십시오.
  4. 연구에서는 거래 규모를 더 과학적으로 계산하기 위해 변동률을 도입했습니다.
  5. 트랜잭션 비용에 대한 모의에 대한 회수
  6. 전략적 안정성을 높이기 위해 다른 지표와 함께 사용하는 것을 고려하십시오.

요약하다

이 전략은 부린 띠 통로, SMA 평균선 지표를 통합하여 더 완전한 트렌드 추적 전략을 설계했다. 트렌드가 존재할 때 판단할 때 더 신뢰할 수 있고, 더 강한 트렌드 추적 능력을 가지고 있다. 지속적인 최적화 스톱 로스 전략을 통해, 신호 오판율을 줄이고, 과학적 위험 관리 수단을 도입함으로써, 이 전략은 장기적으로 실물 추적할 가치가 있는 트렌드 전략이 될 수 있다.

전략 소스 코드
/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mohanee

//@version=4
strategy(title="BB9_MA200_Strategy", overlay=true, pyramiding=1,     default_qty_type=strategy.cash,  initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed, 


var stopLossVal=0.00

//variables BEGIN
smaLength=input(200,title="MA Length")
bbLength=input(21,title="BB Length")  

bbsrc = input(close, title="BB Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")


stopLoss = input(title="Stop Loss%", defval=5, minval=1)

riskCapital = input(title="Risk % of capital  == Based on this trade size is claculated    numberOfShares = (AvailableCapital*risk/100) / stopLossPoints", defval=10, minval=1)


sma200=ema(close,smaLength)

plot(sma200, title="SMA 200", color=color.orange)


//bollinger calculation
basis = sma(bbsrc, bbLength)
dev = mult * stdev(bbsrc, bbLength)
upperBand = basis + dev
lowerBand = basis - dev
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)

//plot bb
plot(basis, "Basis", color=color.teal, style=plot.style_circles , offset = offset)
p1 = plot(upperBand, "Upper", color=color.teal, offset = offset)
p2 = plot(lowerBand, "Lower", color=color.teal, offset = offset)
fill(p1, p2, title = "Background", color=color.teal, transp=95)


strategy.initial_capital = 50000

//Entry---

strategy.entry(id="LE", comment="LE capital="+tostring(strategy.initial_capital + strategy.netprofit ,"######.##"), qty=( (strategy.initial_capital + strategy.netprofit ) * riskCapital / 100)/(close*stopLoss/100) , long=true,  when=strategy.position_size<1 and upperBand>sma200 and lowerBand > sma200 and crossover(close, basis) )     //  // aroonOsc<0  //(strategy.initial_capital * 0.10)/close


barcolor(color=strategy.position_size>=1? color.blue: na)

//partial Exit
tpVal=strategy.position_size>1 ? strategy.position_avg_price * (1+(stopLoss/100) ) : 0.00
strategy.close(id="LE", comment="Partial points="+tostring(close - strategy.position_avg_price, "####.##"),  qty_percent=30 , when=abs(strategy.position_size)>=1 and close>tpVal and crossunder(lowerBand, sma200)   )   //close<ema55 and rsi5Val<20 //ema34<ema55


//close All on stop loss
//stoploss
stopLossVal:=   strategy.position_size>1 ? strategy.position_avg_price * (1-(stopLoss/100) ) : 0.00

strategy.close_all( comment="SL Exit points="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and close < stopLossVal  )  //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89//

strategy.close_all( comment="BB9 X SMA200 points="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and  crossunder(basis, sma200)  )  //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89