In diesem Artikel wird eine Strategie beschrieben, die die Identifizierung von Schwankungsbändern für die Umkehrung von Long-Line-Quantitative-Trading verwendet. Diese Strategie erfolgt durch den Kauf von Kaufpreisen, die die Schwankungsbänder durchbrechen, um den Kurs zu verfolgen.
Der Kern der Strategie sind die Bandbreiten, die wie folgt berechnet werden:
Berechnung der gleitenden Durchschnittslinie der mittleren, oberen und unteren Schienen;
Wenn der Preis von unten nach oben brecht, wird ein Kaufsignal erzeugt.
Wenn der Preis auf die Bahn geht, wird ein Verkaufssignal erzeugt.
Die Ausfahrt kann bei Ausverkauf oder bei Überholung der Bahn eingestellt werden.
Der Stop-Loss ist auf einen festen Prozentsatz eingestellt.
Auf diese Weise kann es gekauft werden, wenn der Preis in der Abwärtsphase ist und anschließend durch einen Stop-Loss oder einen Stop-Loss-Exit ausgetreten wird, um eine Umkehroperation zu ermöglichen.
Der größte Vorteil dieser Strategie ist die Verwendung von Bandbreiten zur Identifizierung von Wendepunkten, eine eher ausgereifte Methode der technischen Analyse.
Ein weiterer Vorteil ist, dass ein Stop-Loss-Mechanismus eingerichtet ist, der das Risiko für einzelne Transaktionen kontrolliert.
Schließlich hilft der Bau von Lagerstätten in Teilen auch, nach der Umkehrung in Teilen zu profitieren.
Aber diese Strategie birgt auch einige potenzielle Probleme:
Zunächst einmal sind die Moving Average-Berechnungen im Rückstand und könnten die besten Kaufzeiten verpassen.
Zweitens müssen die Einstellungen für Stopps und Verlustpunkte sorgfältig getestet und optimiert werden.
Letztendlich muss die langfristige Haltung einen gewissen Druck auf die Rücknahme ertragen.
Vier Inhalte, Zusammenfassung
Dieser Artikel beschreibt detailliert eine Strategie zur Quantifizierung von Longlines, die die Umkehrung der Bandbreite nutzt. Sie ermöglicht die effektive Identifizierung von Preisumkehrmöglichkeiten und die Realisierung von Longline-Holdings. Sie erfordert jedoch auch die Kontrolle von Problemen wie der Verzögerung der Moving Average und die Optimierung der Stop-Loss-Punkte.
/*backtest
start: 2023-09-07 00:00:00
end: 2023-09-12 04:00:00
period: 14m
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/
// © ediks123
//strategy logic has been borrowed from ceyhun and tweaked the settings for back testing
//@version=4
//SPY 4 hrs settings 8, 13 , 3.33 , 0.9 on 4 hrs chart
//QQQ above settings is good , but 13, 13 has less number of bars
//QQQ 4 hrs settings 13, 13 , 3.33 , 0.9 on 4 hrs chart
strategy(title="Volatility Bands Reversal Strategy", shorttitle="VolatilityBandReversal" , overlay=true, pyramiding=2, 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,
av = input(8, title="Band Average")
vp = input(13, title="Volatility Period")
df = input(3.33,title="Deviation Factor",minval=0.1)
lba = input(0.9,title="Lower Band Adjustment",minval=0.1)
riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(6,title="Stop Loss",minval=1)
exitOn=input(title="Exit on", defval="touch_upperband", options=["Sell_Signal", "touch_upperband"])
src = hlc3
typical = src >= src[1] ? src - low[1] : src[1] - low
deviation = sum( typical , vp )/ vp * df
devHigh = ema(deviation, av)
devLow = lba * devHigh
medianAvg = ema(src, av)
emaMediaAvg=ema(medianAvg, av)
upperBandVal= emaMediaAvg + devHigh
lowerbandVal= emaMediaAvg - devLow
MidLineVal=sma(medianAvg, av)
UpperBand = plot ( upperBandVal, color=#EE82EE, linewidth=2, title="UpperBand")
LowerBand = plot ( lowerbandVal , color=#EE82EE, linewidth=2, title="LowerBand")
MidLine = plot (MidLineVal, color=color.blue, linewidth=2, title="MidLine")
buyLine = plot ( (lowerbandVal + MidLineVal )/2 , color=color.blue, title="BuyLine")
up=ema(medianAvg, av) + devHigh
down=ema(medianAvg, av) - devLow
ema50=ema(hlc3,50)
plot ( ema50, color=color.orange, linewidth=2, title="ema 50")
//outer deviation
//deviation1 = sum( typical , vp )/ vp * 4
//devHigh1 = ema(deviation, av)
//devLow1 = lba * devHigh
//medianAvg1 = ema(src, av)
//UpperBand1 = plot (emaMediaAvg + devHigh1, color=color.red, linewidth=3, title="UpperBand1")
//LowerBand1 = plot (emaMediaAvg - devLow1, color=color.red, linewidth=3, title="LowerBand1")
//
///Entry Rules
//1)First candle close below the Lower Band of the volatility Band
//2)Second candle close above the lower band
//3)Third Candle closes above previous candle
Buy = close[2] < down[2] and close[1]>down[1] and close>close[1]
//plotshape(Buy,color=color.blue,style=shape.arrowup,location=location.belowbar, text="Buy")
//barcolor(close[2] < down[2] and close[1]>down[1] and close>close[1] ? color.blue :na )
//bgcolor(close[2] < down[2] and close[1]>down[1] and close>close[1] ? color.green :na )
///Exit Rules
//1)One can have a static stops initially followed by an trailing stop based on the risk the people are willing to take
//2)One can exit with human based decisions or predefined target exits. Choice of deciding the stop loss and profit targets are left to the readers.
Sell = close[2] > up[2] and close[1]<up[1] and close<close[1]
//plotshape(Sell,color=color.red,style=shape.arrowup,text="Sell")
barcolor(close[2] > up[2] and close[1]<up[1] and close<close[1] ? color.yellow :na )
bgcolor(close[2] > up[2] and close[1]<up[1] and close<close[1] ? color.red :na )
//Buyer = crossover(close,Buy)
//Seller = crossunder(close,Sell)
//alertcondition(Buyer, title="Buy Signal", message="Buy")
//alertcondition(Seller, title="Sell Signal", message="Sell")
//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
strategy.entry(id="vbLE", long=true, qty=qty1, when=Buy)
bgcolor(strategy.position_size>=1 ? color.blue : na)
// stop loss exit
stopLossVal = strategy.position_size>=1 ? strategy.position_avg_price * ( 1 - (stopLoss/100) ) : 0.00
//draw initil stop loss
plot(strategy.position_size>=1 ? stopLossVal : na, color = color.purple , style=plot.style_linebr, linewidth = 2, title = "stop loss") //, trackprice=true)
strategy.close(id="vbLE", comment="SL exit Loss is "+tostring(close - strategy.position_avg_price, "###.##") , when=abs(strategy.position_size)>=1 and close < stopLossVal )
//close on Sell_Signal
strategy.close(id="vbLE", comment="Profit is : "+tostring(close - strategy.position_avg_price, "###.##") , when=strategy.position_size>=1 and exitOn=="Sell_Signal" and Sell)
//close on touch_upperband
strategy.close(id="vbLE", comment="Profit is : "+tostring(close - strategy.position_avg_price, "###.##") , when=strategy.position_size>=1 and exitOn=="touch_upperband" and (crossover(close, up) or crossover(high, up)))