이 전략은 수정된 방향 움직임 지표 (DMI) 를 기반으로 거래합니다. 수정된 DMI는 경향 방향을 판단하기 위해 긍정적 방향 지표 (+DI) 와 부정적인 방향 지표 (-DI) 사이의 차이를 비교합니다.
거래의 논리는 다음과 같습니다.
+DI와 -DI를 기간에 걸쳐 계산합니다.
+DI 및 -DI 값을 100에서 -100까지의 범위로 지도
+DI와 -DI의 차이를 수정된 DMI 선으로 그래프로 그려라
변경된 DMI가 0을 넘을 때 길게 이동
변경된 DMI가 0 이하로 넘으면 단축
잘못된 신호를 필터링하기 위해 DMI 라인의 선택적 평평화
전략은 단일 지표의 한계를 극복하여 추세를 결정하기 위해 +DI와 -DI의 상대적 강도를 직접 비교합니다.
수정된 DMI는 +DI/-DI 비교를 직관적으로 반영합니다.
DMI 필터를 매끄럽게하는 가짜
길고 짧은 신호점
DMI 자체는 지연이 있고, 타이밍을 놓칠 수 있습니다.
매개 변수 기간은 최적화를 필요로 합니다
시장을
이 전략은 변형된 DMI를 통해 트렌드 방향 변화를 판단하여 트렌드 거래에 대한 대안적인 시각을 제공합니다. 그러나 DMI의 지연 성격은 주의가 필요하며 다른 확인 지표와 결합 될 수 있습니다.
/*backtest start: 2022-09-07 00:00:00 end: 2023-09-13 00:00:00 period: 3d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(shorttitle="DMI Modified Strategy", title="DMI Modified Strategy", overlay=true,default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000) // This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License https://creativecommons.org/licenses/by-sa/4.0/ // © dman103 // As promised a strategy of my DMI Modified indicator! (See link below for indicator). // === How does it work? === // Instead of plotting the positive direction of +DI and negative direction for -DI, we subtract the +DI with the -DI on scales of 100 to -100. // The result is plotted with a oscillator to identify the current trend. // DMI Modified supports multiple moving averages (default is EMA with length of 9). You can disable moving averages smoothing in settings. //== About the Strategy == // Buys when the line crosses over the Zero line. // Sells when the line crosses under the Zero line. // The DMI modified strategy is pretty much clean, without any filtering besides the DMI Modified and a moving average to smooth it. // Works best to catch a trend and more suitable for 1 hour and above time frame. Stay tuned for updates. // == Oscillator Colors == // GREEN : Strong Up Trend as DMI Modified is above zero line and DMI modified is ascending. // LIGHT GREEN: Still up trend but weakening as DMI modified is above zero but descending. // RED: Strong Downtrend as DMI Modified is below zero line and DMI modified is descending. // LIGHT RED: Still down trending but weakening as DMI modified is below zero but ascending. // == Notes == // Short is enabled by default. // Can also be used to find divergences. // Bar coloring is disabled by default // == Links == // DMI modified indicator: https://www.tradingview.com/script/CbDXEyDN-DMI-Modified/ // Like if you like and Enjoy! Follow for more upcoming indicators/strategies: https://www.tradingview.com/u/dman103/#published-scripts length = input(9, title="Length", minval=0) smoothing_length=input(9, title="Smoothing length") ma_select = input(title="Moving Average Type", defval="EMA", options=["NONE","SMA","SMMA" ,"EMA", "WMA", "HMA", "JMA"]) allow_short = input(true,title="Allow Short") MA_selector(src, length) => ma = 0.0 if ma_select == "NONE" ma:=src ma if ma_select == "SMA" ma := sma(src, length) ma if ma_select == "SMMA" smma = float (0.0) smaval=sma(src, length) smma := na(smma[1]) ? smaval : (smma[1] * (length - 1) + src) / length ma := smma if ma_select == "EMA" ma := ema(src, length) ma if ma_select == "WMA" ma := wma(src, length) ma if ma_select == "HMA" ma := hma(src,length) ma if ma_select == "JMA" beta = 0.45*(length-1)/(0.45*(length-1)+2) alpha = beta tmp0 = 0.0, tmp1 = 0.0, tmp2 = 0.0, tmp3 = 0.0, tmp4 = 0.0 tmp0 := (1-alpha)*src + alpha*nz(tmp0[1]) tmp1 := (src - tmp0[0])*(1-beta) + beta*nz(tmp1[1]) tmp2 := tmp0[0] + tmp1[0] tmp3 := (tmp2[0] - nz(tmp4[1]))*((1-alpha)*(1-alpha)) + (alpha*alpha)*nz(tmp3[1]) tmp4 := nz(tmp4[1]) + tmp3[0] ma := tmp4 ma ma color_bars=input(false,title="Color bars") // Colors col_grow_above = #26A69A col_grow_below = #FFCDD2 col_fall_above = #AAFFDB col_fall_below = #EF5350 dirmov(len,up_band,low_band) => up = change(highest(up_band,len)) down = -change(lowest(low_band,len)) truerange = rma(tr, len) plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange) minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange) [plus, minus] [plus, minus]= dirmov(length,high,low) result= plus-minus result:=MA_selector(result,smoothing_length) closeStatus = strategy.openprofit > 0 ? "win" : "lose" colors= result > 0 and result>result[1] ? col_grow_above : result > 0 and result<result[1] ? col_fall_above : result<0 and result>result[1] ? col_grow_below : result<0 and result<result[1] ? col_fall_below : color.white dmi=plot(result, style=plot.style_line, color=colors, linewidth=2, title="DI+-") barcolor(color_bars ? colors : na) zero_line=plot(0, color=color.white, title="0-Line",transp=60) fill (dmi,zero_line,color=colors) long = result > 0 and result>result[1] short = result< 0 and result<result[1] // strategy.entry("B", true,when=long) // strategy.entry("S",false,when=short) //, comment=strategy.position_size<0 ? closeStatus : na) strategy.close("short",when=long,comment=closeStatus) strategy.close("long",when=short,comment=closeStatus) strategy.entry("long", true, when = long) if (allow_short) strategy.entry("short",false, when = short) plotshape(crossover(result,0) ? result : na, style=shape.circle, color=color.lime,location=location.absolute,size=size.tiny,transp=65) plotshape(crossunder(result,0) ? result : na, style=shape.circle, color=color.red,location=location.absolute,size=size.tiny,transp=65)