Estrategia de detención de pesca de Yurik

El autor:¿ Qué pasa?, Fecha: 2024-02-02 14:57:33
Las etiquetas:

img

Resumen general

La estrategia de trailing stop de Fisher Yurik es una estrategia de trading cuantitativa que integra el indicador de Fisher Yurik y los mecanismos de trailing stop.

Estrategia lógica

  1. Intervalos de fechas de entrada para definir el marco de tiempo de backtest/transacción en vivo
  2. Parámetros de entrada para el indicador Fisher Yurik, por defecto a 2 períodos
  3. Indicadores de toma de ganancias e interrupción de pérdidas de entrada, incumplimiento del 5% de ganancias y 2% de pérdidas
  4. Calcular las líneas principales y de señal del indicador Fisher Yurik
  5. Generar señal de compra cuando la línea principal cruza por encima de la línea de señal
  6. Establecer un alto de seguimiento, salir de una posición larga cuando el precio cae un 2% después de la entrada
  7. Tome ganancias cuando el precio suba por encima del 5%

Análisis de ventajas

  1. El indicador Fisher Yurik identifica fácilmente las tendencias, señales de compra precisas
  2. Las paradas de seguimiento se bloquean en la mayoría de las ganancias, evitando las paradas más allá del umbral
  3. Los parámetros personalizables se adaptan a diferentes entornos de mercado
  4. Implementación sencilla y fácil de entender

Análisis de riesgos

  1. El ajuste incorrecto de parámetros puede causar una negociación demasiado agresiva, requiere pruebas cuidadosas
  2. El stop loss demasiado amplio puede conducir a pérdidas más altas que las esperadas.
  3. Tomar ganancias demasiado apretadas puede reducir las ganancias, limitando la rentabilidad
  4. Se deben determinar parámetros adecuados para diferentes productos

Los riesgos pueden abordarse ajustando las relaciones stop/profit, los parámetros de prueba, utilizando filtros de señal, reglas de dimensionamiento de posiciones.

Oportunidades de mejora

  1. Optimizar los parámetros de Fisher Yurik para el impacto en la estrategia
  2. Añadir filtros de señal como MACD, KD para mejorar la calidad de la señal
  3. Añadir condiciones de entrada como las rupturas de Bollinger Bands
  4. Incorporar reglas de dimensionamiento de posiciones para controlar el riesgo por operación
  5. Mejorar los métodos de detención de trailers, por ejemplo, las salidas suavizadas y de candelabros

Conclusión

La estrategia de stop de Fisher Yurik combina la identificación de tendencias y la gestión de riesgos. Con ajuste de parámetros, combinaciones de indicadores y mejoras de stop loss, puede adaptarse a la mayoría de los instrumentos para obtener buenas ganancias dentro de tolerancias de riesgo aceptables.


/*backtest
start: 2023-01-26 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Fisher_Yurik Strategy with Trailing Stop", shorttitle="FY Strategy", overlay=true)

// Date Ranges 
from_month = input(defval = 1, title = "From Month")
from_day   = input(defval = 1, title = "From Day")
from_year  = input(defval = 2021, title = "From Year")
to_month   = input(defval = 1, title = "To Month")
to_day     = input(defval = 1, title = "To Day")
to_year    = input(defval = 9999, title = "To Year")
start  = timestamp(from_year, from_month, from_day, 00, 00)  // backtest start window
finish = timestamp(to_year, to_month, to_day, 23, 59)        // backtest finish window
window = true
period = input(2, title='Period')
cost = input.float(1.05, title='profit level ', step=0.01)
dusus = input.float(1.02, title='after the signal', step=0.01)

var float Value = na
var float Fish = na
var float ExtBuffer1 = na
var float ExtBuffer2 = na

price = (high + low) / 2
MaxH = ta.highest(high, period)
MinL = ta.lowest(low, period)

Value := 0.33 * 2 * ((price - MinL) / (MaxH - MinL) - 0.5) + 0.67 * nz(Value[1])
Value := math.max(math.min(Value, 0.999), -0.999)
Fish := 0.5 * math.log((1 + Value) / (1 - Value)) + 0.5 * nz(Fish[1])

up = Fish >= 0

ExtBuffer1 := up ? Fish : na
ExtBuffer2 := up ? na : Fish

var float entryPrice = na
var float stopPrice = na
 
if (ExtBuffer1 > ExtBuffer1[1])
    entryPrice := close*dusus
    stopPrice := close * cost 
 
if (ExtBuffer2 < ExtBuffer2[1])
    entryPrice := close
    stopPrice := close * cost

// Sadece seçilen test döneminde işlem yapma koşulu eklenmiştir
strategy.entry("Buy", strategy.long, when=ExtBuffer1 > ExtBuffer1[1] and window)
strategy.exit("Take Profit/Trailing Stop", from_entry="Buy", when=(close >= entryPrice * cost) or (close < stopPrice), trail_offset=0.08, trail_price=entryPrice * cost)


Más.