Esta estrategia es una estrategia de negociación de reversión basada en efectos estacionales: establece posiciones en meses de entrada específicos y cierra posiciones en meses de salida para capturar las reversiones de precios causadas por efectos estacionales.
La lógica central de esta estrategia es establecer posiciones estacionales basadas en los meses de entrada y salida seleccionados por el usuario. Específicamente, si el mes actual es igual al mes de entrada y no se ha establecido ninguna posición, se ingresará una posición larga o corta de acuerdo con la dirección. Si la posición se ha establecido y el mes actual es igual al mes de salida, la posición se cerrará.
Cabe señalar que la estrategia por defecto arriesga el 25% de la cuenta en cada operación y cobra una comisión del 0,5% por operación.
La mayor ventaja de esta estrategia es sacar provecho de las reversiones del mercado causadas por efectos estacionales. Muchos mercados de materias primas y financieros tienen fluctuaciones estacionales significativas de precios. Si se seleccionan los tiempos de entrada y salida apropiados, se pueden capturar eficazmente esas oportunidades de reversión inducidas por efectos estacionales.
Aunque esta estrategia es eficaz, todavía hay algunos riesgos. En primer lugar, elegir tiempos de entrada y salida inadecuados puede no capturar las reversiones de precios, lo que resulta en pérdidas. En segundo lugar, los cambios en las condiciones del mercado también pueden conducir a efectos estacionales más débiles. Por último, la lógica de stop loss por defecto es débil y no puede controlar eficazmente las pérdidas de una sola operación.
A través de las optimizaciones anteriores, la estabilidad de la estrategia se puede mejorar aún más y la capacidad de seguimiento de la estrategia se puede mejorar.
/*backtest start: 2023-01-24 00:00:00 end: 2024-01-24 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © EmpiricalFX //@version=4 strategy("Seasonality Benchmark ","Season",overlay=false,default_qty_type=strategy.percent_of_equity, default_qty_value=25,initial_capital=100000,currency="USD", commission_type=strategy.commission.percent,commission_value=0.5) input_entry_direction = input("Long","Position Type",options=["Long","Short"]) input_entry_month = input("Oct","Entry Month",options=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]) input_exit_month = input("Jan","Entry Month",options=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]) //Convert three character month string to integer month_str_to_int(m)=> ret = m == "Jan" ? 1 : m == "Feb" ? 2 : m == "Mar" ? 3 : m == "Apr" ? 4 : m == "May" ? 5 : m == "Jun" ? 6 : m == "Jul" ? 7 : m == "Aug" ? 8 : m == "Sep" ? 9 : m == "Oct" ? 10 : m == "Nov" ? 11 : m == "Dec" ? 12 : -1 is_long = input_entry_direction == "Long" ? true : false entry = month_str_to_int(input_entry_month) exit = month_str_to_int(input_exit_month) var balance = strategy.equity //Entering a position is conditional on: //1. No currently active trades //2. Input entry month matches current month if(strategy.opentrades == 0 and entry == month) strategy.entry("Swing",is_long) //Exiting a position is conditional on: //1. Must have open trade //2. Input exit month matches current month if(strategy.opentrades > 0 and exit == month) strategy.close("Swing") //Update the balance every time a trade is exited if(change(strategy.closedtrades)>0) balance := strategy.equity plot(strategy.equity,"Equity",color.orange) plot(balance,"Balance",color.red)