브레이크오웃 볼링거 밴드 오시슬레이션 거래 전략

저자:차오장, 날짜: 2024-02-21 14:39:14
태그:

img

전반적인 설명

브레이크아웃 볼링거 밴드 오시슬레이션 트레이딩 전략 (Breakout Bollinger Bands Oscillation Trading Strategy) 은 시장이 오시슬레이션 상태에 있을 때 사용되는 거래 전략이다. 이 전략은 시장의 오시슬레이션 상태를 판단하기 위해 볼링거 밴드 지표를 사용하여 가격이 볼링거 밴드의 상부 또는 하부 레일에 닿을 때 거래 신호를 발송한다. 전통적인 트렌드를 따르는 전략과는 달리 이 전략은 범위와 관련된 옆 시장에 더 적합하다.

전략 논리

이 전략은 주로 볼링거 밴드 지표에 기반하여 구현됩니다. 볼링거 밴드는 중간 레일, 상부 레일 및 하부 레일로 구성됩니다. 가격이 상부 또는 하부 레일에 접근하면 시장에서 과도한 낙관주의 또는 과도한 비관주의를 나타냅니다. 이는 상대적으로 높은 반전 가능성을 의미합니다.

특히, 이 전략은 먼저 시장이 진동 상태에 있는지 여부를 결정하기 위해 DMI 지표를 사용합니다. +DMI와 -DMI 사이의 차이는 20보다 작을 때, 시장은 옆으로 변화하는 것으로 간주됩니다. 이 조건 하에서, 가격이 하부 레일 위에 깨지면 길고, 가격이 상부 레일 아래에 깨지면 짧습니다. 스톱 손실 포인트는 반대 레일 근처에 설정됩니다.

장점

트렌드를 따르는 전략에 비해, 이 전략은 범위와 관련된 시장 환경에 더 적합하며, 트렌드를 추구하고 돈을 잃지 않을 것입니다. 전통적인 오스실레이션 거래 전략에 비해, 이 전략은 볼링거 밴드 지표를 사용하여 시장에서 과잉 구매 및 과잉 판매 상황을 더 정확하게 판단할 수 있으며, 따라서 시장 진입 가능성을 향상시킵니다.

위험성

이 전략은 주로 볼링거 밴드 (Bollinger Bands) 에 의존하여 시장의 변동과 과잉 구매 / 과잉 판매 조건을 결정합니다. 볼링거 밴드 (Bollinger Bands) 가 오차하거나 비정상적으로 수축하면 잘못된 신호로 이어질 수 있습니다. 또한 스톱 손실 지점은 가깝기 때문에 단일 스톱 손실은 상대적으로 커질 수 있습니다. 돈 관리로 스톱 손실 전략을 최적화하는 것이 좋습니다.

최적화

엔트리 정확성을 향상시키기 위해 RSI 및 기타 오시레이터와 같은 엔트리 신호를 필터링하기 위해 다른 지표를 결합하는 것을 고려할 수 있습니다. 또한 하나의 큰 스톱 손실을 피하기 위해 스톱 손실 전략을 최적화하는 것도 매우 중요합니다. 또한 낮은 시장 자본화폐와 같은이 전략에 더 적합한 거래 품종을 선택할 수 있습니다.

결론

일반적으로, 이 전략은 오스실레이션 시장에 적합하며 트렌드 전략이 실패할 때 사용될 수 있다. 그러나 여전히 지표로 시장 상태를 판단함으로써 그 효과를 향상시킬 여지가 있다. 우리는 이 전략을 더 안정적이고 수익성 있게 하기 위해 멀티 지표 콤보, 돈 관리 등과 같은 방법을 통해 더욱 개선할 수 있다.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(shorttitle='Sideways Strategy DMI + Bollinger Bands',title='Sideways Strategy DMI + Bollinger Bands (by Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)

// Works on ETHUSD 3h, 1h, 2h, 4h

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 12,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 31,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2022, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true

[pos_dm, neg_dm, adx] = dmi(14, 14)


lengthBB = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(src, lengthBB)
dev = mult * stdev(src, lengthBB)
upper = basis + dev
lower = basis - dev
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)

sideways = (abs(pos_dm - neg_dm) < 20)



//Stop_loss= ((input (3))/100)
//Take_profit= ((input (2))/100)

//longStopPrice  = strategy.position_avg_price * (1 - Stop_loss)
//longTakeProfit = strategy.position_avg_price * (1 + Take_profit)

//closeLong = close < longStopPrice or close > longTakeProfit or StopRSI


//Entry 
strategy.entry(id="long", long = true, when = sideways and (crossover(close, lower)) and window())


//Exit
strategy.close("long", when = (crossunder(close, upper)))


더 많은