
Esta es una estrategia de negociación de ruptura basada en la media móvil. Se calcula el precio promedio de un determinado período como la media y genera una señal de negociación cuando el precio rompe la media.
La estrategia se basa principalmente en el indicador de la media móvil. Utiliza la función sma para calcular el precio de cierre promedio en un período determinado y obtiene la media móvil. Se genera una señal de compra cuando el precio de cierre más reciente rompe la media móvil de abajo hacia arriba; se genera una señal de venta cuando el cierre más reciente rompe la media móvil de arriba hacia abajo.
En concreto, define en la estrategia la fuente de cálculo de la media móvil (el precio de cierre más reciente) y la duración del ciclo, obteniendo una secuencia de datos de la media móvil. Luego establece dos condiciones: crear una orden de compra cuando el precio cruza la media por encima; crear una orden de venta cuando el precio cruza la media por debajo. Una vez creado el pedido, también establece un stop loss: cancelar una parte de la posición cuando el pedido se beneficia al alcanzar la proporción establecida, y cancelar toda la posición cuando el pedido alcanza el precio de stop o stop loss establecido.
Es una estrategia de seguimiento de tendencias sencilla y práctica que tiene las siguientes ventajas:
A pesar de las ventajas de esta estrategia, también hay algunos riesgos:
Para controlar estos riesgos, podemos combinar otros indicadores para optimizar la filtración, introducir un juicio de tendencias a corto plazo en el gran mercado, o utilizar métodos de aprendizaje automático para encontrar la combinación óptima de parámetros.
La estrategia se puede optimizar principalmente en los siguientes aspectos:
Añadir otros indicadores técnicos de juicio, formar un sistema de negociación, mejorar la probabilidad de éxito de la estrategia. Por ejemplo, agregar indicadores de juicio auxiliares como MACD, KD.
Adhesión a un mecanismo de stop loss. Utiliza stop loss de seguimiento o stop loss de tiempo para bloquear las ganancias y evitar la expansión de las pérdidas.
Optimización de parámetros. Cambiar los parámetros de ciclo de las medias móviles para encontrar la combinación óptima de parámetros. También se pueden probar diferentes tipos de medias móviles.
Aumentar el juicio de aprendizaje automático. El uso de algoritmos como el bosque aleatorio, LSTM y otros combinados con múltiples factores para determinar la dirección de la tendencia.
Optimización de la lógica de entrada y salida. Establecer condiciones de filtro de tendencia para evitar operaciones de reversión al final de la tendencia. Considerar el uso de lógica de liquidación por lotes.
Esta estrategia de ruptura de la línea de paridad móvil es muy adecuada en general como estrategia de entrada para el comercio cuantitativo. Su idea es simple, fácil de entender y operar, y tiene cierto efecto en el campo de batalla. Al mismo tiempo, hay mucho espacio para pruebas y optimizaciones posteriores.
/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-22 08:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
// |-- Initialize Strategy Parameters:
strategy(
// |-- Strategy Title.
title='[Tutorial][RS]Working with orders',
// |-- if shorttitle is specified, it will overwrite the name on the chart window.
shorttitle='WwO',
// |-- if true it overlays current chart window, otherwise it creates a drawer to display plotting outputs.
overlay=true,
// |-- Strategy unit type for default quantity, possible arguments: (strategy.cash, strategy.fixed, strategy.percent_of_equity)
default_qty_type=strategy.cash,
// |-- Value to use for default trade size
default_qty_value=1000,
// |-- Default Account size
initial_capital=100000,
// |-- Account Currency parameter
currency=currency.USD
)
// |-- Strategy Profit/loss parameters:
profit = input(defval=5000, title='Take Profit')
loss = input(defval=5000, title='Stop Loss')
ratio = input(defval=2.0, title='Ratio at wich to take out a percentage off the table (take profit / ratio).')
percent = input(defval=50.0, title='Percentage of position to take profit.')
// |-- Signal Parameters:
// |
// |-- Moving Average input source and length parameters.
src = input(defval=close)
length = input(defval=100)
// |-- Moving Average Data series.
ma = sma(src, length)
// |-- Condition for triggering a buy(long) order(trade).
if crossover(src, ma)
// |-- Create the order.
strategy.order(id='Buy', long=true)
// |-- Issue a exit order to close a percentage of the trade when a specified ratio(take profit / ratio) is reached.
strategy.exit(id='Buy Half Exit', from_entry='Buy', qty_percent=percent, profit=profit/ratio)
// |-- Issue a exit order to close the full position, when take profit or stop loss's are reached.
strategy.exit(id='Buy Full Exit', from_entry='Buy', qty_percent=100, profit=profit, loss=loss)
if crossunder(src, ma)
// |-- Create the order.
strategy.order(id='Sell', long=false)
// |-- Issue a exit order to close a percentage of the trade when a specified ratio(take profit / ratio) is reached.
strategy.exit(id='Sell Half Exit', from_entry='Sell', qty_percent=percent, profit=profit/ratio)
// |-- Issue a exit order to close the full position, when take profit or stop loss's are reached.
strategy.exit(id='Sell Full Exit', from_entry='Sell Half Exit', qty_percent=100, profit=profit, loss=loss)
// |-- Output Functions.
plot(series=ma, title='MA', color=black)