En la carga de los recursos... Cargando...

Estrategia de posiciones transfronterizas durante la noche con filtro EMA

El autor:¿ Qué pasa?, fecha: 2024-11-12 10:49:00
Las etiquetas:El EMA- ¿Qué es?

img

Esta estrategia es una estrategia de posiciones a un día a través del mercado basada en el indicador técnico de la EMA, diseñada para captar oportunidades de negociación antes del cierre del mercado y después de la apertura del mercado. La estrategia logra una negociación inteligente en diferentes entornos de mercado mediante un control preciso del tiempo y un filtrado de indicadores técnicos.

Resumen de la estrategia

La estrategia obtiene rendimientos principalmente entrando en momentos específicos antes del cierre del mercado y saliendo en momentos específicos después de la apertura del mercado del día siguiente. Combinado con los indicadores EMA para la confirmación de tendencias, busca oportunidades comerciales en múltiples mercados globales (Estados Unidos, Asia, Europa). La estrategia también integra funcionalidad de negociación automatizada para operación sin supervisión.

Principio de la estrategia

  1. Control de tiempo: entrada a horarios fijos antes del cierre y salida a horarios fijos después de la apertura en función de las diferentes horas de negociación del mercado
  2. Filtración de la EMA: utilizar indicadores opcionales de la EMA para validar las señales de entrada
  3. Selección del mercado: Apoyar la adaptación del tiempo de negociación para los mercados de EE.UU., Asia y Europa
  4. Protección de fin de semana: cierre forzado de la posición antes del cierre del viernes para evitar los riesgos de retención de fin de semana

Ventajas estratégicas

  1. Adaptabilidad a múltiples mercados: ajuste flexible de los tiempos de negociación según las diferentes características del mercado
  2. Control integral del riesgo: incluye el mecanismo de protección para el cierre de las posiciones de fin de semana
  3. Alto nivel de automatización: admite la integración de interfaces de negociación automatizadas
  4. Parámetros flexibles: tiempos de negociación y parámetros de indicadores técnicos personalizables
  5. Consideración de los costes de negociación: incluye las comisiones y los ajustes de deslizamiento

Riesgos estratégicos

  1. Riesgo de volatilidad del mercado: las posiciones de un día a otro pueden presentar un riesgo de déficit
  2. Dependencia del tiempo: la eficacia de la estrategia afectada por la selección del período de tiempo del mercado
  3. Limitaciones de los indicadores técnicos: el indicador único de la EMA puede mostrar retraso Sugerencias: Establecer límites de stop-loss, añadir más indicadores técnicos para la validación

Direcciones para la optimización de la estrategia

  1. Añadir más combinaciones de indicadores técnicos
  2. Introducción de un mecanismo de filtrado de volatilidad
  3. Optimización de la selección de la hora de entrada y salida
  4. Añadir función de ajuste de parámetros adaptativos
  5. Mejorar el módulo de control de riesgos

Resumen de las actividades

Esta estrategia logra un sistema de negociación confiable durante la noche a través del control preciso del tiempo y el filtrado de indicadores técnicos. El diseño de la estrategia considera de manera integral los requisitos prácticos, incluida la adaptación a múltiples mercados, el control de riesgos y los elementos de negociación automatizada, lo que demuestra un fuerte valor práctico. A través de la optimización y mejora continuas, esta estrategia tiene el potencial de lograr rendimientos estables en el comercio en vivo.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-11 00:00:00
period: 1d
basePeriod: 1d
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/
// © PresentTrading

// This strategy, titled "Overnight Market Entry Strategy with EMA Filter," is designed for entering long positions shortly before 
// the market closes and exiting shortly after the market opens. The strategy allows for selecting between different global market sessions (US, Asia, Europe) and 
// uses an optional EMA (Exponential Moving Average) filter to validate entry signals. The core logic is to enter trades based on conditions set for a specified period before 
// the market close and to exit trades either after a specified period following the market open or just before the weekend close. 
// Additionally, 3commas bot integration is included to automate the execution of trades. The strategy dynamically adjusts to market open and close times, ensuring trades are properly timed based on the selected market. 
// It also includes a force-close mechanism on Fridays to prevent holding positions over the weekend.

//@version=5
strategy("Overnight Positioning with EMA Confirmation - Strategy [presentTrading]", overlay=true, precision=3, commission_value=0.02, commission_type=strategy.commission.percent, slippage=1, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=10, initial_capital=10000)

// Input parameters
entryMinutesBeforeClose = input.int(20, title="Minutes Before Close to Enter", minval=1)
exitMinutesAfterOpen = input.int(20, title="Minutes After Open to Exit", minval=1)
emaLength = input.int(100, title="EMA Length", minval=1)
emaTimeframe = input.timeframe("240", title="EMA Timeframe")
useEMA = input.bool(true, title="Use EMA Filter")

// Market Selection Input
marketSelection = input.string("US", title="Select Market", options=["US", "Asia", "Europe"])

// Timezone for each market
marketTimezone = marketSelection == "US" ? "America/New_York" :
                 marketSelection == "Asia" ? "Asia/Tokyo" :
                 "Europe/London"  // Default to London for Europe

// Market Open and Close Times for each market
var int marketOpenHour = na
var int marketOpenMinute = na
var int marketCloseHour = na
var int marketCloseMinute = na

if marketSelection == "US"
    marketOpenHour := 9
    marketOpenMinute := 30
    marketCloseHour := 16
    marketCloseMinute := 0
else if marketSelection == "Asia"
    marketOpenHour := 9
    marketOpenMinute := 0
    marketCloseHour := 15
    marketCloseMinute := 0
else if marketSelection == "Europe"
    marketOpenHour := 8
    marketOpenMinute := 0
    marketCloseHour := 16
    marketCloseMinute := 30

// 3commas Bot Settings
emailToken = input.string('', title='Email Token', group='3commas Bot Settings')
long_bot_id = input.string('', title='Long Bot ID', group='3commas Bot Settings')
usePairAdjust = input.bool(false, title='Use this pair in PERP', group='3commas Bot Settings')
selectedExchange = input.string("Binance", title="Select Exchange", group='3commas Bot Settings', options=["Binance", "OKX", "Gate.io", "Bitget"])

// Determine the trading pair based on settings
var pairString = ""
if usePairAdjust
    pairString := str.tostring(syminfo.currency) + "_" + str.tostring(syminfo.basecurrency) + (selectedExchange == "OKX" ? "-SWAP" : "") 
else
    pairString := str.tostring(syminfo.currency) + "_" + str.tostring(syminfo.basecurrency)

// Function to check if it's a trading day (excluding weekends)
isTradingDay(t) =>
    dayOfWeek = dayofweek(t, marketTimezone)
    dayOfWeek >= dayofweek.monday and dayOfWeek <= dayofweek.friday

// Function to get the timestamp for market open and close times
getMarketTimes(t) =>
    y = year(t, marketTimezone)
    m = month(t, marketTimezone)
    d = dayofmonth(t, marketTimezone)
    marketOpenTime = timestamp(marketTimezone, y, m, d, marketOpenHour, marketOpenMinute, 0)
    marketCloseTime = timestamp(marketTimezone, y, m, d, marketCloseHour, marketCloseMinute, 0)
    [marketOpenTime, marketCloseTime]

// Get the current time in the market's timezone
currentTime = time

// Calculate market times
[marketOpenTime, marketCloseTime] = getMarketTimes(currentTime)

// Calculate entry and exit times
entryTime = marketCloseTime - entryMinutesBeforeClose * 60 * 1000
exitTime = marketOpenTime + exitMinutesAfterOpen * 60 * 1000

// Get EMA data from the specified timeframe
emaValue = request.security(syminfo.tickerid, emaTimeframe, ta.ema(close, emaLength))

// Entry condition with optional EMA filter
longCondition = close > emaValue or not useEMA

// Functions to create JSON strings
getEnterJson() =>
    '{"message_type": "bot", "bot_id": "' + long_bot_id + '", "email_token": "' + emailToken + '", "delay_seconds": 0, "pair": "' + pairString + '"}'

getExitJson() =>
    '{"action": "close_at_market_price", "message_type": "bot", "bot_id": "' + long_bot_id + '", "email_token": "' + emailToken + '", "delay_seconds": 0, "pair": "' + pairString + '"}'

// Entry Signal
entrySignal = isTradingDay(currentTime) and currentTime >= entryTime and currentTime < marketCloseTime and dayofweek(currentTime, marketTimezone) != dayofweek.friday

// Exit Signal
exitSignal = isTradingDay(currentTime) and currentTime >= exitTime and currentTime < marketCloseTime

// Entry Logic
if strategy.position_size == 0 and longCondition
    strategy.entry("Long", strategy.long, alert_message=getEnterJson())

// Exit Logic
if  strategy.position_size > 0
    strategy.close("Long", alert_message=getExitJson())

// Force Close Logic on Friday before market close
isFriday = dayofweek(currentTime, marketTimezone) == dayofweek.friday
if  strategy.position_size > 0  // Close 5 minutes before market close on Friday
    strategy.close("Long", comment="Force close on Friday before market close", alert_message=getExitJson())

// Plotting entry and exit points
plotshape( strategy.position_size == 0 and longCondition, title="Entry", text="Entry", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape( strategy.position_size > 0, title="Exit", text="Exit", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)

// Plot EMA for reference
plot(useEMA ? emaValue : na, title="EMA", color=color.blue)


Relacionados

Más.