Estrategia de trading con límite de tiempo de doble MA


Fecha de creación: 2023-11-14 16:45:03 Última modificación: 2023-11-14 16:45:03
Copiar: 0 Número de Visitas: 654
1
Seguir
1617
Seguidores

Estrategia de trading con límite de tiempo de doble MA

Descripción general

Esta estrategia se basa en la estrategia de negociación original de doble equilátero, con la adición de un módulo de límite de tiempo para controlar el tiempo de inicio de la estrategia. Este módulo puede administrar eficazmente el tiempo de ejecución de la estrategia y reducir el riesgo de negociación en condiciones de mercado no ideales.

El principio

La estrategia utiliza la MA rápida y la MA lenta para construir señales de negociación. El parámetro de la MA rápida es de 14 días y el parámetro de la MA lenta es de 21 días. Se genera una señal de compra cuando la MA rápida atraviesa la MA lenta; se genera una señal de venta cuando la MA rápida atraviesa la MA lenta.

La estrategia también introdujo una opción de inversión de la operación, que puede revertir la dirección de la señal de negociación original.

El módulo de restricción de tiempo compara la hora actual con la hora de inicio establecida y devuelve el valor real para controlar si la estrategia se inicia. El módulo necesita configurar el año, mes, día, hora y minuto de inicio, y la estrategia se iniciará solo si la hora actual supera la hora establecida.

Las ventajas

  • El uso de la doble MA para formar señales de negociación puede capturar de manera efectiva las tendencias a corto y medio plazo
  • El módulo de restricción de tiempo añadido permite un control más preciso del tiempo de ejecución de la estrategia, evitando transacciones innecesarias en condiciones de mercado no ideales
  • La opción de invertir las operaciones aumenta la flexibilidad de la estrategia

Riesgos y soluciones

  • Las estrategias de doble MA pueden generar múltiples señales de negociación, lo que conlleva una mayor frecuencia de negociación y costos de negociación.
  • La configuración incorrecta del módulo de restricción de tiempo puede causar oportunidades de negociación perdidas
  • La elección incorrecta de la inversión puede causar errores en las señales de negociación

Puede optimizar adecuadamente los parámetros del ciclo MA, reduciendo la frecuencia de las operaciones. Al mismo tiempo, puede establecer un tiempo razonable para limitar el inicio de los módulos y evitar perder oportunidades. Finalmente, puede elegir con prudencia si es necesario invertir la dirección de la señal de negociación según las diferentes condiciones del mercado.

Dirección de optimización

  • Aumentar el módulo de stop loss para controlar mejor el riesgo de una sola transacción
  • Aumentar el seguimiento móvil de los puntos de parada para mover los puntos de parada gradualmente según la tendencia y obtener un seguimiento de extracción de ganancias
  • La combinación de señales de operación de varios parámetros puede mejorar la calidad de la señal y reducir las falsas señales
  • Desarrollar módulos de optimización de parámetros que buscan automáticamente la combinación óptima de parámetros

Resumir

Esta estrategia, mediante la formación de señales de negociación de doble MA, y la adición de un módulo de control de tiempo de tiempo de la estrategia de control de tiempo de tiempo, puede capturar la tendencia de manera eficaz, mientras que el riesgo de evitar condiciones de mercado no ideales. La estrategia también puede ser mejorada aún más a través de la optimización de la configuración de los parámetros, módulos de deterioro, y el funcionamiento de la escala, para aumentar la estabilidad y la rentabilidad de cada transacción, mientras que la reducción de la frecuencia de las operaciones.

Código Fuente de la Estrategia
/*backtest
start: 2023-11-06 00:00:00
end: 2023-11-13 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

strategy(title = "Strategy Code Example", shorttitle = "Strategy Code Example", overlay = true)

// Revision:        1
// Author:          @JayRogers
//
// *** THIS IS JUST AN EXAMPLE OF STRATEGY TIME LIMITING ***
//
//  This is a follow up to my previous strategy example for risk management, extended to include a time limiting factor.

// === GENERAL INPUTS ===
// short ma
maFastSource   = input(defval = open, title = "Fast MA Source")
maFastLength   = input(defval = 14, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource   = input(defval = open, title = "Slow MA Source")
maSlowLength   = input(defval = 21, title = "Slow MA Period", minval = 1)

// === STRATEGY RELATED INPUTS ===
tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// Risk management
inpTakeProfit   = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
// *** FOCUS OF EXAMPLE ***
// Time limiting
// a toggle for enabling/disabling
useTimeLimit    = input(defval = true, title = "Use Start Time Limiter?")
// set up where we want to run from
startYear       = input(defval = 2016, title = "Start From Year",  minval = 0, step = 1)
startMonth      = input(defval = 05, title = "Start From Month",  minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day",  minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour",  minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute",  minval = 0,step = 1)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// *** FOCUS OF EXAMPLE ***
// === TIME LIMITER CHECKING FUNCTION ===
// using a multi line function to return true or false depending on our input selection
// multi line function logic must be indented.
startTimeOk() =>
    // get our input time together
    inputTime   = timestamp(syminfo.timezone, startYear, startMonth, startDay, startHour, startMinute)
    // check the current time is greater than the input time and assign true or false
    timeOk      = time > inputTime ? true : false
    // last line is the return value, we want the strategy to execute if..
    // ..we are using the limiter, and the time is ok -OR- we are not using the limiter
    r = (useTimeLimit and timeOk) or not useTimeLimit

// === SERIES SETUP ===
/// a couple of ma's..
maFast = ema(maFastSource, maFastLength)
maSlow = ema(maSlowSource, maSlowLength)

// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = red, linewidth = 2, style = line, transp = 50)

// === LOGIC ===
// is fast ma above slow ma?
aboveBelow = maFast >= maSlow ? true : false
// are we inverting our trade direction?
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

// *** FOCUS OF EXAMPLE ***
// wrap our strategy execution in an if statement which calls the time checking function to validate entry
// like the function logic, content to be included in the if statement must be indented.
if( startTimeOk() )
    // === STRATEGY - LONG POSITION EXECUTION ===
    enterLong = not tradeDirection[1] and tradeDirection
    exitLong = tradeDirection[1] and not tradeDirection
    strategy.entry( id = "Long", long = true, when = enterLong )
    strategy.close( id = "Long", when = exitLong )
    
    // === STRATEGY - SHORT POSITION EXECUTION ===
    enterShort = tradeDirection[1] and not tradeDirection
    exitShort = not tradeDirection[1] and tradeDirection
    strategy.entry( id = "Short", long = false, when = enterShort )
    strategy.close( id = "Short", when = exitShort )
    
    // === STRATEGY RISK MANAGEMENT EXECUTION ===
    strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
    strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)