Esta estrategia determina el momento de comprar y vender mediante el cálculo de la tasa de cambio en un período de tiempo determinado. Puede ayudar a los comerciantes a aprovechar las oportunidades de cambios de precios a corto plazo.
La estrategia se basa en los siguientes indicadores:
Las reglas específicas de compra:
Las reglas para vender:
El tamaño de la orden se establece en un porcentaje de la participación total (el 96 por ciento por defecto) para proporcionar un efecto de palanca.
La estrategia tiene las siguientes ventajas:
En general, la estrategia utiliza herramientas como la tasa de cambio de precios, el índice SMA y otros para obtener un mejor rendimiento en situaciones de volatilidad.
La estrategia también tiene los siguientes riesgos:
La configuración incorrecta de los parámetros de la tasa de variación y el SMA puede causar errores o errores en las señales de negociación. Los parámetros deben ajustarse para diferentes mercados.
El tamaño de los pedidos aumenta el riesgo. Se recomienda optimizar la proporción de pedidos en la fase de prueba.
El seguimiento de los estancamientos puede ser prematuro en situaciones de temblor. Se puede considerar ajustar el estancamiento.
La estrategia de transacciones estables es susceptible al arbitraje. Debe combinarse con el juicio de tendencias y el riesgo de gestión de pérdidas.
El análisis de los riesgos de la adecuación de los datos. La robustez de la estrategia debe ser probada en varios ensayos en diferentes mercados.
Para estos riesgos, se puede controlar el riesgo a través de la optimización de parámetros, el ajuste de órdenes, la optimización de la estrategia de stop loss y la verificación en el terreno.
La estrategia también puede ser optimizada en los siguientes aspectos:
Aumentar la precisión de la señal mediante la adición de otros indicadores técnicos, como la tasa de fluctuación, el volumen de transacciones, etc.
Optimizar el número de transacciones para reducir el impacto de transactionsstab al reducir la frecuencia de las transacciones.
Combinado con una estrategia de ruptura, establece una señal de ruptura cerca de los niveles de precios clave.
Utiliza métodos de aprendizaje automático para optimizar la configuración de los parámetros.
La robustez de las estrategias de prueba en múltiples mercados y períodos de tiempo para mejorar la adaptabilidad.
Tener en cuenta las características de las diferentes variedades, como acciones, divisas, etc., y establecer un conjunto específico de parámetros.
Optimizar continuamente las señales estratégicas y los métodos de control de riesgos en función de los resultados reales.
Esta estrategia busca oportunidades de negociación en fluctuaciones de precios de líneas cortas a través de la tasa de cambio y el indicador SMA. Es útil para capturar tendencias rápidas, pero también debe tener en cuenta el control del riesgo. La solidez y adaptabilidad de la estrategia se puede mejorar continuamente a través de la optimización de parámetros, el ajuste de órdenes, la mejora de la estrategia de stop loss y la verificación de la liquidación.
/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// @version=4
// Author: Sonny Parlin (highschool dropout)
// Best if run on 5m timeframe
strategy(shorttitle="ROC+Strategy", title="Rate of Change Strategy",
overlay=true, currency=currency.USD,
initial_capital=10000)
// Inputs and variables
ss = input(14, minval=10, maxval=50, title="SMA Fast (days)")
ff = input(100, minval=55, maxval=200, title="SMA Slow (days)")
ref = input(30, minval=20, maxval=50, title="SMA Reference (days)")
lowOffset = input(0.023, "ROC Low (%)", minval=0, step=0.01)
highOffset = input(0.047, "ROC High (%)", minval=0, step=0.01)
orderStake = input(0.96, "Order Stake (%)", minval=0, step=0.01)
lookback = input(12, "Lookback Candles", minval=1, step=1)
// SMA
smaFast = sma(close, ss)
smaSlow = sma(close, ff)
smaRef = sma(close, ref)
ROC = (max(close[lookback],close) - min(close[lookback],close)) / max(close[lookback],close)
// Set up SMA plot but don't show by default
plot(smaFast, "smaFast", color=#00ff00, display = 0)
plot(smaSlow, "smaSlow", color=#ff0000, display = 0)
plot(smaRef, "smaRef", color=#ffffff, display = 0)
// The buy stratey:
// Guard that the low is under our SMA Reference line
// Guard that the rate of change over the lookback period is greater than our
// ROC lowOffset %, default is 0.023. (low < smaRef) and (ROC > lowOffset)
// SMA fast is on the rise and SMA slow is falling and they are very likely
// to cross. (rising(smaFast,1)) and (falling(smaSlow, 1))
enterLong = (low < smaRef) and (ROC > lowOffset) and (rising(smaFast,1)) and (falling(smaSlow,1))
// The sell Strategy:
// Guard that close is higher than our SMA reference line and that the rate of
// change over the lookback period is greater than our highOffset %, default
// is 0.047. (close > smaRef) and (ROC > highOffset)
// Guard that close has risen by 3 candles in a row (rising(close,3))
// Guard that we currently have profit (strategy.openprofit > 0)
// Guard that SMA fast is higher than smaSlow (smaFast > smaSlow)
// If it keeps going up past our close position the trailing stoploss will kick in!
enterShort = (close > smaRef) and (ROC > highOffset) and (rising(close,3)) and (strategy.openprofit > 0) and (smaFast > smaSlow)
// Order size is based on total equity
// Example 1:
// startingEquity = 2000
// close = 47434.93
// orderStake = 0.45
// (2,000 × orderStake) / close = orderSize = 0.0189733599 = approx $900
// Example 2:
// startingEquity = 2000
// close = 1.272
// orderStake = 0.45
// (startingEquity × orderStake) / close = orderSize = 707.5471698113 = approx $900
orderSize = (strategy.equity * orderStake) / close
// Trailing Stoploss
// I'm using 2.62 as my default value, play with this for different results.
longTrailPerc = input(title="Trailing Stoploss (%)",
type=input.float, minval=0.0, step=0.1, defval=3.62) * 0.01
longStopPrice = 0.0
longStopPrice := if (strategy.position_size > 0)
stopValue = close * (1 - longTrailPerc)
max(stopValue, longStopPrice[1])
else
0
if (enterLong)
strategy.entry("Open Long Position", strategy.long, orderSize, when=strategy.position_size <= 0)
if (enterShort)
strategy.exit(id="Close Long Position", stop=longStopPrice)
//plot(strategy.equity)