Diese Strategie kombiniert Richtungsbewegungsindex (ADX), Plus Richtungsindikator (DI +) und schnelle und langsame gleitende Durchschnitte, um die Marktrichtung und die Haltezeit zu bestimmen.
Die Kernlogik dieser Strategie besteht darin, Kaufsignale zu erzeugen, wenn die +DI-Linie von unten nach oben über die ADX-Linie kreuzt, und Verkaufssignale zu erzeugen, wenn die +DI-Linie von oben nach unten unter die ADX-Linie kreuzt. Daher beruht diese Strategie auf dem Crossover zwischen DI und ADX, um Markttrends und Umkehrpunkte zu bestimmen. Zur gleichen Zeit wird die Beziehung zwischen schnellen und langsamen gleitenden Durchschnitten verwendet, um den Gesamtmarkttrend zu bestimmen. Handelssignale werden nur berücksichtigt, wenn die schnelle EMA über der langsamen EMA liegt.
Insbesondere wird ein Kaufsignal ausgelöst, wenn folgende Bedingungen erfüllt sind:
Ein Verkaufssignal wird ausgelöst, wenn die folgenden Bedingungen erfüllt sind:
Die Strategie beinhaltet auch eine Stop-Loss-Logik, um alle Positionen zu beenden, wenn der Preis unter die Stop-Loss-Level fällt.
Die Strategie kombiniert DI, ADX und gleitende Durchschnittsindikatoren, um Wende in den Markttrends effektiv zu bestimmen.
Bei dieser Strategie sind einige Risiken zu beachten:
Diese Risiken können durch Optimierung der ADX- und gleitenden Durchschnittsparameter, Anpassung des Stop-Loss-Niveaus, Hinzufügen von Filtern für die Bestätigung usw. bekämpft werden.
Weitere Verbesserungen sind möglich:
Im Allgemeinen ist diese ADX-Crossover-Trendstrategie ziemlich stabil, in der Lage, Umkehrungen frühzeitig effektiv zu erfassen, aber die Risikokontrolle ist entscheidend. Eine weitere Optimierung der Parameter, die strikte Eintrittsregelung und der Stop-Loss können zu einer guten risikobereinigten Rendite führen. Die Strategie eignet sich für langfristige Konten, die mittelfristige bis kurzfristige Positionen halten.
/*backtest start: 2022-12-01 00:00:00 end: 2023-12-07 00:00:00 period: 1d basePeriod: 1h 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/ // © mohanee //@version=4 //ADX strategy SmoothedTrueRange=0.00 SmoothedDirectionalMovementPlus=0.00 SmoothedDirectionalMovementMinus=0.00 strategy(title="ADX strategy", overlay=false,pyramiding=3, default_qty_type=strategy.fixed, default_qty_value=3, initial_capital=10000, currency=currency.USD) len = input(11, title="ADX Length", minval=1) threshold = input(30, title="threshold", minval=5) fastEma=input(13, title="Fast EMA",minval=1, maxval=50) slowEma=input(55, title="Slow EMA",minval=10, maxval=200) stopLoss =input(8, title="Stop Loss",minval=1) // TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1]))) DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0 DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0 SmoothedTrueRange:= nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus SmoothedDirectionalMovementMinus:= nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100 DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100 DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100 ADX = sma(DX, len) plot(DIPlus, color=color.green, title="DI+") //plot(DIMinus, color=color.red, title="DI-") plot(ADX, color=color.black, title="ADX") hline(threshold, color=color.black, linestyle=hline.style_dashed) fastEmaVal=ema(close,fastEma) slowEmaVal=ema(close,slowEma) //long condition longCondition= ADX < threshold and crossover(DIPlus,ADX) and fastEmaVal > slowEmaVal barcolor(longCondition ? color.yellow: na) strategy.entry(id="ADXLE", long=true, when= longCondition and strategy.position_size<1) barcolor(strategy.position_size>1 ? color.blue: na) bgcolor(strategy.position_size>1 ? color.blue: na) //Add strategy.entry(id="ADXLE", comment="Add", long=true, when= strategy.position_size>1 and close<strategy.position_avg_price and crossover(DIPlus,ADX) ) //calculate stop Loss stopLossVal = strategy.position_avg_price - (strategy.position_avg_price*stopLoss*0.01) strategy.close(id="ADXLE",comment="SL Exit", when=close<stopLossVal) //close all on stop loss //exit condition exitCondition= ADX > threshold and crossunder(DIPlus,ADX) // and fastEmaVal > slowEmaVal strategy.close(id="ADXLE",comment="TPExitAll", qty=strategy.position_size , when= exitCondition) //close all