Estratégia de negociação intertemporal de inversão sazonal

Autora:ChaoZhang, Data: 2024-01-25 14:07:35
Tags:

img

Resumo

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.

Princípio da estratégia

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.

Análise das vantagens

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.

Análise de riscos

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.

Orientações de otimização

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.

Resumo


/*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)

    

Mais.