Estrategia de movimiento de volumen a lo largo de períodos de tiempo


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

Estrategia de movimiento de volumen a lo largo de períodos de tiempo

Descripción general

La estrategia genera señales de negociación basadas en rupturas de movimiento, y la idea principal es observar los movimientos de los precios en un período de tiempo determinado para juzgar los cambios de tendencia de los precios con rupturas de movimiento.

Principio de estrategia

La estrategia determina el movimiento de los precios calculando los máximos y mínimos de los precios en un período de tiempo determinado, es decir, el alto y el bajo de pivote.

Concretamente, la estrategia calcula el precio más alto de la línea N-K anterior como un alto de pivote y el precio más bajo de la línea M-K anterior como un bajo de pivote. Cuando el punto más alto de la línea K actual supera el alto de pivote, se produce una señal de aumento; cuando el punto más bajo de la línea K actual cae por debajo del bajo de pivote, se produce una señal de descenso.

Después de hacer un sobre y un descubierto, la estrategia utiliza ATR para establecer un stop loss y un stop loss por etapas durante el día. Al mismo tiempo, la estrategia también elimina todas las posiciones en un período de tiempo específico (por ejemplo, 14:55).

La estrategia utiliza de manera simple y efectiva las rupturas de precios en un rango de tiempo específico para capturar tendencias, lo que es ideal para el comercio de líneas cortas en el día. La idea de cálculo es clara y fácil de implementar.

Ventajas estratégicas

  • La brecha en el movimiento de los precios capta el cambio de tendencia, la señal es más confiable
  • Solo se requieren datos básicos de la línea K para que sea simple.
  • Detener el riesgo razonablemente, detener el riesgo de manera gradual y controlar el riesgo de manera efectiva
  • Apto para trayectos cortos durante el día y para evitar riesgos de pernoctación
  • Menos parámetros y fácil optimización

Riesgos estratégicos y soluciones

  • Hay un cierto retraso y se puede perder la oportunidad de comenzar la tendencia

Se puede ajustar el intervalo de tiempo adecuado, o combinar otros indicadores para determinar el momento de entrada

  • Hay más señales falsas cuando las tendencias no son claras.

Se pueden ajustar los parámetros o añadir condiciones de filtrado, como indicadores de tendencia, volumen de transacciones, etc.

  • Las transacciones de línea corta diarias requieren un mayor costo de capital.

Se puede ajustar el tamaño de la posición o prolongar la duración de la misma de manera adecuada.

  • El resultado puede variar dependiendo de la optimización de los parámetros y de la situación del mercado.

Se deben ajustar los parámetros en función de las diferentes condiciones del mercado, o se debe optimizar automáticamente mediante métodos como el aprendizaje automático

Dirección de optimización de la estrategia

  • Prueba con otros datos de precios, como precios típicos, medias, etc.

  • Condiciones de filtración como aumento de volumen o fluctuación

  • Intentar una combinación diferente de parámetros

  • Indicadores de tendencia para determinar la dirección de la tendencia

  • Optimización automática de parámetros con métodos de aprendizaje automático

  • El proyecto se extiende a varios períodos de tiempo, cambiando el tiempo de entrada al campo.

Resumir

La idea general de la estrategia es clara y concisa, capta las tendencias a corto plazo mediante el uso efectivo de las rupturas móviles en los precios, y logra un mayor factor de ganancia. La estrategia tiene pocos parámetros, es fácil de probar y optimizar, y es adecuada para operaciones de línea corta durante el día. Aunque hay un cierto grado de retraso y problemas de falsas señales, se puede mejorar mediante ajustes de parámetros, adición de condiciones de filtración, etc.

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

//   ____________        _________           _____________
//  |____________|      ||________|          ||__________|
//       ||             ||        ||         ||
//       ||             ||________||         ||
//       ||     H E     ||________   U L L   ||       H A R T I S T
//       ||             ||        ||         ||
//       ||             ||________||         ||__________
//       ||             ||________|          ||__________|
  
//@version=5
// strategy("PIVOT STRATEGY [5MIN TF]",overlay=true ,commission_type = strategy.cash, commission_value = 30 , slippage = 2, default_qty_value = 60, currency = currency.NONE, pyramiding = 0)
leftbars = input(defval = 10)
rightbars = input(defval = 15)

// ═══════════════════════════ //
// ——————————> INPUTS <——————— //
// ═══════════════════════════ //

EMA1 = input.int(title='PRICE CROSS EMA', defval = 150, minval = 10 ,maxval = 400)
factor1 = input.float(title='_ATR LONG',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL LONG")
factor2 = input.float(title='_ATR SHORT',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL SHORT")
risk = input.float(title='RISK',defval = 200 , minval = 1 , maxval = 5000 , step = 50, tooltip = "RISK PER TRADE")

var initialCapital = strategy.equity
t = time(timeframe.period, '0935-1400:1234567')
time_cond = true

// ══════════════════════════════════ //
// ———————————> EMA DATA <——————————— //
// ══════════════════════════════════ //
ema1 = ta.ema(close, EMA1)

plot(ema1, color=color.new(color.yellow, 0), style=plot.style_linebr, title='ema1')

// ══════════════════════════════════ //
// ————————> TRAIL DATA <———————————— //
// ══════════════════════════════════ //
// *******Calculate LONG TRAIL data*****
ATR_LO = ta.atr(14)*factor1

// *******Calculate SHORT TRAIL data*****
ATR_SH = ta.atr(14)*factor2

longStop = close - ATR_LO
shortStop = close + ATR_SH

// Plot atr data
//plot(longStop, color=color.new(color.green, 0), style=plot.style_linebr, title='Long Trailing Stop')
//plot(shortStop , color=color.new(color.red, 0), style=plot.style_linebr, title='Short Trailing Stop')

// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //
// ————————————————————————————————————————————————————————> PIVOT DATA <———————————————————————————————————————————————————————————————————————————————————————————————————— //
// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //

ph = ta.pivothigh(close,leftbars, rightbars)
pl = ta.pivotlow(close,leftbars, rightbars)

pvt_condition1 = not na(ph)

upper_price = 0.0
upper_price := pvt_condition1 ? ph : upper_price[1]

pvt_condition2 = not na(pl)

lower_price = 0.0
lower_price := pvt_condition2 ? pl : lower_price[1]

// Signals
long  = ta.crossover(high, upper_price + syminfo.mintick)
short = ta.crossunder(low, lower_price - syminfo.mintick)

plot(upper_price, color= close > ema1  ? color.green : na, style=plot.style_line, title='PH')

plot(lower_price,  color= close <  ema1  ? color.red : na, style=plot.style_line, title='PL')


// ══════════════════════════════════//
// ————————> LONG POSITIONS <————————//
// ══════════════════════════════════//
//******barinstate.isconfirmed used to avoid repaint in real time*******

if ( long and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close >= ema1 )
    strategy.entry(id= "Long" ,direction = strategy.long, comment = "B")
    
//plot(longStop , color=color.new(color.blue, 0), style=plot.style_linebr, title='long Stop')

if strategy.position_size > 0 
    strategy.exit("long tsl", "Long" , stop = longStop ,comment='S')
 

// ═════════════════════════════════════//
// ————————> SHORT POSITIONS <————————— //
// ═════════════════════════════════════//
if ( short and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close <= ema1 )
    strategy.entry(id = "Short" ,direction = strategy.short,  comment = "S") 

if strategy.position_size < 0
    strategy.exit("short tsl", "Short" ,  stop = shortStop ,comment='B')

// ════════════════════════════════════════════════//
// ————————> CLOSE ALL POSITIONS BY 3PM <————————— //
// ════════════════════════════════════════════════//
strategy.close_all(when = hour == 14 and minute == 55)

// ════════════════════════════════════════//
// ————————> MAX INTRADAY LOSS  <————————— //
// ════════════════════════════════════════//
// strategy.risk.max_intraday_loss(type = strategy.cash, value = risk)