Esta es una estrategia de negociación de ruptura basada en promedios móviles. Calcula el precio promedio durante un cierto período como el promedio móvil. Cuando el precio rompe el promedio móvil, se generan señales comerciales.
La estrategia se basa principalmente en el indicador de promedio móvil. Utiliza la función sma para calcular el precio de cierre promedio durante un período para obtener el promedio móvil. Cuando el último precio de cierre rompe el promedio móvil hacia arriba, se genera una señal de compra. Cuando el último precio de cierre rompe el promedio móvil hacia abajo, se genera una señal de venta.
Específicamente, define la fuente (precio de cierre reciente) y la longitud del promedio móvil en la estrategia para obtener la secuencia de datos de promedio móvil. Luego establece dos condiciones: crear una orden larga cuando el precio cruza por encima del promedio móvil; crear una orden corta cuando el precio cruza por debajo del promedio móvil. Después de crear las órdenes, también establece la toma de ganancias y el stop loss: cierra parte de la posición cuando la orden alcanza una proporción de ganancias establecida, y cierra toda la posición cuando la orden alcanza el precio de toma de ganancias o stop loss preestablecido.
Se trata de una estrategia de tendencia sencilla y práctica que presenta las siguientes ventajas:
Aunque la estrategia tiene muchas ventajas, todavía existen algunos riesgos:
Para controlar estos riesgos, podemos optimizar combinando otros indicadores para la filtración, introducir un juicio de tendencia de mercado a corto plazo o usar métodos de aprendizaje automático para encontrar las combinaciones óptimas de parámetros.
La estrategia se puede optimizar en los siguientes aspectos:
Añadir otros indicadores técnicos para el juicio para construir un sistema de negociación y mejorar la tasa de ganancia.
Agregue mecanismos de stop loss. Utilice el stop loss de seguimiento o el stop loss basado en el tiempo para bloquear las ganancias y evitar pérdidas más amplias.
Realizar la optimización de parámetros. Cambiar el parámetro del período de media móvil para encontrar la mejor combinación. También se pueden probar diferentes tipos de medias móviles.
Usar algoritmos como el bosque aleatorio y LSTM combinados con múltiples factores para determinar la dirección de la tendencia.
Optimice la lógica de entrada y salida. Establezca condiciones de filtrado de tendencia para evitar operaciones contra la tendencia cerca de su final. Considere usar la lógica de salida escalonada.
En general, esta estrategia de breakout de promedio móvil es muy adecuada como estrategia de negociación de cantidades para principiantes. Tiene una lógica simple, fácil de entender y operar, con algunos efectos prácticos. Al mismo tiempo, deja mucho espacio para pruebas y optimización adicionales. Podemos introducir más indicadores técnicos y modelos sobre esta base para desarrollar mejores estrategias de cantidades.
/*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)