Estrategia dinámica de apoyo y resistencia basada en datos históricos

El autor:¿ Qué pasa?, Fecha: 2023-11-28 17:00:13
Las etiquetas:

img

Resumen general

Esta estrategia calcula dinámicamente los niveles de soporte y resistencia basados en precios históricos altos, bajos y cerrados, y genera señales comerciales en consecuencia.

Estrategia lógica

  1. Calcular la media de los precios altos, bajos y cerrados de los períodos anteriores como punto de pivote (PP).

  2. Calcular las 3 líneas de apoyo: S1 = 2PP - precio más alto; S2 = PP - (R1-S1); S3 = precio más bajo - 2(precio más alto - PP).

  3. Calcule 3 líneas de resistencia: R1 = 2PP - precio más bajo; R2 = PP + (R1-S1); R3 = precio más alto + 2(PP - precio más bajo).

  4. Tomar una posición larga cuando el precio rompe las líneas de resistencia, tomar una posición corta cuando el precio rompe las líneas de soporte.

Análisis de ventajas

  1. Los niveles dinámicos de soporte y resistencia basados en datos históricos pueden captar los cambios en la estructura del mercado a tiempo.

  2. Los ajustes de soporte y resistencia de múltiples capas permiten una mejor optimización de la gestión del riesgo.

  3. Señales comerciales simples e intuitivas y mecanismo de stop loss.

Análisis de riesgos

  1. Los niveles de precios de referencia proporcionados por los datos históricos pueden volverse inválidos en escenarios de alta volatilidad.

  2. El cambio entre posiciones largas y cortas debe tener en cuenta el coste de negociación.

  3. La calidad de los datos debe garantizarse para evitar errores de cálculo.

Direcciones de optimización

  1. Considere la posibilidad de incorporar más referencias de datos históricos como la media móvil de 100 días, etc.

  2. Optimizar el tamaño de las posiciones, por ejemplo, ajustar el tamaño de las posiciones en función de la volatilidad.

  3. Añadir estrategias de stop loss como el stop loss de seguimiento o stop loss basado en el riesgo.

Resumen de las actividades

Esta estrategia proporciona niveles de referencia de precios de soporte y resistencia de múltiples capas basados en el historial. Tiene una lógica simple y directa adecuada para posiciones de mediano a largo plazo. Mientras tanto, se deben monitorear los riesgos bajo la alta volatilidad del mercado y los costos de negociación.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 09/06/2020
// Pivot points simply took the high, low, and closing price from the previous period and 
// divided by 3 to find the pivot. From this pivot, traders would then base their 
// calculations for three support, and three resistance levels. The calculation for the most 
// basic flavor of pivot points, known as ‘floor-trader pivots’, along with their support and 
// resistance levels.
//
// WARNING:
//  - For purpose educate only
//  - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title="Pivot Point V2", shorttitle="Pivot Point V2", overlay = true)
res = input(title="Resolution", type=input.resolution, defval="D")
SellFrom = input(title="Sell from ", defval="R1", options=["R1", "R2", "R3"])
BuyFrom = input(title="Buy from ", defval="S1", options=["S1", "S2", "S3"])
width = input(1, minval=1)
reverse = input(false, title="Trade reverse")
xHigh  = security(syminfo.tickerid,res, high)
xLow   = security(syminfo.tickerid,res, low)
xClose = security(syminfo.tickerid,res, close)
vPP = (xHigh+xLow+xClose) / 3
vS1 = 2*vPP - xHigh 
vR1 = 2*vPP-xLow
vS2 = vPP - (vR1 - vS1)
vR2 = vPP + (vR1 - vS1)
vS3 = xLow - 2 * (xHigh - vPP)
vR3 = xHigh + 2 * (vPP - xLow) 
pos = 0
S = iff(BuyFrom == "S1", vS1, 
      iff(BuyFrom == "S2", vS2,
         iff(BuyFrom == "S3", vS3,0)))
B = iff(SellFrom == "R1", vR1, 
      iff(SellFrom == "R2", vR2,
         iff(SellFrom == "R3", vR3,0)))
pos := iff(close > B, 1,
       iff(close < S, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Más.