이 전략은 특정 기간 내에 가격 파열을 기반으로 거래 신호를 생성합니다. 주요 아이디어는 특정 기간 동안 가격 움직임을 관찰하고 트렌드 변화를 결정하기 위해 가격 범위의 파열을 사용하는 것입니다.
이 전략은 특정 시간 내에 가장 높은 가격과 가장 낮은 가격을 계산하여 가격 움직임을 측정합니다.
특히, 과거 N 바의 가장 높은 높이를 피보트 높기로 계산하고 과거 M 바의 가장 낮은 낮은 높이를 피보트 낮으로 계산합니다. 현재 바의 높은 높이가 피보트 높이를 넘을 때 긴 신호가 생성됩니다. 현재 바의 낮은 낮은 피보트 낮을 넘을 때 짧은 신호가 생성됩니다.
엔트리 후, 전략은 스톱 손실 및 내일 스톱 손실을 위해 ATR을 사용합니다. 또한 특정 시간 프레임 (예: 14:55) 에 모든 포지션을 닫습니다.
이 전략은 특정 기간 동안 간단한 가격 브레이크를 사용하여 트렌드를 효과적으로 포착하여 내일 거래에 이상적입니다. 논리는 명확하고 구현하기가 쉽습니다.
잠재적인 지연, 초기 트렌드 시작을 놓칠 수 있습니다.
시간 프레임을 조정하거나 진입을 위해 다른 지표를 결합
트렌드가 명확하지 않을 때 더 많은 잘못된 신호
매개 변수를 조정하고 지표, 음량 등 필터를 추가합니다.
액티브 인트라일 거래에 대한 더 높은 자본 비용
위치 크기를 조정하고 보유 기간을 연장합니다.
매개 변수 최적화에 의존
기계 학습 등을 사용하여 변화하는 시장 조건에 매개 변수를 조정합니다.
일반적인 가격, 중위 가격 등과 같은 다른 가격 데이터를 테스트하십시오.
부피, 변동성 같은 필터를 추가합니다.
다른 매개 변수 조합을 시도
방향을 결정하기 위해 트렌드 지표를 포함
기계 학습을 사용하여 매개 변수를 자동 최적화
더 나은 입력을 위해 여러 시간 프레임으로 확장
이 전략은 명확하고 간결한 논리를 가지고 있으며, 좋은 이익 요인으로 단기 트렌드를 포착하기 위해 가격 브레이크에 효과적으로 활용합니다. 테스트 및 최적화에 쉬운 몇 가지 조정 가능한 매개 변수로, 그것은 내일 거래에 적합합니다. 지연 및 잘못된 신호가 존재하지만 매개 변수 조정, 필터 추가 등을 통해 해결할 수 있습니다. 전략은 광범위한 최적화 공간을 가진 견고한 브레이크 기반 거래 프레임워크를 제공합니다.
/*backtest start: 2022-10-27 00:00:00 end: 2023-11-02 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // ____________ _________ _____________ // |____________| ||________| ||__________| // || || || || // || ||________|| || // || H E ||________ U L L || H A R T I S T // || || || || // || ||________|| ||__________ // || ||________| ||__________| //@version=5 // strategy("PIVOT STRATEGY [5MIN TF]",overlay=true ,commission_type = strategy.cash, commission_value = 30 , slippage = 2, default_qty_value = 60, currency = currency.NONE, pyramiding = 0) leftbars = input(defval = 10) rightbars = input(defval = 15) // ═══════════════════════════ // // ——————————> INPUTS <——————— // // ═══════════════════════════ // EMA1 = input.int(title='PRICE CROSS EMA', defval = 150, minval = 10 ,maxval = 400) factor1 = input.float(title='_ATR LONG',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL LONG") factor2 = input.float(title='_ATR SHORT',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL SHORT") risk = input.float(title='RISK',defval = 200 , minval = 1 , maxval = 5000 , step = 50, tooltip = "RISK PER TRADE") var initialCapital = strategy.equity t = time(timeframe.period, '0935-1400:1234567') time_cond = true // ══════════════════════════════════ // // ———————————> EMA DATA <——————————— // // ══════════════════════════════════ // ema1 = ta.ema(close, EMA1) plot(ema1, color=color.new(color.yellow, 0), style=plot.style_linebr, title='ema1') // ══════════════════════════════════ // // ————————> TRAIL DATA <———————————— // // ══════════════════════════════════ // // *******Calculate LONG TRAIL data***** ATR_LO = ta.atr(14)*factor1 // *******Calculate SHORT TRAIL data***** ATR_SH = ta.atr(14)*factor2 longStop = close - ATR_LO shortStop = close + ATR_SH // Plot atr data //plot(longStop, color=color.new(color.green, 0), style=plot.style_linebr, title='Long Trailing Stop') //plot(shortStop , color=color.new(color.red, 0), style=plot.style_linebr, title='Short Trailing Stop') // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ // // ————————————————————————————————————————————————————————> PIVOT DATA <———————————————————————————————————————————————————————————————————————————————————————————————————— // // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ // ph = ta.pivothigh(close,leftbars, rightbars) pl = ta.pivotlow(close,leftbars, rightbars) pvt_condition1 = not na(ph) upper_price = 0.0 upper_price := pvt_condition1 ? ph : upper_price[1] pvt_condition2 = not na(pl) lower_price = 0.0 lower_price := pvt_condition2 ? pl : lower_price[1] // Signals long = ta.crossover(high, upper_price + syminfo.mintick) short = ta.crossunder(low, lower_price - syminfo.mintick) plot(upper_price, color= close > ema1 ? color.green : na, style=plot.style_line, title='PH') plot(lower_price, color= close < ema1 ? color.red : na, style=plot.style_line, title='PL') // ══════════════════════════════════// // ————————> LONG POSITIONS <————————// // ══════════════════════════════════// //******barinstate.isconfirmed used to avoid repaint in real time******* if ( long and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close >= ema1 ) strategy.entry(id= "Long" ,direction = strategy.long, comment = "B") //plot(longStop , color=color.new(color.blue, 0), style=plot.style_linebr, title='long Stop') if strategy.position_size > 0 strategy.exit("long tsl", "Long" , stop = longStop ,comment='S') // ═════════════════════════════════════// // ————————> SHORT POSITIONS <————————— // // ═════════════════════════════════════// if ( short and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close <= ema1 ) strategy.entry(id = "Short" ,direction = strategy.short, comment = "S") if strategy.position_size < 0 strategy.exit("short tsl", "Short" , stop = shortStop ,comment='B') // ════════════════════════════════════════════════// // ————————> CLOSE ALL POSITIONS BY 3PM <————————— // // ════════════════════════════════════════════════// strategy.close_all(when = hour == 14 and minute == 55) // ════════════════════════════════════════// // ————————> MAX INTRADAY LOSS <————————— // // ════════════════════════════════════════// // strategy.risk.max_intraday_loss(type = strategy.cash, value = risk)