Estrategia de referencia de tendencia alcista de avance cuantitativo

El autor:¿ Qué pasa?, Fecha: 2024-02-21 10:58:01
Las etiquetas:

img

Resumen general

Esta estrategia es una estrategia de mantenimiento a largo plazo basada en determinar la dirección de la tendencia con líneas de promedio móvil simples y formar señales de avance con líneas de resistencia y soporte.

Principio de la estrategia

  1. Calcular la línea de la media móvil simple de 20 días como base para determinar la tendencia
  2. Calcular los puntos Pivot High y Pivot Low basados en los parámetros de entrada del usuario
  3. Trace las líneas de resistencia y soporte basadas en los puntos Pivot High y Pivot Low
  4. Ir largo cuando el precio de cierre es superior a la línea de resistencia
  5. Cierre de posiciones cuando la línea de soporte cruza por debajo de la línea de resistencia

Esta estrategia utiliza promedios móviles simples para determinar la dirección general de la tendencia, y luego utiliza los avances de puntos clave para generar señales comerciales, que es una estrategia de ruptura típica.

Análisis de ventajas

  1. La estrategia tiene suficientes oportunidades y es adecuada para las acciones de alta volatilidad, lo que facilita la captura de las tendencias
  2. Un buen control del riesgo para las posiciones largas, alta relación riesgo-rendimiento
  3. Utilizar señales de avance para evitar el riesgo de falsas rupturas
  4. Parámetros personalizables, alta adaptabilidad

Análisis de riesgos

  1. Confía en la optimización de parámetros, los parámetros incorrectos aumentarán la probabilidad de fallas
  2. Retraso en las señales de avance, puede perder algunas oportunidades
  3. Es fácil ser detenido en mercados volátiles
  4. Si no se ajusta la línea de apoyo a tiempo, puede producirse una pérdida.

Los riesgos pueden reducirse optimizando los parámetros a través de la negociación en vivo e incorporando estrategias de stop loss / take profit.

Direcciones de optimización

  1. Optimización de los parámetros de la media móvil
  2. Optimizar los parámetros de la línea de resistencia y soporte
  3. Añadir estrategias de stop loss/take profit
  4. Mejorar los mecanismos de confirmación de los avances
  5. Señales de filtro con volumen de negociación y otros indicadores

Resumen de las actividades

En general, esta estrategia es una estrategia de ruptura típica que se basa en la optimización de parámetros y la liquidez, adecuada para los traders de tendencia.


/*backtest
start: 2023-02-14 00:00:00
end: 2024-02-20 00:00:00
period: 1d
basePeriod: 1h
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/
// © CheatCode1

//@version=5
strategy("Quantitative Trend Strategy- Uptrend long", 'Steady Uptrend Strategy', overlay=true, initial_capital = 1500, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.01, default_qty_type = strategy.percent_of_equity)


length = input.int(20, minval=1)
src = input(close, title="Source")
basis = ta.sma(src, length)
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)

inp1 = input.int(46, 'LookbackLeft')
inp2 = input.int(32, 'LookbackRight')

l1 = ta.pivothigh(close, inp1, inp2)
S1 = ta.pivotlow(close, inp1, inp2)

// plot(l1, 'Pivothigh', color.red, 1)
// // plot(S1, 'Pivot Low', color.red)

l1V = ta.valuewhen(l1, close, 0)
S1V = ta.valuewhen(S1, close, 0)

Plotl1 = not na(l1) ? l1V : na
PlotS1 = not na(S1) ? S1V : na

plot(Plotl1, 'Resistance', color.green, 1, plot.style_stepline, true)
plot(PlotS1, 'Support', color.red, 1, plot.style_stepline, true)

Priceforlong = close > l1V ? true : na
Priceforshort = close < S1V ? true : na

plotshape(Priceforlong ? high : na, 'p', shape.arrowup, location.abovebar, color.green, size = size.small)
plotshape(Priceforshort ? low : na, 's', shape.arrowdown, location.belowbar, color.red, size = size.small)

vol = volume
volma = ta.sma(vol, 20)

Plotl1C = ta.valuewhen(na(Plotl1), l1V, 0)
PlotS1C = ta.valuewhen(na(PlotS1), S1V, 0)
//Strategy Execution
volc = volume > volma 

Lc1 = Priceforlong 

Sc1 = Priceforshort

sL = Plotl1 < PlotS1 ? close : na
sS = PlotS1 > Plotl1 ? close : na


if Lc1 
    strategy.entry('Long', strategy.long)
// if Sc1 and C2
//     strategy.entry('Short', strategy.short)

if Priceforshort
    strategy.cancel('Long')
if Priceforlong   
    strategy.cancel('Short')


// Stp1 = ta.crossover(k, d)
// Ltp1 = ta.crossunder(k, d)
// Ltp = d > 70  ? Ltp1 : na
// Stp = d < 30  ? Stp1 : na


if strategy.openprofit >= 0 and sL
    strategy.close('Long')
if strategy.openprofit >= 0 and sS
    strategy.close('Short')
takeP = input.float(2, title='Take Profit') / 100
stopL = input.float(1.75, title='Stop Loss') / 100


// // Pre Directionality

Stop_L = strategy.position_avg_price * (1 - stopL)

Stop_S = strategy.position_avg_price * (1 + stopL)

Take_S= strategy.position_avg_price * (1 - takeP)

Take_L = strategy.position_avg_price * (1 + takeP)
     
// sL = Plotl1 < PlotS1 ? close : na
// sS = PlotS1 < Plotl1 ? close : na
     
// //Post Excecution
if strategy.position_size > 0 and not (Lc1)
    strategy.exit("Close Long", stop = Stop_L, limit = Take_L)

if strategy.position_size < 0 and not (Sc1)
    strategy.exit("Close Short", stop = Stop_S, limit = Take_S)

Más.