이 전략은 트렌드 판단을 위해 트렌드 인덱스 ADX와 트렌드 방향을 결정하기 위해 DMI 방향 인덱스를 결합하여 트렌드 방향을 결정하고, 트렌드가 설정된 후 트렌드를 추적하고 트렌드가 역전되면 시간에 빠져 나가는 두 배열 시스템을 구축하기 위해 빠르고 느린 이동 평균을 사용합니다. 또한 상위와 판매 바닥을 피하는 것을 방지합니다. 다른 시간대에 걸쳐 전략의 효과를 백테스트하기 위해 시간 범위 테스트를 통합합니다.
빠르고 느린 이동 평균은 이중 철도 채널 시스템을 구축합니다. 빠른 MA가 느린 MA를 넘을 때, 그것은 오랫동안 황금 십자 입구 신호입니다. 빠른 MA가 느린 MA를 넘을 때, 그것은 죽음의 십자 출구 신호입니다.
ADX는 트렌드의 존재와 강도를 판단합니다. ADX가 키 레벨 이상일 때, 트렌드가 존재하고 강하다는 것을 나타냅니다. 트렌드가 강할 때만 거래 신호가 생성됩니다.
DMI의 DI+는 트렌드의 방향을 결정한다. DI+가 긍정적일 때, 상승 추세를 나타낸다. DI+가 부정적일 때, 하락 추세를 나타낸다. 트렌드 방향이 일치할 때만 거래 신호가 생성된다.
시간 범위 테스트는 검증을 위해 다른 기간 동안 전략의 효과를 백테스트합니다.
이중 철도 시스템은 잘못된 신호를 피하기 위해 탈출을 필터합니다.
ADX는 추세를 요구함으로써 통합 과정에서 과도한 거래를 피합니다.
DMI는 거래가 트렌드 방향과 일치하는 것을 보장하고, 트렌드 반대 거래를 방지합니다.
시간 범위 테스트는 매개 변수를 확인하고 설정을 최적화합니다.
이 운하 는 함정 을 형성 할 수 있으며, 벼룩 을 피 하기 위해 정지 를 해야 합니다.
ADX 지연은 초기 기회를 놓칠 수 있고, 낮은 키 레벨을 필요로 합니다.
DMI 방향 지연은 또한 초기 트렌드를 놓칠 수 있으며 짧은 기간이 필요합니다.
매개 변수는 시간 범위에서 조정해야 할 수 있습니다.
최적의 설정을 찾기 위해 매개 변수 조합을 테스트합니다.
신호 품질을 위해 볼링거 밴드 같은 필터를 추가합니다.
손실을 제한하기 위해 스톱 로스를 포함합니다.
기계 학습으로 자동 최적화
감정과 뉴스와 같은 더 많은 요소를 포함합니다.
이 전략은 트렌드를 식별하고 추적하기 위해 이동 평균, 트렌드 인덱스 및 방향 인덱스의 장점을 결합합니다. 매개 변수 유효성을 확인하는 동안, 안정성과 수익성을 향상시키기 위해 매개 변수를 조정하고, 정지점을 추가하고, 더 많은 요인을 합성하여 더 많은 시장 조건에 적응하기 위해 지속적인 최적화가 필요합니다. 전반적으로 양적 거래 방법론을 따르는 신뢰할 수있는 트렌드를 제공합니다.
/*backtest start: 2023-10-01 00:00:00 end: 2023-10-31 23:59:59 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // author: codachang0726 strategy(title = "(S)MA+ADX+DI+time", shorttitle = "(S)MA+ADX+DI+time", overlay = true) // === INPUT MA LENGTHS === fastMA = input(defval = 7, title = "FastMA", minval = 1, step = 1) slowMA = input(defval = 14, title = "SlowMA", minval = 1, step = 1) // === INPUT BACKTEST RANGE === fromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12) fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromYear = input(defval = 2020, title = "From Year", minval = 1970) thruMonth = input(defval = 1, title = "Thru Month", minval = 1, maxval = 12) thruDay = input(defval = 1, title = "Thru Day", minval = 1, maxval = 31) thruYear = input(defval = 2022, title = "Thru Year", minval = 1970) // === INPUT SHOW PLOT === showDate = input(defval = true, title = "Show Date Range", type = input.bool) // === FUNCTION EXAMPLE === start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window window() => true // create function "within window of time" // === MA LOGIC === crossOv = sma(close, fastMA) > sma(close, slowMA) // true when fastMA over slowMA crossUn = sma(close, fastMA) < sma(close, slowMA) // true when fastMA under slowMA // DI+ADX adxlen = input(14, title="ADX Smoothing") dilen = input(14, title="DI Period") keyLevel = input(20, title="Keylevel for ADX") [diplus, diminus, adx] = dmi(dilen, adxlen) di = (diplus - diminus) buy = di > 0 and crossOv and adx > keyLevel sell = di < 0 and crossUn and adx > keyLevel buy_time = buy and not buy[1] sell_time = sell and not sell[1] // === EXECUTION === strategy.entry("L", strategy.long, when = window() and buy_time) // enter long when "within window of time" AND crossover strategy.close("L", when = window() and sell_time) // exit long when "within window of time" AND crossunder // === PLOTTING === bgcolor(color = showDate and window() ? color.gray : na, transp = 90) // plot "within window of time" plot(sma(close, fastMA), title = 'FastMA', color = color.yellow, linewidth = 2, style = plot.style_line) // plot FastMA plot(sma(close, slowMA), title = 'SlowMA', color = color.aqua, linewidth = 2, style = plot.style_line) // plot SlowMA