Estrategia de cruce de medias móviles: cruz dorada y cruz de la muerte


Fecha de creación: 2023-12-05 11:11:02 Última modificación: 2023-12-05 11:11:02
Copiar: 0 Número de Visitas: 713
1
Seguir
1619
Seguidores

Estrategia de cruce de medias móviles: cruz dorada y cruz de la muerte

Esta es una muy clásica estrategia de movimiento de la media de la línea de la horquilla. La estrategia utiliza las medias móviles de dos períodos diferentes, TENKAN y KIJUN, para formar señales de la horquilla y la horquilla, para operaciones largas y cortas.

Principio de estrategia

La estrategia se basa principalmente en un método de análisis técnico de acciones japonesas llamado “tabla de equilibrio de primera vista”, que utiliza múltiples promedios móviles como la línea TENKAN y la línea KIJUN para determinar la dirección de la tendencia del mercado.

En primer lugar, la línea TENKAN es la línea de 9 días, que representa la tendencia a corto plazo; la línea KIJUN es la línea de 26 días, que representa la tendencia a mediano plazo. Cuando el corto plazo atraviesa el mediano, genera una señal de compra; cuando el corto plazo atraviesa el mediano, genera una señal de venta.

Luego, la estrategia también introduce las líneas de aire y la nube de luz. La línea de aire es el promedio de las medias móviles a corto y medio plazo, y la línea de nube de luz B es la media móvil de 52 días.

Finalmente, para filtrar las falsas señales, la estrategia también detecta si el precio está relacionado con la línea OTO (la línea de retardo de los precios de los días 26) y sólo genera una señal de compra cuando el precio está por debajo de la línea OTO; y sólo genera una señal de venta cuando el precio está por encima de la línea OTO.

Ventajas estratégicas

Esta es una estrategia de media móvil muy típica, con ventajas en tres aspectos:

  1. El uso de dos líneas medias de diferentes períodos permite determinar la dirección de la tendencia en dos dimensiones de tiempo a corto y medio plazo.

  2. Utilice la línea de luz para determinar las tendencias a largo plazo y evitar que los mercados bajistas a largo plazo sigan ganando.

  3. La detección de la relación entre el precio y el retardo puede filtrar muchas señales falsas y reducir las transacciones innecesarias.

Por lo tanto, la estrategia aprovecha las múltiples funciones de la línea media para aprovechar oportunamente las oportunidades de tendencias en tres dimensiones temporales cortas, medianas y largas.

Riesgo estratégico

Los principales riesgos de esta estrategia son:

  1. Las estrategias de línea media son propensas a generar una gran cantidad de señales falsas. Si no se pueden establecer los parámetros correctamente, se puede ser encerrado por el comercio frecuente.

  2. La estrategia se centra en la parte técnica, sin tener en cuenta los factores fundamentales. Las señales técnicas también pueden fallar si se producen cambios significativos en el rendimiento de la empresa o en la política de mercado.

  3. La estrategia solo toma en cuenta las decisiones de compra y venta, sin establecer un mecanismo de suspensión de pérdidas. Si se hace un error de juicio, las pérdidas pueden aumentar.

Por lo tanto, necesitamos buscar un sistema más avanzado, o establecer un stop loss razonable, o agregar señales básicas para mejorar aún más la estrategia y reducir el riesgo.

Dirección de optimización de la estrategia

La estrategia también puede ser optimizada en los siguientes aspectos:

  1. Buscar combinaciones de parámetros más estables y eficientes. Podemos encontrar valores de parámetros que hacen que la estrategia tenga un mejor rendimiento mediante más retroalimentación de datos.

  2. Aumentar el mecanismo de stop loss. Un stop loss razonable es el máximo de pérdidas que una estrategia puede controlar de manera efectiva.

  3. Añadir señales básicas. Por ejemplo, los datos de la revisión de las expectativas de desempeño pueden determinar el futuro de la empresa y, por lo tanto, mejorar la eficacia de la estrategia.

  4. Optimizar la estrategia de la línea OTO. La implementación existente es sencilla, y podemos buscar una forma más estable y precisa de juzgar la relación entre el precio y el precio histórico.

  5. En combinación con las señales de selección de acciones, se pueden filtrar algunos indicadores de menor calidad mediante la adición de calificaciones de factores como PE, ROE, etc.

Resumir

Esta es una estrategia de media móvil muy típica y práctica. Se trata de una estrategia de medias móviles que se centra en las tendencias en tres dimensiones temporales, corta, media y larga, y utiliza las diferentes funciones de la línea de medias para diseñar señales de negociación.

Código Fuente de la Estrategia
/*backtest
start: 2022-11-28 00:00:00
end: 2023-12-04 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/
// © mdeous

//@version=4
strategy(
     title="Ichimoku Kinko Hyo Strategy", 
     shorttitle="Ichimoku Strategy", 
     overlay=true,
     pyramiding=0,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=100,
     initial_capital=1000,
     currency="USD",
     commission_type=strategy.commission.percent,
     commission_value=0.0
     )

//
// SETTINGS
//

// Ichimoku

int TENKAN_LEN = input(title="Tenkan-Sen Length", defval=9, minval=1, step=1)
int KIJUN_LEN = input(title="Kijun-Sen Length", defval=26, minval=1, step=1)
int SSB_LEN = input(title="Senkou Span B Length", defval=52, minval=1, step=1)
int OFFSET = input(title="Offset For Chikou Span / Kumo", defval=26, minval=1, step=1)

// Strategy

int COOLDOWN = input(title="Orders Cooldown Period", defval=5, minval=0, step=1)
bool USE_CHIKOU = input(title="Use Imperfect Chikou Position Detection", defval=false)

//
// HELPERS
//

color _red = color.red
color _blue = color.blue
color _lime = color.lime
color _fuchsia = color.fuchsia
color _silver = color.silver
color _aqua = color.aqua

f_donchian(_len) => avg(lowest(_len), highest(_len))

//
// ICHIMOKU INDICATOR
//

float tenkan = f_donchian(TENKAN_LEN)
float kijun = f_donchian(KIJUN_LEN)
float ssa = avg(tenkan, kijun)
float ssb = f_donchian(SSB_LEN)

plot(tenkan, title="Tenkan", color=_silver)
plot(close, title="Chikou", offset=-OFFSET+1, color=_aqua)
_ssa = plot(ssa, title="SSA", offset=OFFSET-1, color=_lime)
_ssb = plot(ssb, title="SSB", offset=OFFSET-1, color=_red)
fill(_ssa, _ssb, color=ssa > ssb ? _lime : _fuchsia, transp=90)

//
// STRATEGY
//

// Check if price is "above or below" Chikou (i.e. historic price line):
// This detection is highly imperfect, as it can only know what Chikou position
// was 2*offset candles in the past, therefore if Chikou crossed the price
// line in the last 2*offset periods it won't be detected.
// Use of this detection is disabled by default,

float _chikou_val = close[OFFSET*2+1]
float _last_val = close[OFFSET+1]
bool above_chikou = USE_CHIKOU ? _last_val > _chikou_val : true
bool below_chikou = USE_CHIKOU ? _last_val < _chikou_val : true

// Identify short-term trend with Tenkan

bool _above_tenkan = min(open, close) > tenkan
bool _below_tenkan = max(open, close) < tenkan

// Check price position compared to Kumo

bool _above_kumo = min(open, close) > ssa
bool _below_kumo = max(open, close) < ssb

// Check if Kumo is bullish or bearish

bool bullish_kumo = ssa > ssb
bool bearish_kumo = ssa < ssb

// Correlate indicators to confirm the trend

bool bullish_trend = _above_tenkan and _above_kumo and bullish_kumo
bool bearish_trend = _below_tenkan and _below_kumo and bearish_kumo

// Build signals

bool buy1 = (close > open) and ((close > ssa) and (open < ssa)) // green candle crossing over SSA
bool buy2 = bullish_kumo and bearish_kumo[1] // bullish Kumo twist

bool sell1 = (close < open) and ((close < ssb) and (open > ssb)) // red candle crossing under SSB
bool sell2 = bearish_kumo and bullish_kumo[1] // bearish Kumo twist

bool go_long = below_chikou and (bullish_trend and (buy1 or buy2))
bool exit_long = above_chikou and (bearish_trend and (sell1 or sell2))

//
// COOLDOWN
//

f_cooldown() =>
    _cd_needed = false
    for i = 1 to COOLDOWN by 1
        if go_long[i]
            _cd_needed := true
            break
    _cd_needed

go_long := f_cooldown() ? false : go_long

//
// ORDERS
//

strategy.entry("buy", strategy.long, when=go_long)
strategy.close_all(when=exit_long)

//
// ALERTS
//

alertcondition(
     condition=go_long,
     title="Buy Signal",
     message="{{exchange}}:{{ticker}}: A buy signal for {{strategy.market_position_size}} units has been detected (last close: {{close}})."
     )
alertcondition(
     condition=exit_long,
     title="Sell Signal",
     message="{{exchange}}:{{ticker}}: A sell signal for {{strategy.market_position_size}} units has been detected (last close: {{close}})."
     )