Die Volatility Breakthrough Strategy ist eine Strategie, die Kauf- und Verkaufsaktionen durchführt, wenn die Preise die wichtigsten Unterstützungs- oder Widerstandsniveaus in Volatilitätsmustern durchbrechen.
Diese Strategie basiert hauptsächlich auf Bollinger Middle Band, 48-Tage-Simple Moving Average (SMA), MACD und ADX vier technischen Indikatoren.
Überprüfen Sie Handelsmöglichkeiten, wenn der Schlusskurs über oder unter dem 48-Tage-SMA liegt;
Wenn der Schlusskurs durch den Bollinger-Mittelband bricht, dient er als Einstiegssignal.
MACD größer als oder kleiner als 0 dient als Hilfsindikator zur Bestimmung der Trendrichtung;
ADX größer als 25, um nicht-trendige Märkte auszufiltern.
Wenn die vier oben genannten Bedingungen erfüllt sind, gehen Sie lang oder kurz.
Es handelt sich um eine Strategie, die Trend- und Volatilitätsindikatoren kombiniert.
Der 48-Tage-SMA filtert übermäßig häufige Handelsgeschäfte aus und schließt mittelfristige Trends ein;
Bollinger Middle Band Breakout erfasst wichtige Support/Resistance Breakout-Punkte mit starker Stop-Loss-Funktion;
Der MACD beurteilt die Richtung der wichtigsten Trends und vermeidet den gegen den Trend gerichteten Handel.
ADX filtert nicht-trendige Märkte und verbessert die Gewinnrate der Strategie.
Zusammenfassend lässt sich sagen, dass diese Strategie Optimierungen bei der Kontrolle der Handelsfrequenz, der Erfassung der wichtigsten Punkte, der Bestimmung der Trendrichtung und der Filterung ungültiger Bewegungen vorgenommen hat, wodurch eine relativ hohe Gewinnrate erzielt wird.
Die wichtigsten Risiken dieser Strategie sind:
Auf volatilen Märkten kann die Bollinger-Mitte Band zu viele Handelsmöglichkeiten auslösen, was zu einem Überhandel führen kann.
Der ADX-Indikator hat auch einige Fehler bei der Bestimmung von Trends und ungültigen Bewegungen;
Relativ hohes Zugriffsrisiko, geeignet für Anleger, die ein gewisses Risiko tragen können.
Diese Strategie kann in folgenden Bereichen weiter optimiert werden:
Hinzufügen eines ATR-Indikators, um Stoppverlustpunkte festzulegen, und Verringerung pro Stoppverlust;
Optimierung der Bollinger-Parameter zur Verringerung der Frequenz des Auslösens der mittleren Linie;
Um die Stärke der Trends zu bestimmen, fügen Sie Handelsvolumen- oder Trendstärkenindikatoren hinzu und vermeiden Sie schwache Umkehrgeschäfte.
Zusammenfassend ist diese Volatility Breakthrough Strategy insgesamt relativ ausgereift und erfasst wichtige Handelspunkte in volatilen Märkten effektiv. Sie kombiniert Trend- und Volatilitätsindikatoren, balanciert zwischen Risiko und Rendite. Mit weiterer Optimierung wird erwartet, dass sie stetig überschüssige Renditen erzielt.
/*backtest start: 2023-12-11 00:00:00 end: 2023-12-12 00:00:00 period: 10m basePeriod: 1m 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/ // © 03.freeman //Volatility Traders Minds Strategy (VTM Strategy) //I found this startegy on internet, with a video explaingin how it works. //Conditions for entry: //1 - Candles must to be above or bellow the 48 MA (Yellow line) //2 - Candles must to break the middle of bollinger bands //3 - Macd must to be above or bellow zero level; //4 - ADX must to be above 25 level //@version=4 strategy("Volatility Traders Minds Strategy (VTM Strategy)", shorttitle="VTM",overlay=true) source = input(close) //MA ma48 = sma(source,48) //MACD fastLength = input(12) slowlength = input(26) MACDLength = input(9) MACD = ema(source, fastLength) - ema(source, slowlength) aMACD = ema(MACD, MACDLength) delta = MACD - aMACD //BB length = input(20, minval=1) mult = input(2.0, minval=0.001, maxval=50) basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev //ADX adxThreshold = input(title="ADX Threshold", type=input.integer, defval=25, minval=1) adxlen = input(14, title="ADX Smoothing") dilen = input(14, title="DI Length") dirmov(len) => up = change(high) down = -change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truerange = rma(tr, len) plus = fixnan(100 * rma(plusDM, len) / truerange) minus = fixnan(100 * rma(minusDM, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) sig = adx(dilen, adxlen) // Strategy: (Thanks to JayRogers) // === STRATEGY RELATED INPUTS === //tradeInvert = input(defval = false, title = "Invert Trade Direction?") // the risk management inputs inpTakeProfit = input(defval = 0, title = "Take Profit Points", minval = 0) inpStopLoss = input(defval = 0, title = "Stop Loss Points", minval = 0) inpTrailStop = input(defval = 0, title = "Trailing Stop Loss Points", minval = 0) inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset Points", minval = 0) // === RISK MANAGEMENT VALUE PREP === // if an input is less than 1, assuming not wanted so we assign 'na' value to disable it. useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na // === STRATEGY - LONG POSITION EXECUTION === enterLong() => close>ma48 and close>basis and delta>0 and sig>adxThreshold // functions can be used to wrap up and work out complex conditions //exitLong() => jaw>teeth or jaw>lips or teeth>lips strategy.entry(id = "Buy", long = true, when = enterLong() ) // use function or simple condition to decide when to get in //strategy.close(id = "Buy", when = exitLong() ) // ...and when to get out // === STRATEGY - SHORT POSITION EXECUTION === enterShort() => close<ma48 and close<basis and delta<0 and sig>adxThreshold //exitShort() => jaw<teeth or jaw<lips or teeth<lips strategy.entry(id = "Sell", long = false, when = enterShort()) //strategy.close(id = "Sell", when = exitShort() ) // === STRATEGY RISK MANAGEMENT EXECUTION === // finally, make use of all the earlier values we got prepped strategy.exit("Exit Buy", from_entry = "Buy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset) strategy.exit("Exit Sell", from_entry = "Sell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset) // === Backtesting Dates === thanks to Trost testPeriodSwitch = input(false, "Custom Backtesting Dates") testStartYear = input(2020, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testStartHour = input(0, "Backtest Start Hour") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0) testStopYear = input(2020, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testStopHour = input(23, "Backtest Stop Hour") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0) testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false isPeriod = testPeriodSwitch == true ? testPeriod() : true // === /END if not isPeriod strategy.cancel_all() strategy.close_all()