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.
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.
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.
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
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.
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 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.
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
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
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))