Seguimiento de tendencias a corto plazo y estrategia de supresión de shocks


Fecha de creación: 2023-12-12 15:52:37 Última modificación: 2023-12-12 15:52:37
Copiar: 1 Número de Visitas: 657
1
Seguir
1621
Seguidores

Seguimiento de tendencias a corto plazo y estrategia de supresión de shocks

Descripción general

Esta estrategia combina las ventajas de los tres indicadores EMA, TTS y STC, para formar una estrategia de seguimiento de tendencias más fuerte. En concreto, la estrategia determina simultáneamente si las señales de los tres indicadores son consistentes, y si son consistentes, produce una señal de negociación; si no son consistentes, no se realizan compras.

Principio de estrategia

La estrategia se compone principalmente de tres partes: el indicador de suavización EMA, la estrategia de seguimiento de tendencias TTS y el indicador de ciclo de tendencias STC Shufter.

En primer lugar, se calcula el promedio móvil del índice EMA de 200 ciclos para determinar si el precio está por debajo o por encima de la línea EMA. Si el precio está por debajo de la línea, el indicador EMA da una señal de cabeza vacía; -1; Si el precio está por encima de la línea, el indicador EMA da una señal de cabeza múltiple: 1 .

En segundo lugar, se calculan los parámetros relevantes de la estrategia de seguimiento de la tendencia TTS, para determinar la dirección de la tendencia de los precios en función de la ruptura de la trayectoria ascendente y descendente. Si el precio rompe la trayectoria ascendente, se produce una señal de múltiples cabezas; si el precio rompe la trayectoria descendente, se produce una señal de cabeza vacía -1.

Finalmente, se calcula el índice STC del ciclo de tendencia de Shuffle, que refleja la tendencia de cambio del centro de precios. Si el índice STC sube, produce una señal de cabeza múltiple; si el índice STC baja, produce una señal de cabeza hueca -1.

Después de recibir las señales de juicio de los tres indicadores, la estrategia juzgará si coinciden. Sólo cuando las tres señales de juicio de los indicadores coincidan, se producirá una señal de negociación real. Esto puede filtrar eficazmente algunas señales falsas y hacer que la estrategia sea más confiable.

Si se determina que se produce una señal de negociación, se realiza una comisión de hacer más o hacer menos y se establece un punto de parada de pérdidas.

Ventajas estratégicas

  1. La estrategia utiliza tres tipos diferentes de indicadores para determinar la dirección de las tendencias del mercado.

  2. El uso de los tres indicadores para juzgar la coherencia de las señales de juicio para filtrar las falsas señales puede reducir las transacciones innecesarias y hacer que la estrategia sea más confiable.

  3. Establezca un punto de parada razonable para bloquear las ganancias y evitar la expansión de las pérdidas.

  4. Los parámetros seleccionados han sido optimizados para adaptarse a la mayoría de las variedades de acciones y divisas.

  5. La lógica de las transacciones es clara y concisa, fácil de entender y modificar.

Riesgo estratégico

  1. Cuando los tres indicadores de juicio no coinciden, aparecen los dimers y es fácil perder oportunidades de negociación. Se puede considerar optimizar las reglas de juicio.

  2. Los indicadores STC son más sensibles a los parámetros, y las diferentes variedades necesitan ajustar los parámetros.

  3. En una situación de recesión, el stop loss puede ser superado, causando grandes pérdidas. Se puede considerar optimizar el stop loss en tiempo real.

  4. La falta de un criterio efectivo para evaluar la situación de la ordenanza horizontal, y la posibilidad de que la entrada a la zona de ordenanza pueda dar lugar a una cárcel.

Optimización de la estrategia

  1. Se puede probar una combinación de más indicadores para buscar reglas de juicio más fuertes. Por ejemplo, se puede agregar el indicador RSI.

  2. Optimización de los parámetros indicadores de los indicadores STC para que sean más adecuados para diferentes variedades. Añadido el módulo de optimización de parámetros de adaptación.

  3. Se ha añadido un módulo de Stop Loss Adaptive que permite optimizar el punto de stop en tiempo real en función de la situación.

  4. Mejorar el módulo de liquidación para determinar si se ha ingresado a la clasificación horizontal y evitar el encierro.

  5. Optimización de algoritmos para transacciones de alta frecuencia, reducción de la latencia del sistema y mejora de la tasa de éxito de las comisiones.

Resumir

La estrategia utiliza EMA, TTS y STC, tres indicadores para determinar la dirección de la tendencia, y la regla de juicio se establece para generar una señal de negociación cuando los tres coinciden, de modo que se pueda filtrar eficazmente las señales falsas. El espacio para la optimización de la estrategia es amplio, mediante la prueba de más combinaciones de indicadores, la adición de algoritmos de adaptación y la optimización de módulos de negociación de alta frecuencia, entre otros, para fortalecer aún más el rendimiento de la estrategia en el proceso de seguimiento de la tendencia. En comparación con las estrategias tradicionales, como el simple seguimiento de la línea media, la estrategia puede juzgar el mercado de manera más inteligente y evitar ser capturado mientras se capta la tendencia.

Código Fuente de la Estrategia
/*backtest
start: 2022-12-05 00:00:00
end: 2023-04-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ajahanbin1374

//@version=5
strategy(title = "EMA + TTS + STC", shorttitle = "EMA + TTS + STC", overlay = true, calc_on_order_fills=false, calc_on_every_tick = false, initial_capital = 100, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.01)

////////////////////////////////////////////////////////////
// Strategy entry
////////////////////////////////////////////////////////////
profit = input.float(defval = 0.1, minval = 0.0, title="Profit %", step=0.01, group = "Strategy") * 0.01

////////////////////////////////////////////////////////////
// Emponential Moving Average
////////////////////////////////////////////////////////////
ema = ta.ema(close, 200)
posEma = close < ema ? -1 : 1

////////////////////////////////////////////////////////////
// Trend Trader Strategy
////////////////////////////////////////////////////////////
Length = input.int(21, minval=1, group="Trend Trader Strategy")
Multiplier = input.float(3, minval=0.000001, group="Trend Trader Strategy")
avgTR = ta.wma(ta.atr(1), Length)
highestC = ta.highest(Length)
lowestC = ta.lowest(Length)
hiLimit = highestC[1] - avgTR[1] * Multiplier
loLimit = lowestC[1] + avgTR[1] * Multiplier
ret = 0.0
posTts = 0.0
ret:= close > hiLimit and close > loLimit ? hiLimit :
         close < loLimit and close < hiLimit ? loLimit : nz(ret[1], close)
posTts:=  close > ret ? 1 :close < ret ? -1 : nz(posTts[1], 0)


////////////////////////////////////////////////////////////
// Schaff Trend Cycle (STC)
////////////////////////////////////////////////////////////
EEEEEE = input.int(12, 'Length', group ="Schaff Trend Cycle")
BBBB = input.int(26, 'FastLength', group ="Schaff Trend Cycle")
BBBBB = input.int(50, 'SlowLength', group ="Schaff Trend Cycle")

AAAA(BBB, BBBB, BBBBB) =>
    fastMA = ta.ema(BBB, BBBB)
    slowMA = ta.ema(BBB, BBBBB)
    AAAA = fastMA - slowMA
    AAAA

AAAAA(EEEEEE, BBBB, BBBBB) =>
    AAA = input.float(0.5, group ="Schaff Trend Cycle")
    var CCCCC = 0.0
    var DDD = 0.0
    var DDDDDD = 0.0
    var EEEEE = 0.0
    BBBBBB = AAAA(close, BBBB, BBBBB)
    CCC = ta.lowest(BBBBBB, EEEEEE)
    CCCC = ta.highest(BBBBBB, EEEEEE) - CCC
    CCCCC := CCCC > 0 ? (BBBBBB - CCC) / CCCC * 100 : nz(CCCCC[1])
    DDD := na(DDD[1]) ? CCCCC : DDD[1] + AAA * (CCCCC - DDD[1])
    DDDD = ta.lowest(DDD, EEEEEE)
    DDDDD = ta.highest(DDD, EEEEEE) - DDDD
    DDDDDD := DDDDD > 0 ? (DDD - DDDD) / DDDDD * 100 : nz(DDDDDD[1])
    EEEEE := na(EEEEE[1]) ? DDDDDD : EEEEE[1] + AAA * (DDDDDD - EEEEE[1])
    EEEEE

mAAAAA = AAAAA(EEEEEE, BBBB, BBBBB)
mColor = mAAAAA > mAAAAA[1] ? color.new(color.green, 20) : color.new(color.red, 20)
posStc = mAAAAA > mAAAAA[1] ? 1 : -1

////////////////////////////////////////////////////////////
// Strategy entry
////////////////////////////////////////////////////////////
pos = posEma == 1 and posTts == 1 and posStc == 1 ? 1 : posEma == -1 and posTts == -1 and posStc == -1 ? -1 : 0

currentPostition = strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0
noOpenPosition = strategy.position_size == 0

signal = pos != pos[1] and pos == 1 and noOpenPosition ? 1 : pos != pos[1] and pos == -1 and noOpenPosition ? -1 : 0

stopPriceForLong = math.min(close * (1 - profit), low[1] * 0.9998, low[2] * 0.9998)
limitPriceForLong = close + (close - stopPriceForLong)
stopPriceForShort = math.max(close * (1 + profit), high[1] * 1.0002, high[2] * 1.0002)
limitPriceForShort = close - (stopPriceForShort - close)

if signal == 1
    strategy.entry(id="L", direction=strategy.long)
    strategy.exit(id='EL', from_entry='L', limit=limitPriceForLong, stop=stopPriceForLong)
if signal == -1
    strategy.entry(id="S", direction=strategy.short)
    strategy.exit(id='ES', from_entry='S', limit=limitPriceForShort, stop=stopPriceForShort)

////////////////////////////////////////////////////////////
// Plots - Debuger
////////////////////////////////////////////////////////////
plotchar(signal, title='singal', char = '')
plotchar(posEma, title='posEma', char = '')
plotchar(posTts, title='posTts', char = '')
plotchar(pos, title='pos', char = '')
plotchar(currentPostition, title = 'currentPostition', char='')
plotchar(stopPriceForLong, title = "stopPriceForLong", char ='')
plotchar(limitPriceForLong, title = 'limitPriceForLong', char='')
plotchar(stopPriceForShort, title = "stopPriceForShort", char ='')
plotchar(limitPriceForShort, title = 'limitPriceForShort', char='')

////////////////////////////////////////////////////////////
// Plots
////////////////////////////////////////////////////////////
plot(ret, color=color.new(color.black, 0), title='Trend Trader Strategy')
plotchar(mAAAAA, color=mColor, title='STC', location = location.bottom, char='-', size=size.normal)
plot(series = ema, title = "ema")