Esta estrategia combina el oscilador de tendencia de onda y el indicador VWMA para implementar una tendencia siguiendo la estrategia de negociación cuántica. Puede identificar las tendencias del mercado y tomar decisiones de compra o venta basadas en las señales del oscilador de tendencia de onda. Mientras tanto, el tamaño de la operación está determinado por las señales del indicador VWMA.
La estrategia se basa principalmente en los dos indicadores siguientes:
Oscilador de tendencia de onda: Este es un oscilador portado a TradingView por LazyBear, que identifica
Indicador VWMA: Esta es una línea de promedio móvil ponderada por volumen. Basado en si el precio está dentro o fuera de las bandas VWMA (bandas superiores e inferiores de VWMA), genera señales +1 (bullish), 0 (neutral) o -1 (bearish).
Las señales de tendencia de onda determinan cuándo comprar y vender, mientras que las señales alcistas / bajistas del indicador VWMA determinan el tamaño específico de la operación para cada operación.
Esta estrategia integra el juicio de tendencias y las capacidades de volumen para un enfoque avanzado de seguimiento de tendencias. Tiene algunas ventajas pero también riesgos a tener en cuenta.
/*backtest start: 2023-12-26 00:00:00 end: 2024-01-25 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/ // // Created by jadamcraig // // This strategy benefits from extracts taken from the following // studies/authors. Thank you for developing and sharing your ideas in an open // way! // * Wave Trend Strategy by thomas.gigure // * cRSI + Waves Strategy with VWMA overlay by Dr_Roboto // //@version=4 //============================================================================== //============================================================================== overlay = true // plots VWMA (need to close and re-add) //overlay = false // plots Wave Trend (need to close and re-add) strategy("Wave Trend w/ VWMA overlay", overlay=overlay) baseQty = input(defval=1, title="Base Quantity", type=input.float, minval=1) useSessions = input(defval=true, title="Limit Signals to Trading Sessions?") sess1_startHour = input(defval=8, title="Session 1: Start Hour", type=input.integer, minval=0, maxval=23) sess1_startMinute = input(defval=25, title="Session 1: Start Minute", type=input.integer, minval=0, maxval=59) sess1_stopHour = input(defval=10, title="Session 1: Stop Hour", type=input.integer, minval=0, maxval=23) sess1_stopMinute = input(defval=25, title="Session 1: Stop Minute", type=input.integer, minval=0, maxval=59) sess2_startHour = input(defval=12, title="Session 2: Start Hour", type=input.integer, minval=0, maxval=23) sess2_startMinute = input(defval=55, title="Session 2: Start Minute", type=input.integer, minval=0, maxval=59) sess2_stopHour = input(defval=14, title="Session 2: Stop Hour", type=input.integer, minval=0, maxval=23) sess2_stopMinute = input(defval=55, title="Session 2: Stop Minute", type=input.integer, minval=0, maxval=59) sess1_closeAll = input(defval=false, title="Close All at End of Session 1") sess2_closeAll = input(defval=true, title="Close All at End of Session 2") //============================================================================== //============================================================================== // Volume Weighted Moving Average (VWMA) //============================================================================== //============================================================================== plotVWMA = overlay // check if volume is available for this equity useVolume = input( title="VWMA: Use Volume (uncheck if equity does not have volume)", defval=true) vwmaLen = input(defval=21, title="VWMA: Length", type=input.integer, minval=1, maxval=200) vwma = vwma(close, vwmaLen) vwma_high = vwma(high, vwmaLen) vwma_low = vwma(low, vwmaLen) if not(useVolume) vwma := wma(close, vwmaLen) vwma_high := wma(high, vwmaLen) vwma_low := wma(low, vwmaLen) // +1 when above, -1 when below, 0 when inside vwmaSignal(priceOpen, priceClose, vwmaHigh, vwmaLow) => sig = 0 color = color.gray if priceClose > vwmaHigh sig := 1 color := color.green else if priceClose < vwmaLow sig := -1 color := color.red else sig := 0 color := color.gray [sig,color] [vwma_sig, vwma_color] = vwmaSignal(open, close, vwma_high, vwma_low) priceAboveVWMA = vwma_sig == 1 ? true : false priceBelowVWMA = vwma_sig == -1 ? true : false // plot(priceAboveVWMA?2.0:0,color=color.blue) // plot(priceBelowVWMA?2.0:0,color=color.maroon) //bandTrans = input(defval=70, title="VWMA Band Transparancy (100 invisible)", // type=input.integer, minval=0, maxval=100) //fillTrans = input(defval=70, title="VWMA Fill Transparancy (100 invisible)", // type=input.integer, minval=0, maxval=100) bandTrans = 60 fillTrans = 60 // ***** Plot VWMA ***** highband = plot(plotVWMA?fixnan(vwma_high):na, title='VWMA High band', color = vwma_color, linewidth=1, transp=bandTrans) lowband = plot(plotVWMA?fixnan(vwma_low):na, title='VWMA Low band', color = vwma_color, linewidth=1, transp=bandTrans) fill(lowband, highband, title='VWMA Band fill', color=vwma_color, transp=fillTrans) plot(plotVWMA?vwma:na, title='VWMA', color = vwma_color, linewidth=3, transp=bandTrans) //============================================================================== //============================================================================== // Wave Trend //============================================================================== //============================================================================== plotWaveTrend = not(overlay) n1 = input(10, "Wave Trend: Channel Length") n2 = input(21, "Wave Trend: Average Length") obLevel1 = input(60, "Wave Trend: Over Bought Level 1") obLevel2 = input(53, "Wave Trend: Over Bought Level 2") osLevel1 = input(-60, "Wave Trend: Over Sold Level 1") osLevel2 = input(-53, "Wave Trend: Over Sold Level 2") ap = hlc3 esa = ema(ap, n1) d = ema(abs(ap - esa), n1) ci = (ap - esa) / (0.015 * d) tci = ema(ci, n2) wt1 = tci wt2 = sma(wt1,4) plot(plotWaveTrend?0:na, color=color.gray) plot(plotWaveTrend?obLevel1:na, color=color.red) plot(plotWaveTrend?osLevel1:na, color=color.green) plot(plotWaveTrend?obLevel2:na, color=color.red, style=3) plot(plotWaveTrend?osLevel2:na, color=color.green, style=3) plot(plotWaveTrend?wt1:na, color=color.green) plot(plotWaveTrend?wt2:na, color=color.red, style=3) plot(plotWaveTrend?wt1-wt2:na, color=color.blue, transp=80) //============================================================================== //============================================================================== // Order Management //============================================================================== //============================================================================== // Define Long and Short Conditions longCondition = crossover(wt1, wt2) shortCondition = crossunder(wt1, wt2) // Define Quantities orderQty = baseQty * 2 if (longCondition) if (vwma_sig == 1) if ( strategy.position_size >= (baseQty * 4 * -1) and strategy.position_size < 0 ) orderQty := baseQty * 4 + abs(strategy.position_size) else orderQty := baseQty * 4 else if (vwma_sig == 0) if ( strategy.position_size >= (baseQty * 2 * -1) and strategy.position_size < 0 ) orderQty := baseQty * 2 + abs(strategy.position_size) else orderQty := baseQty * 2 else if (vwma_sig == -1) if ( strategy.position_size >= (baseQty * 1 * -1) and strategy.position_size < 0 ) orderQty := baseQty * 1 + abs(strategy.position_size) else orderQty := baseQty * 1 else if (shortCondition) if (vwma_sig == -1) if ( strategy.position_size <= (baseQty * 4) and strategy.position_size > 0 ) orderQty := baseQty * 4 + strategy.position_size else orderQty := baseQty * 4 else if (vwma_sig == 0) if ( strategy.position_size <= (baseQty * 2) and strategy.position_size > 2 ) orderQty := baseQty * 2 + strategy.position_size else orderQty := baseQty * 2 else if (vwma_sig == 1) if ( strategy.position_size <= (baseQty * 1) and strategy.position_size > 0 ) orderQty := baseQty * 1 + strategy.position_size else orderQty := baseQty * 1 // Determine if new trades are permitted newTrades = false if (useSessions) if ( hour == sess1_startHour and minute >= sess1_startMinute ) newTrades := true else if ( hour > sess1_startHour and hour < sess1_stopHour ) newTrades := true else if ( hour == sess1_stopHour and minute < sess1_stopMinute ) newTrades := true else if ( hour == sess2_startHour and minute >= sess2_startMinute ) newTrades := true else if ( hour > sess2_startHour and hour < sess2_stopHour ) newTrades := true else if ( hour == sess2_stopHour and minute < sess2_stopMinute ) newTrades := true else newTrades := false else newTrades := true // Long Signals if ( longCondition ) strategy.order("Buy", strategy.long, orderQty) // Short Signals if ( shortCondition ) strategy.order("Sell", strategy.short, orderQty) // Close open position at end of Session 1, if enabled if (sess1_closeAll ) strategy.close_all() // Close open position at end of Session 2, if enabled if (sess2_closeAll ) strategy.close_all()