Seguimiento de estrategias de mercado bajista


Fecha de creación: 2024-02-26 14:12:09 Última modificación: 2024-02-26 14:12:09
Copiar: 1 Número de Visitas: 955
1
Seguir
1617
Seguidores

Seguimiento de estrategias de mercado bajista

Descripción general

La estrategia de seguimiento del mercado bajista es una estrategia de comercio de divisas diseñada para capturar el patrón de comportamiento típico del EUR/USD en la apertura de los mercados europeos. La estrategia utiliza las características de que el euro está atrapado en el mercado europeo durante la apertura y, por lo tanto, se ve obligado a cerrar las posiciones para establecer posiciones en blanco. En concreto, la estrategia, después de descubrir que la línea K de 1 hora del EUR/USD presenta una curva de retorno de la curva de retorno de la curva de retorno de la curva de retorno (estrella o cubo de tiro), examina las señales de filtración de indicadores como el RSI y, una vez confirmadas las condiciones, decide cerrar el mercado, estableciendo el stop loss por encima del punto de retorno de la curva de retorno, y el objetivo de ganancias basado en la rentabilidad de riesgo aceptable.

Principio de estrategia

La lógica de negociación central para seguir una estrategia de mercado bajista se basa en la siguiente hipótesis: los operadores y los algoritmos que hacen más en euros impulsarán el precio del euro / dólar durante la apertura de Europa / Londres. Pero si los precios no pueden seguir subiendo o si hay signos de caída, estos operadores quedarán atrapados.

La estrategia utiliza esta teoría del mercado bajista para capturar la caída a corto plazo. Concretamente, busca una señal de tiburón de forma inversa en la línea K de 1 hora en la zona horaria europea (por ejemplo, 2am-7am). El criterio para determinar la señal de tiburón de forma inversa es: el precio de cierre parcial de la entidad de tiburón está por debajo del precio de apertura, y el precio de cierre no excede el rango de fluctuación de tiburón general de 0.5 veces (es decir, el precio de cierre está cerca del mínimo de tiburón).

Cuando se produce una trampa de forma inversa, se corre el riesgo de que los que hacen más se encuentren en la cárcel. Para verificar aún más la señal, la estrategia también comprueba las siguientes condiciones de filtrado:

  1. El RSI está por encima de la línea de sobrecompra (default 70);
  2. El precio de cierre de la línea K anterior es más alto que el precio de apertura (señales de cierre de múltiples cabezas);
  3. Cuando el punto más alto de la raíz K alcanza un récord reciente;

Una vez que se cumplen todos los requisitos de filtración, la estrategia se vacía en el cierre de la inversión, el stop loss se establece por encima del punto más alto del alza y el objetivo de ganancias se orienta en función de la tasa de retorno de riesgo aceptable (la tasa de retorno de riesgo predeterminada es de 1 a 1).

Tenga en cuenta que la estrategia solo está activa en la zona horaria europea y si el precio se sale de la zona horaria europea, se restablecerá el estado y se esperará el próximo momento de negociación de la zona horaria europea.

Análisis de las ventajas

Esta es una estrategia simple pero práctica para hacer un “short line”. Las principales ventajas son:

  1. En el caso de los niños, la probabilidad de éxito es más alta si se capta un patrón de comportamiento repetitivo a corto plazo.
  2. La lógica de las estrategias es simple, fácil de entender y de optimizar de forma retroactiva.
  3. El comercio nocturno, evitando el ruido del mercado durante el día;
  4. El riesgo está bien controlado y las estrategias de deterioro son claras.
  5. Se puede conectar directamente a las operaciones automáticas de MT4/5.

En general, la estrategia de seguimiento de los mercados bajistas como una estrategia de arbitraje nocturno de línea corta es una buena opción tanto por su estabilidad como por su utilidad.

Análisis de riesgos

A pesar de las ventajas de esta estrategia, la negociación de cualquier producto financiero conlleva riesgos, entre los que destacan:

  1. El mercado nocturno tiene poca liquidez y no puede detener los pérdidas a tiempo.
  2. Las estrategias son demasiado simples para ser descifradas por los algoritmos.
  3. Las reglas de comportamiento del euro que está atrapado en varios países pueden fallar en ciertas condiciones de mercado;
  4. El objetivo es que los datos históricos sean suficientes para validar la eficacia de la estrategia.
  5. Los datos de la detección pueden ser muy diferentes de los del disco duro.

En relación con estos riesgos, las siguientes son algunas de las respuestas:

  1. Ajustar el valor de los paros para evitar que se pierdan;
  2. La combinación de más indicadores y condiciones de filtrado para una estrategia más robusta;
  3. Optimizar los parámetros estratégicos para adaptarse a un entorno de mercado más amplio;
  4. El uso de ciclos de retroalimentación más largos;
  5. Se han realizado varias pruebas de laboratorio para garantizar la fiabilidad de los resultados.

Dirección de optimización

Teniendo en cuenta la simplicidad de la estrategia y los riesgos potenciales, las siguientes son las direcciones de optimización que se pueden considerar en el futuro:

  1. Verificación de múltiples marcos de tiempo- Se puede volver a verificar la señal de reversión en un marco de tiempo de 5 minutos o 15 minutos, aumentando la estabilidad;
  2. El filtro de aprendizaje automático- Introducir algoritmos de aprendizaje automático para identificar más patrones y filtrar las señales falsas;
  3. Dinámica de pérdidas- Ajuste de los puntos de parada en tiempo real, de acuerdo con la volatilidad del mercado, para evitar pérdidas de parada;
  4. Optimización de la gestión de fondos estables- Optimizar las estrategias de gestión de fondos para que los ingresos sean más estables mediante el ajuste de posiciones.

Resumir

La estrategia de seguimiento de un mercado bajista es una estrategia de corto plazo simple, con riesgo de negociación controlado. Capta los ajustes a corto plazo que se producen con el fenómeno de arbitraje de múltiples cabezas en el euro para obtener ganancias estables. La estrategia es fácil de entender y optimizar y es una opción ideal para el arbitraje nocturno.

Código Fuente de la Estrategia
/*backtest
start: 2024-02-18 00:00:00
end: 2024-02-25 00:00:00
period: 3h
basePeriod: 15m
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/
// © ZenAndTheArtOfTrading / PineScriptMastery
// FTB Strategy (PineConnector Version)
// Last Updated: 21st July, 2021
// @version=4
strategy("[2021] FTB Strategy", shorttitle="FTB", overlay=true)

// Risk Settings
var g_risk      = "Risk Settings"
pips            = input(title="Stop Pips", type=input.float, defval=2.0, group=g_risk, tooltip="How many pips above high to put stop loss")
rr              = input(title="Risk:Reward", type=input.float, defval=1.0, group=g_risk, tooltip="This determines the risk:reward profile of the setup")
// Filters
var g_filter    = "Filter Settings"
timezone        = input(title="Timezone", type=input.session, defval="0200-0700", group=g_filter, tooltip="Which timezone to search for FTB signals in")
days            = input(title="Days To Trade", defval="13457", group=g_filter, tooltip="Which days to trade this strategy on (Monday & Friday disabled by default)")
useRsiFilter    = input(title="RSI OB/OS?", type=input.bool, defval=true, group=g_filter, tooltip="If true then the RSI must be considered overbought before a signal is valid")
useCloseFilter  = input(title="Previous Bar Must Be Bullish?", type=input.bool, defval=false, group=g_filter, tooltip="If true then the previous bar must have closed bullish")
useHighFilter   = input(title="High Filter", type=input.bool, defval=false, group=g_filter, tooltip="If true then the signal bar must be the highest bar over X bars")
highLookback    = input(title="High Lookback", type=input.integer, defval=10, group=g_filter, tooltip="This is for setting the High Filter lookback distance")
fib             = input(title="Candle Close %", defval=0.5, group=g_filter, tooltip="For identifying shooting star candles (0.5 = must close <= 50% mark of candle size)")
rsiLen          = input(title="RSI Length", type=input.integer, defval=3, group=g_filter, tooltip="RSI length")
rsiOB           = input(title="RSI OB", type=input.float, defval=70.0, group=g_filter, tooltip="RSI overbought threshold")
// PineConnector Settings
var g_pc        = "PineConnector Settings"
pc_id           = input(title="License ID", defval="YOUR_ID", type=input.string, group=g_pc, tooltip="This is your PineConnector license ID")
pc_risk         = input(title="Risk Per Trade", defval=1, step=0.5, type=input.float, group=g_pc, tooltip="This is how much to risk per trade (% of balance or lots)")
pc_prefix       = input(title="MetaTrader Prefix", defval="", type=input.string, group=g_pc, tooltip="This is your broker's MetaTrader symbol prefix")
pc_suffix       = input(title="MetaTrader Suffix", defval="", type=input.string, group=g_pc, tooltip="This is your broker's MetaTrader symbol suffix")
pc_spread       = input(title="Spread", defval=0.5, type=input.float, group=g_pc, tooltip="Enter your average spread for this pair (used for offsetting limit order)")
pc_limit        = input(title="Use Limit Order?", defval=true, type=input.bool, group=g_pc, tooltip="If true a limit order will be used, if false a market order will be used")

// Generate PineConnector alert string
var symbol = pc_prefix + syminfo.ticker + pc_suffix
var limit = pc_limit ? "limit" : ""
pc_entry_alert(direction, sl, tp) =>
    price = pc_limit ? "price=" + tostring(pc_spread) + "," : ""
    pc_id + "," + direction + limit + "," + symbol + "," + price + "sl=" + tostring(sl) + ",tp=" + tostring(tp) + ",risk=" + tostring(pc_risk)

// Get RSI filter
rsiValue = rsi(close, rsiLen)
rsiFilter = not useRsiFilter or rsiValue >= rsiOB

// Check high & close filter
highFilter = not useHighFilter or high == highest(high, highLookback)
closeFilter = not useCloseFilter or close[1] > open[1]

// InSession() determines if a price bar falls inside the specified session
inSession(sess) => na(time(timeframe.period, sess + ":" + days)) == false

// Calculate 50% mark of candle size
bearFib = (high - low) * fib + low

// Check filters
filters = inSession(timezone) and closeFilter and high > high[1] and rsiFilter and highFilter and open != close

// Detect valid shooting star pinbar pattern
var takenTradeAlready = false
star = true

// Calculate stops & targets
shortStopPrice = high + (syminfo.mintick * pips * 10)
shortStopDistance = shortStopPrice - close
shortTargetPrice = close - (shortStopDistance * rr)

// Save stops & targets for the current trade
var tradeStopPrice = 0.0
var tradeTargetPrice = 0.0

// If we detect a valid shooting star, save our stops & targets, enter short and generate alert
if star and barstate.isconfirmed
    tradeStopPrice := shortStopPrice
    tradeTargetPrice := shortTargetPrice
    takenTradeAlready := true
    alertString = pc_entry_alert("sell", tradeStopPrice, tradeTargetPrice)
    alert(alertString, alert.freq_once_per_bar_close)
    strategy.entry(id="Short", long=strategy.short, when=strategy.position_size == 0, comment=alertString)

// If we have exited the FTB session then reset our takenTradeAlready flag for the next session
if not inSession(timezone) and inSession(timezone)[1]
    takenTradeAlready := false
    
// If price has exceeded target then cancel limit order if it's still active
if pc_limit and low <= tradeTargetPrice and strategy.position_size == 0
    alert(pc_id + ",cancelshort," + symbol)
    tradeTargetPrice := na

// Draw stops & targets
plot(star ? tradeStopPrice : na, color=color.red, style=plot.style_linebr, title="SL")
plot(star ? shortTargetPrice : na, color=color.green, style=plot.style_linebr, title="TP")
// Draw short signals
plotshape(star ? 1 : na, style=shape.triangledown, color=color.red)
// Change background color to highlight detection zone
bgcolor(color=inSession(timezone) ? color.new(color.red,80) : na, title="Session")

// Exit trade whenever our stop or target is hit
strategy.exit(id="Short Exit", from_entry="Short", limit=tradeTargetPrice, stop=tradeStopPrice, when=strategy.position_size != 0)