Esta estratégia é uma estratégia de negociação de reversão baseada em efeitos sazonais.Estabelece posições em meses de entrada específicos e fecha posições em meses de saída para capturar reversões de preços causadas por efeitos sazonais.
A lógica central desta estratégia é estabelecer posições sazonais com base nos meses de entrada e saída selecionados pelo usuário. Especificamente, se o mês atual for igual ao mês de entrada e nenhuma posição for estabelecida, uma posição longa ou curta será inserida de acordo com a direção.
Por exemplo, se outubro for selecionado como o mês de entrada e janeiro como o mês de saída, novas posições serão estabelecidas a cada outubro na direção longa ou curta se não houver uma posição existente.
A maior vantagem desta estratégia é lucrar com reversões de mercado causadas por efeitos sazonais. Muitos mercados de commodities e financeiros têm flutuações sazonais significativas de preços. Se os tempos de entrada e saída apropriados forem selecionados, essas oportunidades de reversão induzidas por efeitos sazonais podem ser efetivamente capturadas.
Além disso, esta estratégia é muito simples e fácil de entender e implementar, adequado para iniciantes de negociação quantitativa.
Para reduzir os riscos, pode-se considerar a otimização da seleção dos tempos de entrada e saída, combinando mais análises para julgar as condições do mercado e definindo paradas para controlar os riscos.
Através das otimizações acima, a estabilidade da estratégia pode ser melhorada e a capacidade de rastreamento da estratégia pode ser aprimorada.
/*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)