이것은 트리플 슈퍼트렌드, EMA 및 ADX 지표를 결합한 양적 거래 전략입니다. 트리플 슈퍼트렌드 시스템을 사용하여 거래 신호를 생성하고 EMA와 ADX를 필터로 적용하여 거래 빈도를 제어하고 신호 품질을 향상시킵니다.
서로 다른 매개 변수를 가진 세 개의 슈퍼트렌드 시스템을 사용하여 세 개의 슈퍼트렌드가 방향에 동의 할 때 거래 신호를 생성합니다.
EMA를 트렌드 필터로 사용하세요. Close가 EMA보다 높을 때만 장거리, close가 EMA보다 낮을 때만 단축하세요.
ADX를 트렌드 강도 필터로 적용하고 ADX가 한계 이상일 때만 거래합니다.
수익성과 위험 통제를 조정하기 위해 재입구 옵션을 허용합니다.
특히, 긴 진입 조건은 세 개의 슈퍼 트렌드가 모두 상승세를 보이며, 닫는 것이 EMA 이상이며 ADX가 임계보다 높을 때입니다. 짧은 진입 조건은 세 가지 슈퍼 트렌드가 모두 하락세를 보이며, 닫는 것이 EMA 이하이며 ADX가 임계보다 높을 때입니다. 슈퍼 트렌드 중 어느 하나가 방향을 역전하면 출입합니다.
이 전략은 또한 시각적인 트렌드 결정에 도움이 되는 슈퍼트렌드 지지 및 저항 라인을 도표화합니다.
트리플 슈퍼트렌드 시스템은 가짜 브레이크를 필터하고 입력 정확도를 향상시킵니다.
EMA와 ADX의 이중 필터는 손해를 줄이고 위험 관리를 향상시킵니다.
재진입 옵션은 위험 선호도에 따라 수익성을 조정할 수 있습니다.
시각적인 슈퍼트렌드 라인은 트렌드 방향을 결정하는데 도움이 됩니다.
슈퍼트렌드와 다른 지표는 지연을 가지고 있으며 늦은 진입 또는 이른 출입을 유발할 수 있습니다.
너무 엄격한 필터는 기회를 놓칠 수 있습니다.
윙사브는 범주 시장에서 손실을 일으킬 수 있습니다.
재입국을 허용하면 무역의 빈도와 탈락 비용이 증가합니다.
이러한 위험은 매개 변수, 필터 최적화 및 동적 정지 사용으로 줄일 수 있습니다. 불확실한 시장 조건을 해결하기 위해 위치 사이즈 및 엄격한 정지 사용이 필요합니다.
이 전략은 몇 가지 측면에서 최적화 될 수 있습니다.
다양한 매개 변수 조합을 테스트하여 최적의 슈퍼 트렌드와 EMA 설정을 찾습니다.
잘못된 신호를 줄이기 위해 ADX 문턱을 최적화합니다.
변동성, 부피 등 다른 필터를 추가합니다.
각기 다른 제품별로 매개 변수를 최적화합니다.
더 나은 위험 통제를 위해 역동적인 스톱 로스 메커니즘을 구축합니다.
더 나은 입출입 규칙을 찾기 위해 기계 학습을 탐구합니다.
이 전략은 트리플 슈퍼트렌드 시스템의 강점을 활용하고 EMA와 ADX 이중 필터로 증강하여 신호 품질을 효과적으로 향상시키고 위험을 제어합니다. 매개 변수, 필터, 동적 스톱의 추가 개선은 안정성과 적응력을 향상시킬 수 있습니다. 트렌드 분석과 결합하여 양적 거래에 효과적인 입출 신호를 제공합니다.
/*backtest start: 2023-08-18 00:00:00 end: 2023-09-17 00:00:00 period: 2h basePeriod: 15m 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/ // ©kunjandetroja //@version=5 strategy('Triple Supertrend with EMA and ADX', overlay=true) m1 = input.float(1,"ATR Multi",minval = 1,maxval= 6,step=0.5,group='ST 1') m2 = input.float(2,"ATR Multi",minval = 1,maxval= 6,step=0.5,group='ST 2') m3 = input.float(3,"ATR Multi",minval = 1,maxval= 6,step=0.5,group='ST 3') p1 = input.int(10,"ATR Multi",minval = 5,maxval= 25,step=1,group='ST 1') p2 = input.int(15,"ATR Multi",minval = 5,maxval= 25,step=1,group='ST 2') p3 = input.int(20,"ATR Multi",minval = 5,maxval= 25,step=1,group='ST 3') len_EMA = input.int(200,"EMA Len",minval = 5,maxval= 250,step=1) len_ADX = input.int(14,"ADX Len",minval = 1,maxval= 25,step=1) len_Di = input.int(14,"Di Len",minval = 1,maxval= 25,step=1) adx_above = input.float(25,"adx filter",minval = 1,maxval= 50,step=0.5) var bool long_position = false adx_filter = input.bool(false, "Add Adx & EMA filter") renetry = input.bool(true, "Allow Reentry") f_getColor_Resistance(_dir, _color) => _dir == 1 and _dir == _dir[1] ? _color : na f_getColor_Support(_dir, _color) => _dir == -1 and _dir == _dir[1] ? _color : na [superTrend1, dir1] = ta.supertrend(m1, p1) [superTrend2, dir2] = ta.supertrend(m2, p2) [superTrend3, dir3] = ta.supertrend(m3, p3) EMA = ta.ema(close, len_EMA) [diplus,diminus,adx] = ta.dmi(len_Di,len_ADX) // ADX Filter adxup = adx > adx_above and close > EMA adxdown = adx > adx_above and close < EMA sum_dir = dir1 + dir2 + dir3 dir_long = if(adx_filter == false) sum_dir == -3 else sum_dir == -3 and adxup dir_short = if(adx_filter == false) sum_dir == 3 else sum_dir == 3 and adxdown Exit_long = dir1 == 1 and dir1 != dir1[1] Exit_short = dir1 == -1 and dir1 != dir1[1] // BuySignal = dir_long and dir_long != dir_long[1] // SellSignal = dir_short and dir_short != dir_short[1] // if BuySignal // label.new(bar_index, low, 'Long', style=label.style_label_up) // if SellSignal // label.new(bar_index, high, 'Short', style=label.style_label_down) longenter = if(renetry == false) dir_long and long_position == false else dir_long shortenter = if(renetry == false) dir_short and long_position == true else dir_short if longenter long_position := true if shortenter long_position := false strategy.entry('BUY', strategy.long, when=longenter) strategy.entry('SELL', strategy.short, when=shortenter) strategy.close('BUY', Exit_long) strategy.close('SELL', Exit_short) buy1 = ta.barssince(dir_long) sell1 = ta.barssince(dir_short) colR1 = f_getColor_Resistance(dir1, color.red) colS1 = f_getColor_Support(dir1, color.green) colR2 = f_getColor_Resistance(dir2, color.orange) colS2 = f_getColor_Support(dir2, color.yellow) colR3 = f_getColor_Resistance(dir3, color.blue) colS3 = f_getColor_Support(dir3, color.maroon) plot(superTrend1, 'R1', colR1, linewidth=2) plot(superTrend1, 'S1', colS1, linewidth=2) plot(superTrend2, 'R1', colR2, linewidth=2) plot(superTrend2, 'S1', colS2, linewidth=2) plot(superTrend3, 'R1', colR3, linewidth=2) plot(superTrend3, 'S1', colS3, linewidth=2) // // Intraday only // var int new_day = na // var int new_month = na // var int new_year = na // var int close_trades_after_time_of_day = na // if dayofmonth != dayofmonth[1] // new_day := dayofmonth // if month != month[1] // new_month := month // if year != year[1] // new_year := year // close_trades_after_time_of_day := timestamp(new_year,new_month,new_day,15,15) // strategy.close_all(time > close_trades_after_time_of_day)