Stratégie de négociation intertemporelle de renversement saisonnier

Auteur:ChaoZhang est là.
Les étiquettes:

img

Résumé

Principe de stratégie

Par exemple, si octobre est sélectionné comme mois d'entrée et janvier comme mois de sortie, de nouvelles positions seront établies chaque octobre dans le sens long ou court s'il n'y a pas de position existante.

Il convient de noter que la stratégie par défaut risque 25% du compte sur chaque transaction et facture une commission de 0,5% par transaction.

Analyse des avantages

En outre, cette stratégie est très simple et facile à comprendre et à mettre en œuvre, adaptée aux débutants du trading quantitatif.

Analyse des risques

Bien que cette stratégie soit efficace, il y a encore des risques. Premièrement, le choix de temps d'entrée et de sortie inappropriés peut ne pas capter les renversements de prix, entraînant des pertes. Deuxièmement, les changements dans les conditions du marché peuvent également entraîner des effets saisonniers plus faibles. Enfin, la logique de stop loss par défaut est faible et ne peut pas contrôler efficacement les pertes d'une seule transaction.

Pour réduire les risques, on peut envisager d'optimiser la sélection des temps d'entrée et de sortie, de combiner plus d'analyses pour juger des conditions du marché et de définir des arrêts pour contrôler les risques.

Directions d'optimisation

Résumé


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

    

Plus de