
Diese Strategie basiert auf einer Kombination aus Bollinger Bands und RSI und ist eine typische Kombinationsstrategie. Sie nutzt die Vorteile verschiedener Indikatoren, um die Richtung des Trends durch Bollinger Bands zu bestimmen. Der RSI erkennt Überkauf-Überverkauf, um Eintritt und Austritt zu verhindern.
Mit Hilfe von Brin-Bändern wird die aktuelle Kursentwicklung der Aktien beurteilt. Bei einem Kursbruch wird ein bullisher Kurs angesehen, bei einem Kursbruch wird ein bearisher Kurs angesehen.
Die Bolling-Bandbreite (die Differenz zwischen der oberen und der unteren Bahn) spiegelt die derzeitige Marktfluktuation wider. Wenn die Bolling-Bandbreite größer ist, wird die Fluktuation verstärkt, wodurch der RSI besser überkauft und überverkauft wird.
Der RSI-Indikator beurteilt Überkauf-Überverkauf. Wenn der RSI über 70 liegt, ist es eine Überkaufzone, wenn er unter 30 liegt, ist es eine Überverkaufzone. Vermeiden Sie die Überkauf-Überverkaufszone, um ein besseres Risiko-Rendite-Verhältnis zu erhalten.
Das sind die wichtigsten Handelssignale: (1) Wartezeichen: Der Preis ist auf Kurs und der RSI ist nicht überkauft (der RSI ist kleiner als 70) (2) Fallsignal: Der Preis ist aus der Bahn und der RSI ist nicht überverkauft ((der RSI ist größer als 30)
Stop-Loss-Exit: Bei einem Beobachtungsgeschäft geht der RSI unter 70 zu; bei einem Beobachtungsgeschäft geht der RSI über 30 zu.
Diese Strategie hat folgende Vorteile:
Die Vorteile der Integration mehrerer Indikatoren sind, dass die Informationen umfassender und die Signale zuverlässiger sind.
Der Brin-Band wird genutzt, um die allgemeine Richtung zu beurteilen, den Großteiler zu unterstützen und die Trends zu erfassen.
Der RSI-Indikator beurteilt lokale Überkäufe und Überverkäufe, um unnötige Risiken weiter zu vermeiden.
Die Schadensbegrenzungsmechanismen sind strenger und helfen dabei, Verluste zu reduzieren.
Die Strategie birgt auch folgende Risiken:
Die Brin-Band- und RSI-Indikatoren können ausfallen, was zu falschen Handelssignalen führt.
Trotz der Stop-Loss-Maßnahmen kann die falsche Einstellung des Stop-Loss-Punktes zu erheblichen Verlusten führen.
Zu häufige Börsen erhöhen die Transaktionsgebühren und die Kosten für die Schlupfpunkte.
PARAMETERS kann durch eine falsche Optimierung zu einer Überpassung führen.
Diese Strategie kann in folgenden Bereichen optimiert werden:
Verschiedene Kombinationen von Indikatoren werden getestet, um die optimalen Parameter zu finden.
Erhöhung der Flexibilität der Schadensbegrenzungsmethoden, wie ADDR/ATR-Schadensbegrenzung, mobile Schadensbegrenzung usw.
Die Strategie der Positionsverwaltung, wie z. B. Fixed Positions, Martingale usw., wurde ergänzt.
In Kombination mit mehr Indikatoren filtern Sie Signale, wie z. B. die Energie des Handelsvolumens.
Die Optimierung der Parameteranpassung durch maschinelles Lernen.
Optimieren Sie die Eintrittszeit, indem Sie die Eintrittszeit nach dem Trendbestätigungssignal optimieren.
Die Strategie ist insgesamt eine typische Multi-Indicator-Kombinationsstrategie. Sie integriert die Vorteile von Brin-Bändern und RSI und vermeidet die Gefahr von lokalen Überkaufen und Überverkaufen, während sie den Trend erfasst. Die besten Ergebnisse werden durch die Optimierung von vernünftigen Parametern und die Stop-Loss-Management erzielt.
/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 2h
basePeriod: 15m
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/
// © evillalobos1123
//@version=5
strategy("Villa Dinamic Pivot Supertrend Strategy", overlay=true, calc_on_every_tick = true, default_qty_type = strategy.fixed)
//INPUTS
ema_b = input.bool(false, "Use Simple EMA Filter", group = "Strategy Inputs")
ema_b_ang = input.bool(true, "Use DEMA Angle Filter", group = "Strategy Inputs")
dema_b = input.bool(true, "Use DEMA Filter", group = "Strategy Inputs")
st_sig = input.bool(false, "Take Every Supertrend Signal" , group = "Strategy Inputs")
take_p = input.bool(true, "Stop Loss at Supertrend", group = "Strategy Inputs")
din_tp = input.bool(false, "2 Steps Take Profit", group = "Strategy Inputs")
move_sl = input.bool(true, "Move SL", group = "Strategy Inputs")
sl_atr = input.float(2.5, "Stop Loss ATR Multiplier", group = "Strategy Inputs")
tp_atr = input.float(4, "Take Profit ATR Multiplier", group = "Strategy Inputs")
din_tp_qty = input.int(50, "2 Steps TP qty%", group = "Strategy Inputs")
dema_a_filter = input.float(0, "DEMA Angle Threshold (+ & -)", group = "Strategy Inputs")
dema_a_look = input.int(1, "DEMA Angle Lookback", group = "Strategy Inputs")
dr_test = input.string("Backtest", "Testing", options = ["Backtest", "Forwardtest", "All"], group = "Strategy Inputs")
not_in_trade = strategy.position_size == 0
//Backtesting date range
start_year = input.int(2021, "Backtesting start year", group = "BT Date Range")
start_month = input.int(1, "Backtesting start month", group = "BT Date Range")
start_date = input.int(1, "Backtesting start day", group = "BT Date Range")
end_year = input.int(2021, "Backtesting end year", group = "BT Date Range")
end_month = input.int(12, "Backtesting end month", group = "BT Date Range")
end_date = input.int(31, "Backtesting end day", group = "BT Date Range")
bt_date_range = (time >= timestamp(syminfo.timezone, start_year,
start_month, start_date, 0, 0)) and
(time < timestamp(syminfo.timezone, end_year, end_month, end_date, 0, 0))
//Forward testing date range
start_year_f = input.int(2022, "Forwardtesting start year", group = "FT Date Range")
start_month_f = input.int(1, "Forwardtesting start month", group = "FT Date Range")
start_date_f = input.int(1, "Forwardtesting start day", group = "FT Date Range")
end_year_f = input.int(2022, "Forwardtesting end year", group = "FT Date Range")
end_month_f = input.int(03, "Forwardtesting end month", group = "FT Date Range")
end_date_f = input.int(26, "Forwardtesting end day", group = "FT Date Range")
ft_date_range = (time >= timestamp(syminfo.timezone, start_year_f,
start_month_f, start_date_f, 0, 0)) and
(time < timestamp(syminfo.timezone, end_year_f, end_month_f, end_date_f, 0, 0))
//date condition
date_range_cond = if dr_test == "Backtest"
bt_date_range
else if dr_test == "Forwardtest"
ft_date_range
else
true
//INDICATORS
//PIVOT SUPERTREND
prd = input.int(2, "PVT ST Pivot Point Period", group = "Pivot Supertrend")
Factor=input.float(3, "PVT ST ATR Factor", group = "Pivot Supertrend")
Pd=input.int(9 , "PVT ST ATR Period", group = "Pivot Supertrend")
// get Pivot High/Low
float ph = ta.pivothigh(prd, prd)
float pl = ta.pivotlow(prd, prd)
// calculate the Center line using pivot points
var float center = na
float lastpp = ph ? ph : pl ? pl : na
if lastpp
if na(center)
center := lastpp
else
//weighted calculation
center := (center * 2 + lastpp) / 3
// upper/lower bands calculation
Up = center - (Factor * ta.atr(Pd))
Dn = center + (Factor * ta.atr(Pd))
// get the trend
float TUp = na
float TDown = na
Trend = 0
TUp := close[1] > TUp[1] ? math.max(Up, TUp[1]) : Up
TDown := close[1] < TDown[1] ? math.min(Dn, TDown[1]) : Dn
Trend := close > TDown[1] ? 1: close < TUp[1]? -1: nz(Trend[1], 1)
Trailingsl = Trend == 1 ? TUp : TDown
// check and plot the signals
bsignal = Trend == 1 and Trend[1] == -1
ssignal = Trend == -1 and Trend[1] == 1
//get S/R levels using Pivot Points
float resistance = na
float support = na
support := pl ? pl : support[1]
resistance := ph ? ph : resistance[1]
//DEMA
dema_ln = input.int(200, "DEMA Len", group = 'D-EMAs')
dema_src = input.source(close, "D-EMAs Source", group = 'D-EMAs')
ema_fd = ta.ema(dema_src, dema_ln)
dema = (2*ema_fd)-(ta.ema(ema_fd,dema_ln))
//EMA
ema1_l = input.int(21, "EMA 1 Len", group = 'D-EMAs')
ema2_l = input.int(50, "EMA 2 Len", group = 'D-EMAs')
ema3_l = input.int(200, "EMA 3 Len", group = 'D-EMAs')
ema1 = ta.ema(dema_src, ema1_l)
ema2 = ta.ema(dema_src, ema2_l)
ema3 = ta.ema(dema_src, ema3_l)
//Supertrend
Periods = input.int(21, "ST ATR Period", group = "Normal Supertrend")
src_st = input.source(hl2, "ST Supertrend Source", group = "Normal Supertrend")
Multiplier = input.float(2.0 , "ST ATR Multiplier", group = "Normal Supertrend")
changeATR= true
atr2 = ta.sma(ta.tr, Periods)
atr3= changeATR ? ta.atr(Periods) : atr2
up=src_st-(Multiplier*atr3)
up1 = nz(up[1],up)
up := close[1] > up1 ? math.max(up,up1) : up
dn=src_st+(Multiplier*atr3)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
buySignal = trend == 1 and trend[1] == -1
sellSignal = trend == -1 and trend[1] == 1
//ATR
atr = ta.atr(14)
///CONDITIONS
//BUY
/// ema simple
ema_cond_b = if ema_b
ema1 > ema2 and ema2 > ema3
else
true
///ema angle
dema_angle_rad = math.atan((dema - dema[dema_a_look])/0.0001)
dema_angle = dema_angle_rad * (180/math.pi)
dema_ang_cond_b = if ema_b_ang
if dema_angle >= dema_a_filter
true
else
false
else
true
///ema distance
dema_cond_b = if dema_b
close > dema
else
true
//supertrends
///if pivot buy sig or (st buy sig and pivot. trend = 1)
pvt_cond_b = bsignal
st_cond_b = if st_sig
buySignal and Trend == 1
else
false
st_entry_cond = pvt_cond_b or st_cond_b
///stop loss tp
sl_b = if take_p
if trend == 1
up
else
close - (atr * sl_atr)
else
close - (atr * sl_atr)
tp_b = if take_p
if trend == 1
close + ((close - up) * (tp_atr / sl_atr))
else
close + (atr * tp_atr)
else
close + (atr * tp_atr)
//position size
init_cap = strategy.equity
pos_size_b = math.round((init_cap * .01) / (close - sl_b))
ent_price = strategy.opentrades.entry_price(strategy.opentrades - 1)
var sl_b_n = 0.0
var tp_b_n = 0.0
longCondition = (ema_cond_b and dema_cond_b and dema_ang_cond_b and st_entry_cond and date_range_cond and not_in_trade)
if (longCondition)
strategy.entry("Long", strategy.long, qty = pos_size_b)
sl_b_n := sl_b
tp_b_n := tp_b
ent_price := strategy.opentrades.entry_price(strategy.opentrades - 1)
if (up[1] < ent_price and up >= ent_price and trend[0] == 1)
if din_tp
strategy.close("Long", qty_percent = din_tp_qty)
if move_sl
sl_b_n := ent_price
strategy.exit("Exit", "Long", stop =sl_b_n, limit = tp_b_n)
//sell
///ema simple
ema_cond_s = if ema_b
ema1 < ema2 and ema2 < ema3
else
true
//ema distance
dema_cond_s = if dema_b
close < dema
else
true
//dema angle
dema_ang_cond_s = if ema_b_ang
if dema_angle <= (dema_a_filter * -1)
true
else
false
else
true
//supertrends
///if pivot buy sig or (st buy sig and pivot. trend = 1)
pvt_cond_s = ssignal
st_cond_s = if st_sig
sellSignal and Trend == -1
else
false
st_entry_cond_s = pvt_cond_s or st_cond_s
///stop loss tp
sl_s = if take_p
if trend == -1
dn
else
close + (atr * sl_atr)
else
close + (atr * sl_atr)
tp_s = if take_p
if trend == -1
close - ((dn - close) * (tp_atr / sl_atr))
else
close - (atr * tp_atr)
else
close - (atr * tp_atr)
shortCondition = (ema_cond_s and dema_cond_s and dema_ang_cond_s and st_entry_cond_s and not_in_trade)
pos_size_s = math.round((init_cap * .01) / (sl_s - close))
var sl_s_n = 0.0
var tp_s_n = 0.0
if (shortCondition)
strategy.entry("Short", strategy.short, qty = pos_size_s)
sl_s_n := sl_s
tp_s_n := tp_s
if (dn[1] > ent_price and dn <= ent_price and trend[0] == -1)
if din_tp
strategy.close("Short", qty_percent = din_tp_qty)
if move_sl
sl_s_n := ent_price
strategy.exit("Exit", "Short", stop = sl_s_n, limit = tp_s_n)