Estrategia de trading a corto plazo con ruptura de la línea K inversa


Fecha de creación: 2023-11-21 17:03:32 Última modificación: 2023-11-21 17:03:32
Copiar: 0 Número de Visitas: 555
1
Seguir
1617
Seguidores

Estrategia de trading a corto plazo con ruptura de la línea K inversa

Descripción general

La estrategia se utiliza para capturar oportunidades de inversión de la línea corta. Se abre una posición en la que la raíz N de la línea K es ascendente y se cierra una posición en la que la raíz M de la línea K es descendente. Además, la estrategia incorpora un límite de tiempo y una función de parada de pérdida.

El principio

  1. Parámetros de entrada: número de líneas K que suben consecutivamente N, número de líneas K que bajan consecutivamente M
  2. Definición de la lógica:
    • Las estadísticas de ups aumentan el número de líneas K, price>price[1] es +1, si no se restablece a 0
    • dns estadísticas de caída en el número de líneas K, precio < precio[1] es +1, si no se restablece a 0
  3. Entrada: Cancelar cuando ups≥N; cerrar cuando dns≥M
  4. Salida: parada de pérdidas fija o fin de período

Las ventajas

  1. Capturar oportunidades de inversión para operaciones en línea corta
  2. Tiempo de negociación flexible para diferentes planes de negociación
  3. Función de bloqueo de pérdidas incorporada para ayudar a controlar el riesgo

El riesgo

  1. La inversión de la línea corta no siempre es exitosa, puede causar pérdidas si se invierte nuevamente
  2. Se requiere un ajuste razonable de los parámetros N, M, demasiado grande o demasiado pequeño es perjudicial
  3. La hora de parada incorrecta puede no detener el daño a tiempo

Dirección de optimización

  1. Evitar operaciones contractuales en combinación con indicadores de tendencia
  2. Parámetros de ajuste dinámico N, M
  3. Optimización de los mecanismos de pérdidas

Resumir

La estrategia captura oportunidades de corto plazo mediante la estadística de la forma de la línea K. La configuración de parámetros razonables y las medidas de control del viento son esenciales para obtener ganancias estables. Se espera un mejor efecto al combinar aún más el juicio de tendencias y los parámetros de ajuste dinámico.

Código Fuente de la Estrategia
/*backtest
start: 2023-11-13 00:00:00
end: 2023-11-20 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// Strategy
strategy("Up/Down Short Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)

// There will be no short entries, only exits from long.
strategy.risk.allow_entry_in(strategy.direction.short)

consecutiveBarsUp = input(1, title='Consecutive Bars Up')
consecutiveBarsDown = input(1, title='Consecutive Bars Down')

price = close

ups = 0.0
ups := price > price[1] ? nz(ups[1]) + 1 : 0

dns = 0.0
dns := price < price[1] ? nz(dns[1]) + 1 : 0

// Strategy Backtesting
startDate  = input(timestamp("2021-01-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time, title='Backtesting End Date')

time_cond  = true

//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = (time(timeframe.period, startendtime))
timetoclose = na(time(timeframe.period, startendtime))

// Stop Loss & Take Profit Tick Based
enablesltp = input(false, title='Enable Take Profit & Stop Loss')
stopTick = input(5.0, title='Stop Loss Ticks', type=input.float) / 100
takeTick = input(10.0, title='Take Profit Ticks', type=input.float) / 100

longStop = strategy.position_avg_price - stopTick
shortStop = strategy.position_avg_price + stopTick
shortTake = strategy.position_avg_price - takeTick
longTake = strategy.position_avg_price + takeTick

plot(strategy.position_size > 0 and enablesltp ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesltp ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enablesltp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enablesltp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")

// Alert messages
message_enterlong  = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")
message_takeprofit = input("", title="Take Profit message")
message_stoploss = input("", title="Stop Loss message")

// Strategy Execution
if (ups >= consecutiveBarsUp) and time_cond and timetobuy
    strategy.entry("Long", strategy.long, stop = high + syminfo.mintick, alert_message = message_enterlong)
    
if (dns >= consecutiveBarsDown) and time_cond and timetobuy
    strategy.entry("Short", strategy.short, stop = low + syminfo.mintick, alert_message = message_entershort)
    
if strategy.position_size > 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closeshort)
    
if strategy.position_size > 0 and enablesltp and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_takeprofit)
if strategy.position_size < 0 and enablesltp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_stoploss)