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.
En outre, cette stratégie est très simple et facile à comprendre et à mettre en œuvre, adaptée aux débutants du trading quantitatif.
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.
/*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)