Estrategia de reversión del impulso del mercado

El autor:¿ Qué pasa?, Fecha: 2024-02-29 15:10:11
Las etiquetas:

img

Resumen general

Esta estrategia combina el indicador Supertrend y Fisher Transform para buscar oportunidades cortas cuando el mercado se invierte. Puede ajustar los parámetros de Supertrend y Fisher Transform para diferentes criptomonedas, acciones y mercados. Cuando aparece una señal de venta, muestra el tamaño de la posición, los niveles de stop loss y take profit. También puede cambiar la cantidad de riesgo.

Estrategia lógica

La estrategia primero calcula la Transformación de Fisher con un período de 10. Cuando la línea de Fisher rompe 2.5 desde abajo, se genera una señal de venta. Al mismo tiempo, calcula el Rango Verdadero Medio (ATR) de 10 períodos como el canal para la Supertrend. Cuando el precio cruza por debajo del tren superior, se genera una señal de venta. Por lo tanto, la estrategia combina la Transformación de Fisher y el canal de Supertrend para capturar oportunidades cortas cuando el mercado se invierte.

Específicamente, cuando el cierre actual está por debajo del tren superior anterior y el cierre anterior está por encima del tren inferior del canal Supertrend, determina que el mercado se ha invertido y genera una señal de venta.

Así que la estrategia requiere tanto la identificación de la inversión de Supertrend y Fisher Transform para generar la señal de venta final.

Ventajas

La estrategia combina el canal de Supertrend y Fisher Transform, que puede capturar con mayor precisión los puntos de reversión del mercado.

Además, la estrategia proporciona flexibilidad para ajustar los parámetros de Supertrend y Fisher. Los usuarios pueden seleccionar las mejores combinaciones de parámetros para diferentes mercados y productos para adaptarse al mercado con propósito.

La estrategia también proporciona la gestión de la cantidad de riesgo. Los usuarios pueden ajustar convenientemente el capital de riesgo para cada orden para satisfacer sus propias necesidades de gestión de riesgos. Al mismo tiempo, calcula automáticamente los niveles de stop loss y profit taking para lograr una buena relación riesgo-recompensa.

Los riesgos

La estrategia se basa principalmente en el canal de Supertrend para determinar la estructura del mercado. Cuando la tendencia dura durante un período prolongado, la Supertrend puede fallar. En este caso, el período o el multiplicador ATR del canal debe aumentarse adecuadamente.

Además, Fisher Transform tiende a generar señales falsas o señales prematuras fácilmente.

Además, la tasa de ganancia general de las estrategias de reversión puede ser limitada. Debe combinarse con indicadores de tendencia para evitar abrir posiciones en zonas de rango o participar después de que la tendencia se vuelva más clara.

Direcciones de mejora

La estrategia puede mejorarse en los siguientes aspectos:

  1. Optimizar el período ATR y el multiplicador ATR de Supertrend para obtener la mejor combinación de parámetros basada en diferentes productos y condiciones de mercado.

  2. Optimizar el período de Fisher para suavizar la curva y evitar señales falsas.

  3. Añadir promedios móviles o bandas de Bollinger como indicador auxiliar para evitar la apertura de posiciones en mercados variables.

  4. Combinar la transformación de Fisher en diferentes plazos para lograr un juicio de inversión más estable.

  5. Añadir módulos de gestión de posiciones como el ratio de apalancamiento, el tamaño de las posiciones, reglas adicionales, etc. para controlar los riesgos.

  6. Incorporar métodos de aprendizaje automático para lograr la optimización automática de parámetros y el ajuste de estrategias.

Conclusión

La estrategia integra Supertrend y Fisher Transform con flexibilidad para adaptarse a diferentes productos mediante ajuste de parámetros, en comparación con las estrategias de indicadores únicos. Logra un juicio de señal y control de riesgos más confiables. Con una mejora continua, la estrategia promete mejorar aún más la estabilidad y la rentabilidad. Es una estrategia de alta calidad que vale la pena rastrear y acumular a largo plazo.


/*backtest
start: 2024-02-21 00:00:00
end: 2024-02-27 03:00:00
period: 2m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Supertrend and Fisher_SHORT", overlay=true)

//This block is for  Fisher Transformation Calculation.
len = input.int(10, minval=1, title="Length") // Length is optional. 10 is good but is up to you.
high_ = ta.highest(hl2, len)
low_ = ta.lowest(hl2, len)
round_(val) => val > .99 ? .999 : val < -.99 ? -.999 : val
value = 0.0
value := round_(.66 * ((hl2 - low_) / (high_ - low_) - .5) + .67 * nz(value[1]))
fish1 = 0.0
fish1 := .5 * math.log((1 + value) / (1 - value)) + .5 * nz(fish1[1])
fish2 = fish1[1]

// Sell condition for Fisher transformation.
sell_signal = (fish1 > 2.5) and (fish2 > fish1)
durum = 0 //just for the situation.

if (sell_signal)
    durum := -1 // now it changes from 0 to -1.

// Supertrend indicator inputs and calculations (same as in the indicator)
Periods = input(title='ATR Period', defval=10) // period is 10, but you can change it
src = input(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=2) //atr multiplier is important. it is 2 for this strategy but you can find another for best performance 
RiskAmount = input.float(title='Risk Amount ($)', defval=10.0, minval=0.0, step=1.0) // ıf you use risk-reward method, risk is 10$ for each position. you can also change it
changeATR = input(title='Change ATR Calculation Method ?', defval=true)

atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Calculate position size based on risk amount
riskPerContract = atr * Multiplier
contracts = RiskAmount / (riskPerContract * syminfo.mintick)

//short signal condition
sellSignal = trend == -1 and trend[1] == 1 and durum == -1

plotshape(sellSignal, title='Sell Signal', location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small) //shows the signal.

// variables
var float entryPrice = na
var float stopLoss = na
var float takeProfit = na
var float atr1 = na
var float takeProfit2 = na
var float takeProfit3 = na

//it calculates the stop level and reward profit levels using atr.
if (sellSignal)
    entryPrice := close
    atr1 := atr
    stopLoss := entryPrice + atr1 * Multiplier
    contracts := entryPrice / (stopLoss - entryPrice) * RiskAmount / entryPrice
    takeProfit := entryPrice - atr1 * Multiplier
    takeProfit2 := entryPrice - 2 * atr1 * Multiplier
    takeProfit3 := entryPrice - 3 * atr1 * Multiplier

if (sellSignal)
    strategy.entry("Sell", strategy.short, qty=1)

// 
if (close >= stopLoss)
    strategy.close("Sell", comment="Stop Loss Hit")
else if (close <= takeProfit)
    strategy.close("Sell", comment="Take Profit Hit")

// draw the stop, entry and profit levels
plot(stopLoss, title="Stop Loss", color=color.red, linewidth=1, style=plot.style_linebr)
plot(entryPrice, title="Entry Price", color=color.orange, linewidth=1, style=plot.style_linebr)
plot(takeProfit, title="Take Profit", color=color.green, linewidth=1, style=plot.style_linebr)
plot(takeProfit2, title="Take Profit 2", color=color.blue, linewidth=1, style=plot.style_linebr)
plot(takeProfit3, title="Take Profit 3", color=color.purple, linewidth=1, style=plot.style_linebr)


Más.