Diese Strategie verwendet den VWAP (Volume Weighted Average Price) aus dem täglichen Zeitrahmen als Signal für den Einstieg und Ausstieg von Trades. Wenn der Schlusskurs über den VWAP überschreitet, löst sie einen Long-Entry aus, wobei der Stop-Loss am vorherigen Kerzenhoch gesetzt wird, wenn er unterhalb des VWAP liegt, und der Zielpreis 3 Punkte über dem Einstiegspreis gesetzt wird. Umgekehrt löst sie einen Short-Entry aus, wenn der Schlusskurs unterhalb des VWAP überschreitet, wobei der Stop-Loss am vorherigen Kerzenhoch gesetzt wird, wenn er über dem VWAP liegt, und der Zielpreis 3 Punkte unter dem Einstiegspreis gesetzt wird. Diese Strategie beinhaltet keine Ausstiegsbedingung, so dass die Trades offen bleiben, bis das gegenteilige Signal eintritt.
Durch die Verwendung von zeitlich übergreifenden VWAP-Daten zur Bestimmung von Trends und der Nutzung dynamischer Stop-Losses und Fix-Point-Take-Gewinne kann die Strategie Trending-Märkte effektiv erfassen, Drawdown-Risiken kontrollieren und die Gewinne rechtzeitig sichern.
Diese Strategie nutzt zeitlich begrenzte VWAP-Daten zur Trendbestimmung und Signal-Triggerung, während dynamische Stop-Losses und Fix-Point-Take-Profits eingesetzt werden, um Risiken zu kontrollieren und Gewinne zu erzielen. Es ist eine einfache und effektive quantitative Handelsstrategie. Durch Optimierungen bei der Trendfilterung, dynamischen Take-Profit, Positionsgröße und Handelssitzungswahl können die Robustheit und das Gewinnpotenzial der Strategie weiter verbessert werden.
/*backtest start: 2024-03-06 00:00:00 end: 2024-03-07 00:00:00 period: 45m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('Pine Script Tutorial Example Strategy 1', overlay=true, initial_capital=1000, default_qty_value=100, default_qty_type=strategy.percent_of_equity) // fastEMA = ta.ema(close, 24) // slowEMA = ta.ema(close, 200) // Higher Time Frame float sl = na float tgt = na posSize = 1 vwap_1d = request.security(syminfo.tickerid, "1D", ta.vwap(close)) // plot(vwap_1d) // To avoid differences on historical and realtime bars, you can use this technique, which only returns a value from the higher timeframe on the bar after it completes: // indexHighTF = barstate.isrealtime ? 1 : 0 // indexCurrTF = barstate.isrealtime ? 0 : 1 // nonRepaintingVWAP = request.security(syminfo.tickerid, "1D", close[indexHighTF])[indexCurrTF] // plot(nonRepaintingVWAP, "Non-repainting VWAP") enterLong = ta.crossover(close, vwap_1d) exitLong = ta.crossunder(close, vwap_1d) enterShort = ta.crossunder(close, vwap_1d) exitShort = ta.crossover(close, vwap_1d) if enterLong sl := low[1]>vwap_1d ?low[1]:vwap_1d tgt:=close+3 strategy.entry("EL", strategy.long, qty=posSize) strategy.exit('exitEL', 'EL', stop=sl, limit=tgt) if enterShort sl := high[1]<vwap_1d ?high[1]:vwap_1d tgt := close-3 strategy.entry("ES", strategy.short, qty=posSize) strategy.exit('exitES', 'ES', stop=sl, limit=tgt) // if exitLong // strategy.close("EL") // if exitShort // strategy.close("ES") // goLongCondition1 = ta.crossover(close, vwap_1d) // timePeriod = time >= timestamp(syminfo.timezone, 2021, 01, 01, 0, 0) // notInTrade = strategy.position_size <= 0 // if goLongCondition1 and timePeriod and notInTrade // stopLoss = low[1] // takeProfit = close+3 // strategy.entry('long', strategy.long) // strategy.exit('exit', 'long', stop=stopLoss, limit=takeProfit) plot(close, color=color.new(#00c510, 0)) plot(vwap_1d, color=color.new(#f05619, 0)) plot(sl, color=color.new(#fbff00, 0)) plot(tgt, color=color.new(#00e1ff, 0))