Strategie zur Durchbrüche der Volatilität

Schriftsteller:ChaoZhang, Datum: 2023-12-13 14:36:04
Tags:

img

Übersicht

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.

Strategieprinzip

Diese Strategie basiert hauptsächlich auf Bollinger Middle Band, 48-Tage-Simple Moving Average (SMA), MACD und ADX vier technischen Indikatoren.

  1. Überprüfen Sie Handelsmöglichkeiten, wenn der Schlusskurs über oder unter dem 48-Tage-SMA liegt;

  2. Wenn der Schlusskurs durch den Bollinger-Mittelband bricht, dient er als Einstiegssignal.

  3. MACD größer als oder kleiner als 0 dient als Hilfsindikator zur Bestimmung der Trendrichtung;

  4. 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.

Vorteile der Strategie

Es handelt sich um eine Strategie, die Trend- und Volatilitätsindikatoren kombiniert.

  1. Der 48-Tage-SMA filtert übermäßig häufige Handelsgeschäfte aus und schließt mittelfristige Trends ein;

  2. Bollinger Middle Band Breakout erfasst wichtige Support/Resistance Breakout-Punkte mit starker Stop-Loss-Funktion;

  3. Der MACD beurteilt die Richtung der wichtigsten Trends und vermeidet den gegen den Trend gerichteten Handel.

  4. 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.

Risiken der Strategie

Die wichtigsten Risiken dieser Strategie sind:

  1. Auf volatilen Märkten kann die Bollinger-Mitte Band zu viele Handelsmöglichkeiten auslösen, was zu einem Überhandel führen kann.

  2. Der ADX-Indikator hat auch einige Fehler bei der Bestimmung von Trends und ungültigen Bewegungen;

  3. Relativ hohes Zugriffsrisiko, geeignet für Anleger, die ein gewisses Risiko tragen können.

Optimierungsrichtlinien

Diese Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Hinzufügen eines ATR-Indikators, um Stoppverlustpunkte festzulegen, und Verringerung pro Stoppverlust;

  2. Optimierung der Bollinger-Parameter zur Verringerung der Frequenz des Auslösens der mittleren Linie;

  3. Um die Stärke der Trends zu bestimmen, fügen Sie Handelsvolumen- oder Trendstärkenindikatoren hinzu und vermeiden Sie schwache Umkehrgeschäfte.

Zusammenfassung

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()

Mehr