Esta estrategia utiliza indicadores de impulso de precios para determinar la dirección de la negociación. Específicamente, calcula el promedio móvil y el precio medio respectivamente. Cuando el precio cruza por encima del promedio móvil y el precio medio, se genera una señal de compra. Para filtrar las señales falsas, no requiere señales anteriores similares. Luego guarda el estado de la señal y genera la señal de posición de apertura final en combinación con el promedio móvil. La estrategia también contiene configuraciones de stop loss y take profit.
La estrategia se basa principalmente en indicadores de impulso de precios para juzgar la dirección de la tendencia.
swmaClose = swma(close)
vwapClose = vwap(close)
¿Dónde está?swma
es la media móvil suavizada yvwap
Los dos pueden reflejar el nivel medio de precios.
Luego compare el precio con el promedio para ver si el precio cruza por encima del promedio móvil y el precio medio, para juzgar si es una señal alcista:
swmaLong = close > swmaClose
vwapLong = close > vwapClose
Para filtrar las señales falsas, no se requieren señales previas de estos dos indicadores:
triggerLong = vwapLong and not vwapLong[1] and not swmaLong and not swmaLong[1]
A continuación, guarde la señal alcista:
saveLong = false, saveLong := triggerLong ? true : not vwapLong ? false : saveLong[1]
Por último, cuando la señal de cruce guardada y el precio vuelvan a cruzar por encima de la media móvil, se genera la señal de posición de apertura:
startLong = saveLong and swmaLong
Esto puede filtrar algunas señales falsas y hacer que las señales sean más confiables.
La estrategia también contiene configuraciones de stop loss y take profit.
La estrategia tiene las siguientes ventajas:
La estrategia también tiene algunos riesgos:
Contramedidas:
La estrategia también puede optimizarse en las siguientes direcciones:
Estas optimizaciones pueden mejorar la flexibilidad, robustez y rentabilidad de la estrategia.
En general, esta estrategia de seguimiento del impulso del precio es una estrategia de seguimiento de tendencias simple, directa y lógica. La estrategia utiliza promedios móviles de precios y precios medios para determinar la dirección del impulso del precio, y diseña un mecanismo de verificación de varios pasos para mejorar la calidad de la señal. La estrategia también contiene configuraciones razonables de stop loss y take profit. En términos de código, la lógica de la estrategia es muy concisa, requiriendo solo 20+ líneas de script de Pine para implementar. En resumen, esta estrategia es un muy buen ejemplo de aprendizaje, los principiantes pueden usarla como un muy buen punto de partida para comprender las estrategias comerciales cuantitativas. Por supuesto, la estrategia en sí misma también tiene un valor comercial práctico. A través de la optimización de parámetros y la expansión de funciones, puede convertirse en un sistema de seguimiento práctico para evitar ruido y tendencias comerciales.
/*backtest start: 2023-12-03 00:00:00 end: 2024-01-02 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title = "Simple Price Momentum", shorttitle = "SPM", overlay = true, initial_capital = 20000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity, commission_value = 0.025) // How To Create A Simple Trading Strategy With TradingView // https://docs.google.com/document/d/1fXxCtPuGgTXb-RuBJNbwlfgkeiLTK5060LfTrzRlr5k/view swmaClose = swma(close) vwapClose = vwap(close) swmaLong = close > swmaClose vwapLong = close > vwapClose triggerLong = vwapLong and not vwapLong[1] and not swmaLong and not swmaLong[1] saveLong = false, saveLong := triggerLong ? true : not vwapLong ? false : saveLong[1] startLong = saveLong and swmaLong startLong := input(false, "Consecutive Orders") ? startLong : startLong and not startLong[1] stopLoss = input(250, "Stop Loss", step = 50) takeProfit = input(10, "Reward/Risk") * stopLoss strategy.entry("Open Long", strategy.long, when = startLong) strategy.exit("Exit Long", "Open Long", profit = stopLoss, loss = takeProfit) // bgcolor(swmaLong ? color.blue : na) // bgcolor(vwapLong ? color.orange : na) // bgcolor(triggerLong ? color.purple : na) // bgcolor(saveLong ? color.yellow : na) bgcolor(startLong[1] ? color.green : na)