Rotación del impulso a través de los marcos de tiempo Tendencia de la siguiente estrategia

El autor:¿ Qué pasa?, Fecha: 2023-11-17 17:32:11
Las etiquetas:

img

Resumen

La estrategia utiliza una combinación de medias móviles a través de un marco de tiempo para identificar la rotación de tendencias en el gráfico de medias y medias horas y realizar operaciones de seguimiento de tendencias de bajo riesgo. La estrategia tiene ventajas de configuración flexible, sencillez y alta eficiencia de capital, y es adecuada para los operadores que tienen posiciones medianas y largas que siguen las tendencias.

El análisis original

La estrategia utiliza tres medias móviles de 5, 20 y 40 días para determinar combinaciones de tendencias en diferentes marcos de tiempo.

En concreto, el cruce de la línea media de 20 días en la línea rápida de 5 días se considera una señal de alza de la línea corta, y el cruce de la línea lenta de 40 días en la línea media de 20 días se considera una señal de alza de la línea media. Cuando la línea rápida de 3 días está en línea correcta ((5 días > 20 días > 40 días), se considera un ciclo de múltiples cabezas; cuando la línea lenta de 3 días está en línea inversa ((5 días < 20 días < 40 días), se considera un ciclo de cabezas vacías.

De esta manera, se determina la dirección de la tendencia del ciclo grande, y se detecta una entrada específica combinada con la fuerza del ciclo pequeño. Es decir, solo se puede abrir una posición cuando la tendencia grande es convectiva y el ciclo pequeño es fuerte, lo que puede filtrar eficazmente los falsos avances de inversión y lograr operaciones de alta tasa de ganancia.

Además, la estrategia también utiliza el ATR para controlar el riesgo de una sola inversión y aumentar aún más la rentabilidad.

Análisis de ventajas

  • Configuración flexible, el usuario puede ajustar los parámetros de la media móvil para adaptarse a diferentes variedades y preferencias de negociación

  • La implementación es sencilla y fácil de usar para los usuarios novatos.

  • El uso eficiente de los fondos permite aprovechar al máximo el efecto de apalancamiento de los fondos

  • Los riesgos son controlados y los mecanismos de stop loss son eficaces para evitar pérdidas significativas

  • La capacidad de seguir la tendencia es fuerte y la rentabilidad continúa después de que el gran ciclo determine la dirección.

  • Las ganancias son más altas, la calidad de la señal de transacción es mejor y hay menos errores en los trayectos.

Riesgos y mejoras

  • El juicio de los grandes ciclos depende de la ordenación de la línea media de desplazamiento, y existe el riesgo de error de juicio tardío.

  • Detección de intensidad de ciclo pequeño con solo una línea K, que puede desencadenarse con anticipación y puede relajarse adecuadamente

  • El valor de la detención es fijo y puede ser optimizado para la detención dinámica

  • Se pueden considerar condiciones de filtración adicionales, como energía de volumen de transacción.

  • Puede probar diferentes combinaciones de parámetros de media móvil para optimizar estrategias

Resumen

Esta estrategia integra análisis de múltiples marcos de tiempo y gestión de pérdidas, logrando operaciones de seguimiento de tendencias de bajo riesgo. Puede aplicarse a diferentes variedades para satisfacer las necesidades de los seguidores de tendencias mediante el ajuste de parámetros. Tiene una decisión comercial más sólida y una señal más eficiente que los sistemas tradicionales de marcos de tiempo único.

Resumen general

Esta estrategia utiliza una combinación de promedios móviles a través de marcos de tiempo para identificar las rotaciones de tendencia en los gráficos horarios, diarios y semanales. Permite una tendencia de bajo riesgo después de la negociación. La estrategia es flexible, simple de implementar, eficiente en capital y adecuada para los operadores de tendencia a medio y largo plazo.

La lógica de la negociación

La estrategia emplea promedios móviles de 5, 20 y 40 días para determinar la alineación de las tendencias en diferentes marcos de tiempo.

Específicamente, el cruce de un MA rápido de 5 días por encima de un MA medio de 20 días indica una tendencia alcista a corto plazo. El cruce de un MA medio de 20 días por encima de un MA lento de 40 días señala una tendencia alcista a medio plazo. Cuando los MA rápidos, medios y lentos están alineados positivamente (5 días > 20 días > 40 días), es un ciclo alcista. Cuando están alineados negativamente (5 días < 20 días < 40 días), es un ciclo bajista.

Al determinar la dirección de los ciclos más grandes y confirmar la fuerza en los ciclos más pequeños, esta estrategia abre posiciones solo cuando la tendencia principal y el impulso menor se alinean.

La estrategia también utiliza las paradas de seguimiento de ATR para controlar los riesgos comerciales únicos y mejorar aún más la rentabilidad.

Ventajas

  • Configuraciones flexibles para adaptarse a diferentes instrumentos y estilos de negociación

  • Simple de implementar incluso para los operadores principiantes

  • Alta eficiencia de capital para maximizar el apalancamiento

  • Control eficaz del riesgo para evitar pérdidas significativas

  • Tendencia fuerte tras la capacidad para obtener beneficios sostenidos

  • Alta tasa de ganancias debido a señales robustas y menos golpes

Riesgos y mejoras

  • Los cruces MA pueden retrasarse y provocar la detección tardía de tendencias

  • La detección de la intensidad de una sola vela podría desencadenar una entrada prematura, relajar la condición

  • Pérdida de parada ATR fija, optimizada para paradas dinámicas

  • Considere la posibilidad de añadir filtros adicionales como el volumen

  • Explorar diferentes parámetros de MA para la optimización

Conclusión

Esta estrategia integra análisis de marcos de tiempo múltiples y gestión de riesgos para una tendencia de bajo riesgo después de la negociación. Al ajustar los parámetros, se puede adaptar a diferentes instrumentos para adaptarse a los traders de tendencia. En comparación con los sistemas de marcos de tiempo únicos, toma decisiones comerciales más robustas y genera señales de mayor eficiencia. En conclusión, esta estrategia tiene una buena adaptabilidad del mercado y potencial de desarrollo.


/*backtest
start: 2023-10-17 00:00:00
end: 2023-11-16 00:00:00
period: 1h
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/
// © kgynofomo

//@version=5
strategy(title="[Salavi] | Andy Advance Pro Strategy [BTC|M15]",overlay = true, pyramiding = 1,initial_capital = 10000, default_qty_type = strategy.cash,default_qty_value = 10000)

ema_short = ta.ema(close,5)
ema_middle = ta.ema(close,20)
ema_long = ta.ema(close,40)

cycle_1 = ema_short>ema_middle and ema_middle>ema_long
cycle_2 = ema_middle>ema_short and ema_short>ema_long
cycle_3 = ema_middle>ema_long and ema_long>ema_short
cycle_4 = ema_long>ema_middle and ema_middle>ema_short
cycle_5 = ema_long>ema_short and ema_short>ema_middle
cycle_6 = ema_short>ema_long and ema_long>ema_middle

bull_cycle = cycle_1 or cycle_2 or cycle_3
bear_cycle = cycle_4 or cycle_5 or cycle_6
// label.new("cycle_1")
// bgcolor(color=cycle_1?color.rgb(82, 255, 148, 60):na)
// bgcolor(color=cycle_2?color.rgb(82, 255, 148, 70):na)
// bgcolor(color=cycle_3?color.rgb(82, 255, 148, 80):na)
// bgcolor(color=cycle_4?color.rgb(255, 82, 82, 80):na)
// bgcolor(color=cycle_5?color.rgb(255, 82, 82, 70):na)
// bgcolor(color=cycle_6?color.rgb(255, 82, 82, 60):na)

// Inputs
a = input(2, title='Key Vaule. \'This changes the sensitivity\'')
c = input(7, title='ATR Period')
h = false

xATR = ta.atr(c)
nLoss = a * xATR

src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close

xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2

pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3

xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue

ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, ema)

buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below

barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop




atr = ta.atr(14)
atr_length = input.int(25)
atr_rsi = ta.rsi(atr,atr_length)
atr_valid = atr_rsi>50

long_condition =  buy and bull_cycle and atr_valid
short_condition =  sell and bear_cycle and atr_valid

Exit_long_condition = short_condition
Exit_short_condition = long_condition

if long_condition
    strategy.entry("Andy Buy",strategy.long, limit=close,comment="Andy Buy Here")

if Exit_long_condition
    strategy.close("Andy Buy",comment="Andy Buy Out")
    // strategy.entry("Andy fandan Short",strategy.short, limit=close,comment="Andy 翻單 short Here")
    // strategy.close("Andy fandan Buy",comment="Andy short Out")


if short_condition
    strategy.entry("Andy Short",strategy.short, limit=close,comment="Andy short Here")


// strategy.exit("STR","Long",stop=longstoploss)
if Exit_short_condition
    strategy.close("Andy Short",comment="Andy short Out")
    // strategy.entry("Andy fandan Buy",strategy.long, limit=close,comment="Andy 翻單 Buy Here")
    // strategy.close("Andy fandan Short",comment="Andy Buy Out")




inLongTrade = strategy.position_size > 0
inLongTradecolor = #58D68D
notInTrade = strategy.position_size == 0
inShortTrade = strategy.position_size < 0

// bgcolor(color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na)
plotshape(close!=0,location = location.bottom,color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na)


plotshape(long_condition, title='Buy', text='Andy Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(short_condition, title='Sell', text='Andy Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)


//atr > close *0.01* parameter

// MONTHLY TABLE PERFORMANCE - Developed by @QuantNomad
// *************************************************************************************************************************************************************************************************************************************************************************
show_performance = input.bool(true, 'Show Monthly Performance ?', group='Performance - credits: @QuantNomad')
prec = input(2, 'Return Precision', group='Performance - credits: @QuantNomad')

if show_performance
    new_month = month(time) != month(time[1])
    new_year  = year(time)  != year(time[1])
    
    eq = strategy.equity
    
    bar_pnl = eq / eq[1] - 1
    
    cur_month_pnl = 0.0
    cur_year_pnl  = 0.0
    
    // Current Monthly P&L
    cur_month_pnl := new_month ? 0.0 : 
                     (1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1 
    
    // Current Yearly P&L
    cur_year_pnl := new_year ? 0.0 : 
                     (1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1  
    
    // Arrays to store Yearly and Monthly P&Ls
    var month_pnl  = array.new_float(0)
    var month_time = array.new_int(0)
    
    var year_pnl  = array.new_float(0)
    var year_time = array.new_int(0)
    
    last_computed = false
    
    if (not na(cur_month_pnl[1]) and (new_month or barstate.islastconfirmedhistory))
        if (last_computed[1])
            array.pop(month_pnl)
            array.pop(month_time)
            
        array.push(month_pnl , cur_month_pnl[1])
        array.push(month_time, time[1])
    
    if (not na(cur_year_pnl[1]) and (new_year or barstate.islastconfirmedhistory))
        if (last_computed[1])
            array.pop(year_pnl)
            array.pop(year_time)
            
        array.push(year_pnl , cur_year_pnl[1])
        array.push(year_time, time[1])
    
    last_computed := barstate.islastconfirmedhistory ? true : nz(last_computed[1])
    
    // Monthly P&L Table    
    var monthly_table = table(na)
    
    if (barstate.islastconfirmedhistory)
        monthly_table := table.new(position.bottom_center, columns = 14, rows = array.size(year_pnl) + 1, border_width = 1)
    
        table.cell(monthly_table, 0,  0, "",     bgcolor = #cccccc)
        table.cell(monthly_table, 1,  0, "Jan",  bgcolor = #cccccc)
        table.cell(monthly_table, 2,  0, "Feb",  bgcolor = #cccccc)
        table.cell(monthly_table, 3,  0, "Mar",  bgcolor = #cccccc)
        table.cell(monthly_table, 4,  0, "Apr",  bgcolor = #cccccc)
        table.cell(monthly_table, 5,  0, "May",  bgcolor = #cccccc)
        table.cell(monthly_table, 6,  0, "Jun",  bgcolor = #cccccc)
        table.cell(monthly_table, 7,  0, "Jul",  bgcolor = #cccccc)
        table.cell(monthly_table, 8,  0, "Aug",  bgcolor = #cccccc)
        table.cell(monthly_table, 9,  0, "Sep",  bgcolor = #cccccc)
        table.cell(monthly_table, 10, 0, "Oct",  bgcolor = #cccccc)
        table.cell(monthly_table, 11, 0, "Nov",  bgcolor = #cccccc)
        table.cell(monthly_table, 12, 0, "Dec",  bgcolor = #cccccc)
        table.cell(monthly_table, 13, 0, "Year", bgcolor = #999999)
    
    
        for yi = 0 to array.size(year_pnl) - 1
            table.cell(monthly_table, 0,  yi + 1, str.tostring(year(array.get(year_time, yi))), bgcolor = #cccccc)
            
            y_color = array.get(year_pnl, yi) > 0 ? color.new(color.teal, transp = 40) : color.new(color.gray, transp = 40)
            table.cell(monthly_table, 13, yi + 1, str.tostring(math.round(array.get(year_pnl, yi) * 100, prec)), bgcolor = y_color, text_color=color.new(color.white, 0))
            
        for mi = 0 to array.size(month_time) - 1
            m_row   = year(array.get(month_time, mi))  - year(array.get(year_time, 0)) + 1
            m_col   = month(array.get(month_time, mi)) 
            m_color = array.get(month_pnl, mi) > 0 ? color.new(color.teal, transp = 40) : color.new(color.gray, transp = 40)
            
            table.cell(monthly_table, m_col, m_row, str.tostring(math.round(array.get(month_pnl, mi) * 100, prec)), bgcolor = m_color, text_color=color.new(color.white, 0))



Más.