
Die Strategie nutzt VWMA-Indikatoren, um die Richtung des Trends zu bestimmen, und verwendet die ATR-Indikatoren, um die Stop-Loss-Linie zu setzen, um den Trend zu verfolgen. Die Strategie ist für ein Marktumfeld mit einem offensichtlichen Trend geeignet.
Der VWMA-Indikator wird verwendet, um die Richtung des Trends zu bestimmen. Wenn der Preis höher als der VWMA ist, wird er als Aufwärtstrend beurteilt, und wenn der Preis niedriger als der VWMA ist, wird er als Abwärtstrend beurteilt, und es wird ein Fehltrend gemacht.
Um falsche Durchbrüche zu filtern, wird der RSI-Oszillator eingesetzt. Es wird nur mehrere Signale ausgegeben, wenn der RSI über 30 liegt.
Die Stop-Line wird mit dem ATR-Indikator berechnet. Die ATR-Länge ist auf die gleiche wie die VWMA-Länge gesetzt, die Multiplikator-Länge auf 3.5. Die Stop-Line wird live nach dem Preis aktualisiert.
Die Einstellung des ATR-Multiplikators beeinflusst die Schrumpfung der Stop-Line. Je größer der Multiplikator, desto geringer ist die Häufigkeit der Aktualisierung der Stop-Line und desto effektiver ist der Trend.
Die Positionsgröße wird berechnet anhand des Stop-Loss-Prozentsatzes innerhalb der Strategie und der Kontogewinne.
Ein Stop-Loss-Exit ist eine Position, in der der Kurs unter der Stop-Loss-Linie liegt.
Die VWMA-Indikatoren dienen dazu, Trends zu bestimmen und damit kontinuierlich Trendchancen zu erfassen.
Der RSI-Filter wurde hinzugefügt, um einige falsche Durchbruchsignale zu filtern.
ATR Stop Lines ermöglichen Trendverfolgung und vermeiden die Umkehrung
Die Berechnung der Positionen auf Basis der Prozentsätze der Kontogewinn- und Stop-Loss-Prozentsätze ist für die Risikokontrolle geeignet.
Es besteht ein Verlustrisiko an Trendwendepunkten. Die Positionen sollten entsprechend verkleinert werden, um Einzelschäden zu verringern.
Die ATR-Parameter sind falsch eingestellt, was dazu führt, dass die Stop-Line zu empfindlich oder langsam ist. Die geeigneten Parameter sollten getestet werden.
Wenn der Trend zu schnell umkehrt, können die Stop-Line-Aktualisierungen zu spät kommen und die Verluste ausweiten.
In einem schwachen Markt sollten Positionen reduziert und die Stop-Line-Schrumpfung erhöht werden.
Verschiedene Kombinationen von VWMA-Parametern können getestet werden, um die Parameter auszuwählen, die das beste Signal erzeugen.
Andere Parameter des RSI-Oszillators können getestet werden, z. B. die Überkauf-Überverkaufslinie.
Es ist möglich, die Multiplikationsparameter des ATR zu testen, um den optimalen Punkt zu finden, an dem zwischen Rücknahme und Tracking ein Tradeoff besteht.
Sie können auch andere Indikatoren, wie MACD, KD usw. kombinieren, um die Signalqualität zu verbessern.
Die Positionsverwaltung und die Stop-Loss-Prozentsätze können entsprechend der Marktschwankungen optimiert werden.
Die Strategie ist allgemein tendenziell und eignet sich zur Erfassung offensichtlicher Preistrends. Die Strategie hat Vorteile in Bezug auf Trendbeurteilung, Signalfilterung, Verlustverfolgung usw. Es besteht auch ein Trendumkehrrisiko. Durch optimierte Parametersetzung und Positionsverwaltung können bessere Effekte erzielt werden.
/*backtest
start: 2023-10-07 00:00:00
end: 2023-10-13 00:00:00
period: 1h
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/
// © mohanee
//@version=4
//strategy("", overlay=true)
strategy(title="VWMA_withATRstops_strategy V2", overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=20, initial_capital=10000, currency=currency.USD) //default_qty_value=10, default_qty_type=strategy.fixed,
float xATRTrailingStop=na
int pos=na
vwmalength = input(33, title="VWMA Length", minval=1, maxval=365)
//vwmalength2 = input(9, title="VWAM Short Term Length", minval=1, maxval=365)
nATRPeriod = input(33, title="ATR length", minval=1, maxval=365)
nATRMultip = input(3.5, title="ATR Multiplier")
rsiofVwmaLength=input(14, title="RSI of VWMA Length")
riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(5,title="Stop Loss",minval=1)
vwmaVal=vwma(close, vwmalength)
//vwmaVal2=vwma(close, vwmalength2)
//maVal=sma(close, vwmalength)
plot(vwmaVal, color=color.orange, linewidth=2, title="VWMA")
//plot(vwmaVal2, color=color.blue, title="VWMA Short Term")
//plot(maVal, color=color.blue, title="MA")
//rsi of vwma Longterm
rsiofVwmaVal=rsi(vwmaVal,rsiofVwmaLength)
xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR
xATRTrailingStop:= iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss), iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
pos:= iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1, iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))
color1 = pos == -1 ? color.red: pos == 1 ? color.green : color.blue
//plot(xATRTrailingStop, color=color1, title="ATR Trailing Stop")
//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity * riskCapital / 100 ) / (close*stopLoss/100)
//check if cash is sufficient to buy qty1 , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1
//Long Entry
//strategy.entry(id="VWMA LE", long=true, qty=qty1, when= close >vwmaVal and open>vwmaVal and close>open and close > xATRTrailingStop and xATRTrailingStop> vwmaVal)
strategy.entry(id="VWMA LE", long=true, qty=qty1, when= rsiofVwmaVal>=30 and close>open and close>vwmaVal and pos == 1 ) ///pos == 1 means ATRStop line is green
//vwmaVal2>vwmaVal and
plot(strategy.position_size>=1 ? xATRTrailingStop : na, color=color1, style=plot.style_linebr, title="ATR Trailing Stop")
bgcolor(strategy.position_size>=1 ? color.blue : na )
//Exit
strategy.close(id="VWMA LE", when= strategy.position_size>=1 and crossunder(close, xATRTrailingStop) )
//strategy.close(id="VWMA LE", when= strategy.position_size>=1 and close<vwmaVal and open<vwmaVal and close<open )