Estrategia de seguimiento de tendencias alcistas de Golden Cross

El autor:¿ Qué pasa?, fecha: 2024-01-03 11:46:44
Las etiquetas:

img

Resumen general

Esta estrategia está diseñada basándose en el principio de la cruz de oro de los promedios móviles. Específicamente, utiliza dos promedios móviles simples de diferentes períodos, a saber, la línea de 50 períodos y la línea de 200 períodos. Cuando la línea de 50 períodos atraviesa la línea de 200 períodos desde abajo, se genera una señal de compra. Cuando la línea de 50 períodos atraviesa la línea de 200 períodos desde arriba, se genera una señal de venta.

Estrategia lógica

La estrategia está escrita en el lenguaje Pine Script, con la lógica principal de la siguiente manera:

  1. Calcular dos SMA: una de 50 períodos y otra de 200 períodos.
  2. Determinar la cruz de oro: cuando la SMA de 50 períodos cruza por encima de la SMA de 200 períodos, se realiza un largo
  3. Determinación de la posición de cierre: cuando la SMA de 50 períodos se cruza por debajo de la SMA de 200 períodos, la posición de cierre

La importancia de usar el indicador SMA aquí es que puede filtrar eficazmente el ruido del mercado y capturar las tendencias a largo plazo.

Ventajas

La estrategia tiene las siguientes ventajas:

  1. Principio simple y fácil de entender, fácil de implementar.
  2. Configuración de parámetros razonables, dos períodos de SMA personalizables y adaptables a diferentes mercados.
  3. Escrito en una versión estable del lenguaje Pine, funciona eficientemente.
  4. Rich configuraciones visuales, fácil de usar.

Riesgos y soluciones

La estrategia también tiene algunos riesgos:

  1. Puede ajustar dos parámetros SMA para reducir la probabilidad de una falsa ruptura.

  2. No puede responder al mercado a corto plazo, solo es adecuado para inversores a largo plazo.

  3. Puede establecer un stop loss o ajustar adecuadamente la gestión de la posición.

Direcciones de optimización

La estrategia puede optimizarse aún más en los siguientes aspectos:

  1. Añadir otros indicadores para el filtrado, combinando múltiples condiciones de compra/venta para reducir las señales falsas.

  2. Mecanismo de stop loss obligatorio cuando el precio rompe cierto nivel.

  3. Optimice la gestión de posiciones, como la pirámide a lo largo de la tendencia, el stop loss de seguimiento, etc. para controlar la caída y buscar un mayor rendimiento.

  4. Optimización de parámetros: evaluar el impacto de los diferentes parámetros en la relación rendimiento/riesgo.

Conclusión

En general, esta es una estrategia típica de seguimiento de tendencias. Utiliza la ventaja de SMA para capturar de forma sencilla y eficiente las tendencias a largo plazo. Puede personalizarse según el estilo y el espacio de ajuste de uno. También necesita notar las deficiencias existentes para una mayor optimización y mejora.


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
//
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// www.tradingview.com/u/TradeFab/
// www.tradefab.com
// ___  __        __   __  __       __
//  |  |__)  /\  |  \ |__ |__  /\  |__)
//  |  |  \ /~~\ |__/ |__ |   /~~\ |__)
//
// DISCLAIMER: Futures, stocks and options trading involves substantial risk of loss 
// and is not suitable for every investor. You are responsible for all the risks and 
// financial resources you use and for the chosen trading system.
// Past performance is not indicative for future results. In making an investment decision,
// traders must rely on their own examination of the entity making the trading decisions!
//
// TradeFab's Golden Cross Strategy.
// The strategy goes long when the faster SMA 50 (the simple moving average of the last 50 bars) crosses
// above the SMA 200. Orders are closed when the SMA 50 crosses below SMA 200. The strategy does not short.
//
VERSION = "1.2"
// 1.2 FB 2020-02-09 converted to Pine version 4
// 1.1 FB 2017-01-15 added short trading
// 1.0 FB 2017-01-13 basic version using SMAs
//
strategy(
   title        = "TFs Golden Cross " + VERSION, 
   shorttitle   = "TFs Golden Cross " + VERSION, 
   overlay      = true
   )


///////////////////////////////////////////////////////////
// === INPUTS ===
///////////////////////////////////////////////////////////
inFastSmaPeriod     = input(title="Fast SMA Period", type=input.integer, defval=50, minval=1)
inSlowSmaPeriod     = input(title="Slow SMA Period", type=input.integer, defval=200, minval=1)

// backtest period
testStartYear       = input(title="Backtest Start Year",    type=input.integer, defval=2019, minval=2000)
testStartMonth      = input(title="Backtest Start Month",   type=input.integer, defval=1, minval=1, maxval=12)
testStartDay        = input(title="Backtest Start Day",     type=input.integer, defval=1, minval=1, maxval=31)
testStopYear        = input(title="Backtest Stop Year",     type=input.integer, defval=2099, minval=2000)
testStopMonth       = input(title="Backtest Stop Month",    type=input.integer, defval=12, minval=1, maxval=12)
testStopDay         = input(title="Backtest Stop Day",      type=input.integer, defval=31, minval=1, maxval=31)


///////////////////////////////////////////////////////////
// === LOGIC ===
///////////////////////////////////////////////////////////
smaFast = sma(close, inFastSmaPeriod)
smaSlow = sma(close, inSlowSmaPeriod)

bullishCross = crossover (smaFast, smaSlow)
bearishCross = crossunder(smaFast, smaSlow)

// detect valid backtest period
isTestPeriod() => true


///////////////////////////////////////////////////////////
// === POSITION EXECUTION ===
///////////////////////////////////////////////////////////
strategy.entry("long",  strategy.long,  when=bullishCross)
strategy.entry("short", strategy.short, when=bearishCross)


///////////////////////////////////////////////////////////
// === PLOTTING ===
///////////////////////////////////////////////////////////
// background color
nopColor = color.new(color.gray, 50)
bgcolor(not isTestPeriod() ? nopColor : na)

bartrendcolor = 
   close > smaFast and 
   close > smaSlow and 
   change(smaSlow) > 0 
       ? color.green 
       : close < smaFast and 
         close < smaSlow and 
         change(smaSlow) < 0 
             ? color.red 
             : color.blue
barcolor(bartrendcolor)
plot(smaFast, color=change(smaFast) > 0 ? color.green : color.red, linewidth=2)
plot(smaSlow, color=change(smaSlow) > 0 ? color.green : color.red, linewidth=2)

// label
posColor = color.new(color.green, 75)
negColor = color.new(color.red, 75)
dftColor = color.new(color.blue, 75)
posProfit= (strategy.position_size != 0) ? (close * 100 / strategy.position_avg_price - 100) : 0.0
posDir   = (strategy.position_size  > 0) ? "long" : strategy.position_size < 0 ? "short" : "flat"
posCol   = (posProfit > 0) ? posColor : (posProfit < 0) ? negColor : dftColor

var label lb = na
label.delete(lb)
lb := label.new(bar_index, max(high, highest(5)[1]),
   color=posCol,
   text="Pos: "+ posDir +
      "\nPnL: "+tostring(posProfit, "#.##")+"%" +
      "\nClose: "+tostring(close, "#.##"))
  

Más.