Momentum-Indikator-Ausbruchshandelsstrategie


Erstellungsdatum: 2023-09-18 21:28:22 zuletzt geändert: 2023-09-18 21:28:22
Kopie: 0 Klicks: 691
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie nutzt die dynamischen Indikatoren des Bollinger Bands, um bei einem Breakout zu handeln, um zu entscheiden, ob der Preis den Bollinger Band durchbricht und nach unten geht, um ein Kauf- und Verkaufssignal zu senden.

Grundsätze

Die Strategie basiert hauptsächlich auf Bollinger Bands, um die Richtung des Trends zu bestimmen. Die Bollinger Bands sind bandförmige Bereiche, die aus den Moving Averages und ihren Standarddifferenzen bestehen. Die Mittellinie der Bollinger Bands ist der n-Tage-Moving Average, die obere Schiene ist die mittlere Schiene + 2x die Standarddifferenz, die untere Schiene ist die mittlere Schiene - 2x die Standarddifferenz.

Konkret berechnet die Strategie zunächst die Höchst- und Mindestpreise für n Tage und berechnet den Mittelwert (((Höchstpreis + Mindestpreis) / 2). Dann wird der Abstand zwischen dem Schlusskurs und dem Mittelwert berechnet.

Wenn der Schlusskurs die Oberbahn durchbricht, zeigt dies einen Aufwärtstrend; wenn er die Unterbahn durchbricht, zeigt dies einen Abwärtstrend. Wenn er die Oberbahn durchbricht, macht er mehr, wenn er die Unterbahn durchbricht, macht er nichts.

Die Strategie führt außerdem eine Rückwärtsöffnung ein. Wenn der Preis die Bollinger Bands durchbricht, wird ein Rückwärts-Operation durchgeführt, um den MACD zu brechen, wenn er nach unten geht.

Vorteile

  1. Der Brin-Band kann Trends bestimmen und hat eine gewisse Trendverfolgungsfähigkeit.

  2. Die Umkehrung des Portfolios kann negative Gewinne erzielen.

  3. Anpassbare Parameter wie Brink’s-Band-Periode, Standarddifferenz-Multiplikator und andere sind für den Handel in verschiedenen Perioden geeignet.

  4. Das Risiko wird dadurch verringert, dass die Positionen geschlossen und umgekehrt geöffnet werden können.

Risiken und Gegenmaßnahmen

  1. Die Brin-Band wird häufig für hochflüchtige Aktien verwendet und ist möglicherweise nicht für Sorten wie Resources oder Indizes geeignet. Die Wirksamkeit verschiedener Periodendaten kann getestet werden.

  2. Durchbruchsignale können durch falsche Durchbruchsignale gefiltert werden.

  3. Die Reverse Opening-Module können abgeschaltet werden, um die Verluste weiter auszuweiten.

  4. Der Rückzug ist möglicherweise größer. Der Umfang der Position kann entsprechend angepasst werden.

Optimierungsrichtung

  1. Ein Trendfilter könnte in Betracht gezogen werden, um unsichere und wacklige Marktschwankungen zu vermeiden.

  2. Es ist möglich, das Standarddifferenz-Multiplikator der Brin-Band zu testen, um nach geeigneteren Parametern zu suchen.

  3. Stop-Loss-Strategien können eingeführt werden, um Einzelschäden zu kontrollieren.

  4. Die Logik für die Eröffnung und Aufnahme von Positionen kann optimiert werden, um die Handelssignale klarer zu machen.

Zusammenfassen

Diese Strategie basiert auf Brin-Band-Indikatoren, die für den Preis-Trend-Break handeln. Die grundlegende Trend-Tracking-Strategie kann mit einfachen Parameter-Einstellungen realisiert werden. Es besteht jedoch ein gewisses Risiko für falsche Breakouts, die in Kombination mit anderen Indikatoren gefiltert werden müssen. Die Parameter-Einstellung, die Stop-Loss-Strategie usw. können weiter optimiert werden, um das Risiko zu kontrollieren.

Overview

This strategy uses Bollinger Bands momentum indicator for breakout trading, mainly judging if price breaks through the upper or lower Bollinger Bands for trading signals.

Principles

The strategy is primarily based on Bollinger Bands indicator to determine trend direction. Bollinger Bands consist of a middle band based on a moving average and upper/lower bands defined by standard deviations. The middle band is a n-period moving average, the upper band is middle band + 2 standard deviations, and the lower band is middle band - 2 standard deviations. When price approaches the upper band it indicates overbought conditions, and when it approaches the lower band it signals oversold conditions.

Specifically, the strategy first calculates the highest high and lowest low over last n periods, and the middle price ((highest high + lowest low)/2). It then calculates the distance between close price and middle price, uses exponential moving average of the distance to form the middle band, and adds/subtracts 2 times standard deviation above and below to form the upper and lower bands.

When close price breaks through the upper band, it signals an uptrend; when it breaks the lower band, it signals a downtrend. The strategy goes long when the upper band is broken, and goes short when the lower band is broken.

In addition, the strategy incorporates a counter-trend mechanism. When price breaks the upper band but MACD is falling, it will take a counter-trend short position.

Advantages

  1. Using Bollinger Bands to determine trend direction provides certain trend following capability.

  2. Counter-trend design allows profiting from reversals.

  3. Customizable parameters like period and standard deviation multiples make it adaptable to different trading horizons.

  4. Disable counter-trend trading to reduce risk.

Risks and Mitigations

  1. Bollinger Bands work best for high volatility stocks, may not be suitable for stable commodities or indices. Can test different period parameters.

  2. Breakout signals may have false breakouts. Can add filters with other indicators.

  3. Counter-trend trading can further increase losses. Can disable counter-trend module.

  4. Drawdowns may be significant. Can adjust position sizing.

Enhancement Opportunities

  1. Consider adding trend filter to avoid whipsaw in non-directional markets.

  2. Test different standard deviation multiples to find optimal parameters.

  3. Incorporate stop loss to control single trade loss.

  4. Optimize entry and add-on logic for clearer trading signals.

Summary

The strategy uses Bollinger Bands as the primary indicator and trades based on trend breakouts. With simple parameters it provides basic trend following capabilities. But false breakout risks exist, requiring additional filters. Parameters, stop loss and risk controls can be enhanced. Overall it serves as a reasonable baseline breakout strategy.

Strategiequellcode
/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy("Noro's Bands Scalper Strategy v1.6", shorttitle = "Scalper str 1.6", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needbe = input(true, defval = true, title = "Bands Entry")
needct = input(false, defval = false, title = "Counter-trend entry")
bodylen = input(10, defval = 10, minval = 0, maxval = 50, title = "Body length")
trb = input(1, defval = 1, minval = 1, maxval = 5, title = "Trend bars")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
src = close

//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
chd = close > hd
cld = close < ld
uptrend = trb == 1 and chd ? 1 : trb == 2 and chd and chd[1] ? 1 : trb == 3 and chd and chd[1] and chd[2] ? 1 : trb == 4 and chd and chd[1] and chd[2] and chd[3] ? 1 : trb == 5 and chd and chd[1] and chd[2] and chd[3] and chd[4] ? 1 : 0
dntrend = trb == 1 and cld ? 1 : trb == 2 and cld and cld[1] ? 1 : trb == 3 and cld and cld[1] and cld[2] ? 1 : trb == 4 and cld and cld[1] and cld[2] and cld[3] ? 1 : trb == 5 and cld and cld[1] and cld[2] and cld[3] and cld[4] ? 1 : 0
trend = dntrend == 1 and high < center ? -1 : uptrend == 1 and low > center ? 1 : trend[1]

//trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Body
body = abs(close - open)
smabody = ema(body, 30) / 10 * bodylen

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0
dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0

if up7 == 1 or up8 == 1 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))
    
if time > timestamp(toyear, tomonth, 31, 00, 00)
    strategy.close_all()