Indicador de precios por volumen Estrategia de negociación equilibrada

El autor:¿ Qué pasa?, Fecha: 2023-11-24 14:35:13
Las etiquetas:

img

Resumen general

Esta estrategia es una estrategia de negociación de indicadores de precio de volumen de varios marcos de tiempo. Utiliza ampliamente el índice de fuerza relativa (RSI), el rango verdadero promedio (ATR), el promedio móvil simple (SMA) y las condiciones de precio de volumen personalizado para identificar señales largas potenciales. Cuando se cumplen ciertas condiciones de sobreventa, cruce de precios de volumen, ruptura de precios y otras condiciones de entrada, esta estrategia establecerá posiciones largas. También establece niveles de stop loss y toma de ganancias para controlar la relación riesgo-recompensa por operación.

Estrategia lógica

Los puntos clave de esta estrategia son los siguientes:

  1. Cuando el RSI está por debajo del nivel de sobreventa y permanece sobreventa durante los últimos 10 bares, se considera una señal de sobreventa.
  2. Se definen múltiples conjuntos de condiciones de precio de volumen, y todas estas condiciones deben cumplirse al mismo tiempo para activar la señal larga del indicador de precio de volumen
  3. Cuando el precio de cierre se rompe por encima de la SMA de 13 períodos, se considera una señal de ruptura del precio.
  4. El período pequeño de ATR que es menor que el período grande de ATR también es una señal larga contribuyente
  5. La estrategia combina todas las señales anteriores para tomar la decisión final de entrada larga

Específicamente, esta estrategia establece los parámetros de longitud y sobreventa para el indicador RSI y calcula los valores de RSI basados en estos parámetros.

Además, la estrategia define 3 umbrales de volumen y establece múltiples conjuntos de condiciones de precios de volumen basadas en datos de diferentes períodos de tiempo. Por ejemplo, el valor de volumen del período de 90 es mayor que 1,5 veces el del período de 49. Cuando todas estas condiciones de precios de volumen se cumplen al mismo tiempo, el indicador de precios de volumen genera una señal larga.

En el aspecto del precio, la estrategia calcula la SMA de 13 períodos y cuenta el número de barras desde que el precio se rompe por encima de la SMA.

Para los parámetros del período ATR, esta estrategia especifica un período pequeño de 5 y un período grande de 14 para el ATR. Cuando el período pequeño ATR es inferior al período grande ATR, indica que la volatilidad del mercado se está acelerando hacia abajo y contribuye a la señal larga.

Por último, la estrategia tiene en cuenta todos los criterios de entrada anteriores, incluidos los indicadores de sobreventa, precio de volumen, ruptura de precios y ATR. Cuando todas estas condiciones se cumplen al mismo tiempo, se activa la señal larga final y se establece una posición larga.

Ventajas

Esta estrategia tiene las siguientes ventajas:

  1. Al evaluar múltiples conjuntos de datos de precios de volumen en diferentes marcos de tiempo en lugar de un solo marco de tiempo, la estrategia puede juzgar la concentración de los volúmenes de negociación con mayor precisión.

  2. El mecanismo de confirmación triple de sobreventa + precio de volumen + ruptura de precios garantiza señales de entrada confiables.

  3. El mecanismo de stop loss y take profit controla estrictamente el riesgo por operación. Los parámetros de stop loss y take profit se pueden ajustar en función del apetito de riesgo personal para maximizar las ganancias y controlar razonablemente el riesgo por operación.

  4. La integración de múltiples indicadores aumenta la robustez.Incluso si algunos indicadores fallan o funcionan mal, la estrategia aún puede basarse en otros indicadores para el juicio y garantizar un cierto nivel de resiliencia.

Riesgos y contramedidas

También hay algunos riesgos con esta estrategia:

  1. El riesgo de configuración de parámetros. Los parámetros de los indicadores afectan directamente el juicio, y los parámetros inadecuados pueden conducir a sesgos en las señales comerciales. Los valores razonables de los parámetros deben validarse cuidadosamente.

  2. Como estrategia que integra múltiples indicadores para el juicio colectivo, sus señales tienden a ser más conservadoras con relativamente menos operaciones por unidad de tiempo, por lo que el potencial de ganancia tiene algunas limitaciones.

  3. El riesgo de divergencia de los indicadores: cuando algunos indicadores emiten señales largas y otros señales cortas, la estrategia no puede determinar la decisión óptima.

Direcciones de optimización

Esta estrategia puede optimizarse aún más en los siguientes aspectos:

  1. Incorporar modelos de aprendizaje automático para ayudar al juicio. Los modelos pueden ser entrenados en las características de precio de volumen y volatilidad para ajustar dinámicamente los parámetros definidos manualmente.

  2. Mejorar la sofisticación de las estrategias de toma de ganancias, tales como la detención posterior de la toma de ganancias, las ganancias de toma parcial, etc., para aumentar aún más la ganancia por operación y evitar la pérdida de ganancias.

  3. Además de los datos del gráfico de precios y volumen, los datos del libro de pedidos también revelan información de distribución de liquidez de profundidad para proporcionar señales de referencia suplementarias.

  4. Combinaciones de pruebas con otros indicadores. Esta estrategia utiliza principalmente indicadores como RSI, ATR y SMA. Otros indicadores como Bollinger Bands y KDJ también se pueden combinar para diversificar y optimizar las fuentes de señales comerciales.

Conclusión

Esta estrategia utiliza una combinación de indicadores que incluyen RSI, ATR, SMA y condiciones de precio de volumen personalizadas para identificar oportunidades potenciales de entrada larga. Tiene ventajas como la evaluación de precios de volumen de múltiples marcos de tiempo, mecanismo de confirmación triple y controles de riesgo de stop loss / take profit. Sin embargo, también hay que tener en cuenta riesgos como la configuración de parámetros, el potencial de ganancia restringido. En el futuro, esta estrategia puede mejorarse aún más mediante el aumento del aprendizaje automático, un diseño de ganancias más sofisticado, la incorporación de datos de libros de pedidos, así como combinaciones de indicadores expandidas.


/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © Kimply_Tr
//@version=5

// Strategy settings and parameters
strategy(title='Volume ValueWhen Velocity', overlay=true)

// Define the stop-loss and take-profit percentages for the long strategy
long_stoploss_value = input.float(defval=3, title='Stop-Loss (SL) %', minval=0, group='▶ Stop Loss/Take Profit => Long-Strategy', inline='2')
long_stoploss_percentage = close * (long_stoploss_value / 100) / syminfo.mintick  // Calculate long stop-loss percentage
long_takeprofit_value = input.float(defval=2, title='Take-Profit (TP) %', minval=0, group='▶ Stop Loss/Take Profit => Long-Strategy', inline='2')
long_takeprofit_percentage = close * (long_takeprofit_value / 100) / syminfo.mintick  // Calculate long take-profit percentage

// Define parameters related to ValueWhen occurrences
occurrence_ValueWhen_1 = input.int(title='occurrence_ValueWhen_1', defval=1, maxval=100, step=1, group="▶ ValueWhen",tooltip ="Its value must be smaller than (occurrence_ValueWhen_2)")  
occurrence_ValueWhen_2 = input.int(title='occurrence_ValueWhen_2', defval=5, maxval=100, step=1, group="▶ ValueWhen" ,tooltip="Its value must be greater than (occurrence_ValueWhen_1)")
distance_value=input.int(title='distance_value_occurrence', defval=170, maxval=5000, step=1, group="▶ ValueWhen" ,tooltip="It indicates the minimum distance between the occurrences of 1 and 2, i.e. the difference between the occurrences of 1 and 2 is greater than (distance_value_occurrence)")

// Define RSI-related parameters
rsi_over_sold = input.int(defval=60, minval=1, title='Oversold Level', group='▶ RSI',inline ='2')  // Input for oversold level in RSI
rsi_length = input.int(defval=40, minval=1, title='RSI Length', group='▶ RSI',inline ='2')  // Input for RSI length
rsi = ta.rsi(close, rsi_length)  // Calculate RSI

// Define volume thresholds
volume_threshold1 = input.float(title='volume_threshold_1', defval=0.5, maxval=10, step=0.1, group="▶ Volume")  
volume_threshold2 = input.float(title='volume_threshold_2', defval=0.4, maxval=10, step=0.1, group="▶ Volume")  
volume_threshold3 = input.float(title='volume_threshold_3', defval=0.62, maxval=10, step=0.1, group="▶ Volume")  

// ATR (Average True Range)
// Define ATR parameters
atr_small = input.int(title='ATR_Small', defval=5, maxval=500, step=1, group="▶ Atr",inline ='2') 
atr_big = input.int(title='ATR_Big ', defval=14, maxval=500, step=1, group="▶ Atr",inline ='2') 

atr_value3 = ta.atr(15)  // Calculate ATR value 3
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Date Range
// Define the date range for back-testing
start_date = input.int(title='Start Day', defval=1, minval=1, maxval=31, group='▶ Time-Period for Back-Testing', inline='1')  // Input for start day
end_date = input.int(title='until Day', defval=1, minval=1, maxval=31, group='▶ Time-Period for Back-Testing', inline='1')  // Input for end day
start_month = input.int(title='Start Month', defval=7, minval=1, maxval=12, group='▶ Time-Period for Back-Testing', inline='2')  // Input for start month
end_month = input.int(title='until Month', defval=1, minval=1, maxval=12, group='▶ Time-Period for Back-Testing', inline='2')  // Input for end month
start_year = input.int(title='Start Year', defval=2022, minval=1800, maxval=3000, group='▶ Time-Period for Back-Testing', inline='3')  // Input for start year
end_year = input.int(title='until Year', defval=2077, minval=1800, maxval=3000, group='▶ Time-Period for Back-Testing', inline='3')  // Input for end year
in_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)  // Check if the current time is within the specified date range
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
was_over_sold = ta.barssince(rsi <= rsi_over_sold) <= 10  // Check if RSI was oversold in the last 10 bars
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
getVolume(symbol, bar) =>
    request.security(syminfo.tickerid, "D", volume)[bar]  // Function to get volume data for a specific symbol and bar

getVolume2(symbol, bar) =>
    request.security(syminfo.tickerid, "39", volume)[bar]  // Function to get volume data for a specific symbol and bar 2
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

firstCandleColor1 = request.security(syminfo.tickerid, "D", close[2] > open[1] ? 1 : 0)
firstCandleColor2 = request.security(syminfo.tickerid, "1", close[2] > open[0] ? 1 : 0)
firstCandleColor3 = request.security(syminfo.tickerid, "W", close[1] > open[1] ? 1 : 0)

firstCandleColor= ((firstCandleColor1+firstCandleColor2)) > firstCandleColor3 ? 1 : 0

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
sma = ta.sma(close, 13)  // Calculate the simple moving average (SMA) of the close price over 13 periods
numCandles = ta.barssince(close > sma)  // Count the number of candles since the close price crossed above the SMA
atr1=request.security(syminfo.tickerid, "30", ta.atr(atr_small)<ta.atr(atr_big))  // Get the ATR value for the specific security and timeframe (30 minutes) and check if ATR_small is less than ATR_big

prevClose = ta.valuewhen(close > sma, close, occurrence_ValueWhen_1)  // Get the close price when it first crosses above the SMA based on occurrence_ValueWhen_1
prevCloseBarsAgo = ta.valuewhen(close > sma, close, occurrence_ValueWhen_2)  // Get the close price when it first crosses above the SMA based on occurrence_ValueWhen_2
prevCloseChange =  (prevCloseBarsAgo - prevClose )  // Calculate the change in the close price between the occurrences of crossing above the SMA

atrval=(atr_value3>140) or (atr_value3 < 123)  // Check if atr_value3 is either greater than 140 or less than 123

Condition =  getVolume(syminfo.tickerid, 90) > volume_threshold1 * getVolume(syminfo.tickerid, 49)   and getVolume(syminfo.tickerid, 110) > volume_threshold3 * getVolume(syminfo.tickerid, 49)  and getVolume2(syminfo.tickerid, 30) > volume_threshold2 * getVolume2(syminfo.tickerid, 55) and getVolume2(syminfo.tickerid, 7) > volume_threshold2 * getVolume2(syminfo.tickerid, 3)  // Check multiple volume conditions

buy_signal=Condition  and atrval and firstCandleColor==0 and  was_over_sold and  prevCloseChange> distance_value and atr1 and  numCandles<5  // Determine if the buy signal is generated based on various conditions

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Long Strategy
// Enter long position if the buy signal conditions are met and within the specified date range
if buy_signal and in_date_range
    strategy.entry('Long', strategy.long, alert_message='Open Long Position')  // Enter long position
    strategy.exit('Long SL/TP', from_entry='Long', loss=long_stoploss_percentage, profit=long_takeprofit_percentage, alert_message='Your SL/TP-Limit for the Long-Strategy has been activated.')  // Exit long position with stop-loss and take-profit




Más.