name: seasonal description: Seasonal/calendar-effect strategy. Generates trading signals from time-based patterns such as month-of-year effects and day-of-week effects. Suitable for any OHLCV data. category: strategy
Seasonal / Calendar Effect Strategy
Purpose
Uses time-based regularities in financial markets (month effects, day-of-week effects, and similar patterns) to generate trading signals. Examples include the China A-share "spring rally" (January-March) and the "sell in May" effect.
Signal Logic
Month Effect (Default)
- Specified bullish months → go long
- Specified bearish months → go short / stay out
- All other months → stay flat
Day-of-Week Effect (Optional Overlay)
- Monday / Friday effects
- Start-of-month / end-of-month effects
Combined Mode
Month signal × weekday signal; open a position only when both confirm.
Common Calendar Effects Reference
| Effect | Description | Reference Configuration |
|---|---|---|
| Spring rally | Higher probability of gains in China A-shares from January to March | bullish_months=[1,2,3] |
| Sell in May | Weaker performance from May to October | bearish_months=[5,6,7,8,9,10] |
| Year-end effect | Institutional rebalancing in December | bullish_months=[11,12] |
| Monday effect | Lower returns on Mondays | bearish_weekdays=[0] |
| Friday effect | Higher returns on Fridays | bullish_weekdays=[4] |
Parameters
| Parameter | Default | Description |
|---|---|---|
| bullish_months | [1, 2, 3, 11, 12] | Bullish months |
| bearish_months | [5, 6, 7, 8, 9] | Bearish months |
| use_weekday | False | Whether to enable weekday effects |
| bullish_weekdays | [4] | Bullish weekdays (0=Monday, 4=Friday) |
| bearish_weekdays | [0] | Bearish weekdays |
Common Pitfalls
pd.DatetimeIndex.monthstarts from 1 (1=January)pd.DatetimeIndex.weekdaystarts from 0 (0=Monday, 4=Friday)- Seasonal strategies are statistical regularities, not deterministic signals, so pay attention to sample size in backtests
- Neutral months (neither in
bullishnorbearish) should output 0 and must not be skipped
Dependencies
pip install pandas numpy
Signal Convention
1= long (bullish window),-1= short (bearish window),0= stand aside