진동 돌파 이동 평균 추적 전략


생성 날짜: 2023-10-30 11:39:31 마지막으로 수정됨: 2023-10-30 11:39:31
복사: 1 클릭수: 629
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

진동 돌파 이동 평균 추적 전략

이 전략은 평행선의 돌파구를 추적하여 흔들리는 시장에서 지속적인 수익을 창출합니다.

전략 원칙

이 전략은 주로 평평선의 돌파 원칙에 기초하여 포지션을 구축합니다. MA를 사용하여 다중 평평선을 집약하여 주평선을 형성합니다. 가격이 주평선을 돌파 할 때 거래 신호를 냅니다.

구체적으로, 이 전략은 60주기의 WMA 이중 이동 평균을 메인 평균선으로 사용합니다. 동시에, 가격의 실제 변동 범위를 계산하고, 상하 통로를 도출합니다. 가격이 상하를 돌파할 때 시상하고, 하하를 돌파할 때 시상합니다.

이 전략은 또한 RSI 지표와 EMA 지표를 도입하여 RSI> 50과 가격이 EMA보다 높을 때 더 많이하고 RSI <50과 가격이 EMA보다 낮을 때 더 많은 것을 요구하여 가짜 돌파구를 방지합니다.

또한, 전략은 삼중평균선의 강한 약점을 사용하여 포지션을 종료한다. 삼중평균선의 형식이 약점일 때 ((-1), 탈퇴 지점을 역으로 돌파 통로로 선택한다.

전략적 이점

  • MA 다중 평균선을 사용하여 가격 변화를 효율적으로 평행하고 트렌드 방향을 식별할 수 있습니다.
  • 채널 브레이크 트레이딩을 기반으로, 위기 상황에서 더 많은 돈을 벌 수 있습니다.
  • RSI와 EMA와 결합하여 보조 판단을 수행하여 가짜 브레이크 신호를 필터링 할 수 있습니다.
  • 삼중평균선 상태를 이용하여 적절한 퇴출 지점을 판단하여 쇠퇴 상황을 피할 수 있다.

전략적 위험

  • 큰 흔들림의 경우, MA 메인 평균은 더 많은 가짜 돌파구를 만들 수 있습니다.
  • 트리플 메인 라인 판단의 탈퇴 시기는 정확하지 않을 수 있습니다.
  • RSI 파라미터를 잘못 설정하면 거래 빈도가 너무 높을 수 있습니다.

MA 주기 변수를 최적화하고, 삼중 평균선 설정을 조정하고, RSI 변수를 신중하게 사용함으로써 위험을 줄일 수 있다.

전략 최적화 방향

  • MA 주기 변수를 최적화하여 더 적합한 주 평균선 주기
  • RSI를 KDJ, MACD와 같은 다른 보조 지표로 대체하십시오.
  • 더 정확한 회전 시점을 찾기 위해 삼중 평균선 변수를 조정합니다.
  • 단편 거래 위험을 제어하기 위한 손실 방지 전략 추가

요약하다

이 전략은 전체적으로 충격적인 상황에 매우 적합한 돌파 전략이다. 핵심 아이디어는 MA를 돌파한 포지션을 기반으로 하고, 트렌드 지표 필터링을 보조하며, 충격적인 상황에서 지속적인 수익을 낸다. 동시에 삼중 평행선 판단 역전시기를 조기 퇴출한다. 이 전략의 최적화 공간은 넓으며, 파라미터를 조정하거나, 현장 퇴출 등을 통해 최적화할 수 있으며, 충격적인 상황에서 더 나은 효과를 얻을 수 있다.

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



//@version=5

//exapple bot
strategy('RIPO BOT', shorttitle='RIPO BOT', overlay=true, process_orders_on_close=true, calc_on_order_fills=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
sl_inp = input(0.1, title='Stop Loss %') / 100
tp_inp = input(0.33, title='Take Profit %') / 100

length = input(defval=21)
upper = ta.highest(length)
lower = ta.lowest(length)

lengthChop = input.int(14, minval=1)
ci = 100 * math.log10(math.sum(ta.atr(1), lengthChop) / (ta.highest(lengthChop) - ta.lowest(lengthChop))) / math.log10(lengthChop)
offset = input.int(0, "Offset",  minval = -500, maxval = 500)
plot(ci, "CHOP", color=#2962FF, offset = offset)
band1 = hline(61.8, "Upper Band", color=#787B86, linestyle=hline.style_dashed)
hline(50, "Middle Band", color=color.new(#787B86, 50))
band0 = hline(38.2, "Lower Band", color=#787B86, linestyle=hline.style_dashed)
fill(band1, band0, color = color.rgb(33, 150, 243, 90), title = "Background")

rsi = ta.rsi(close, 14)

var float entry_price = na

output = 100 * (close - upper) / (upper - lower)
ema = ta.ema(output, input(defval=13, title='EMA'))

ma(src, len) =>
    ta.wma(2 * ta.wma(src, len / 2) - ta.wma(src, len), math.round(math.sqrt(len)))
BBMC = ma(close, 60)
rangema = ta.ema(ta.tr, 60)
upperk = BBMC + rangema * 0.2
lowerk = BBMC - rangema * 0.2
color_bar = close > upperk ? color.blue : close < lowerk ? color.fuchsia : color.gray

ExitHigh = ma(high, 15)
ExitLow = ma(low, 15)
Hlv3 = int(na)
Hlv3 := close > ExitHigh ? 1 : close < ExitLow ? -1 : Hlv3[1]
sslExit = Hlv3 < 0 ? ExitHigh : ExitLow
base_cross_Long = ta.crossover(close, sslExit)
base_cross_Short = ta.crossover(sslExit, close)
codiff = base_cross_Long ? 1 : base_cross_Short ? -1 : na
entry_long = false

entry_short = false

    
if ta.crossover(close, BBMC) and output > ema
    entry_long := true
    
if ta.crossunder(close, BBMC) and output < ema
    entry_short := true

if entry_long and strategy.position_size == 0
    entry_price := close
    strategy.entry('enter long', strategy.long, comment='ENTER-LONG_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663')
if strategy.position_size > 0
    strategy.exit('Stop Loss/TP long', 'enter long', limit=entry_price * (1 + tp_inp), stop = color_bar == color.fuchsia ? BBMC : na, comment='EXIT-LONG_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663')
plot(entry_price * (1 + tp_inp), color=color.new(color.green, 0))


//if entry_short and strategy.position_size == 0
    //entry_price := close
    //strategy.entry('enter short', strategy.short, comment='ENTER-SHORT_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663')
if strategy.position_size < 0
    strategy.exit('Stop Loss/TP short', 'enter short', limit=entry_price * (1 - tp_inp), stop = color_bar == color.blue ? BBMC : na, comment='EXIT-SHORT_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663')
plot(entry_price * (1 + tp_inp), color=color.new(color.green, 0))
// plot(entry_price * (1 - sl_inp), color=color.new(color.red, 0))

plot(rsi, color=color.yellow)

plot(output, title='%R', color=color.new(color.yellow, 0), linewidth=2)
plot(ema, title='EMA', color=color.new(color.aqua, 0), linewidth=2)

plotarrow(codiff, colorup=color.new(color.blue, 35), colordown=color.new(color.fuchsia, 35), title='Exit Arrows', maxheight=20, offset=0)
plot(BBMC, color=color_bar, linewidth=4, title='MA Trendline')