
Cette stratégie est une stratégie de trading quantitative qui combine le suivi des tendances et les mécanismes de sortie temporelle. Le cœur de la stratégie est de capturer les tendances du marché en observant la relation entre le prix et la moyenne mobile sur 60 jours, tout en introduisant un mécanisme de liquidation forcée de fin d’année pour contrôler les risques. Lorsque le cours de clôture dépasse la moyenne mobile sur 60 jours et que la pente de la moyenne mobile est positive, entrez sur le marché pour devenir long et fermez toutes les positions le dernier jour de négociation de chaque année.
La stratégie repose sur les éléments fondamentaux suivants :
Cette stratégie construit un système de trading relativement robuste en combinant le suivi des tendances et la gestion du temps. La logique de la stratégie est simple et claire, facile à comprendre et à mettre en œuvre, et présente une bonne praticité. Grâce à une optimisation raisonnable des paramètres et à la complémentation des mesures de contrôle des risques, cette stratégie devrait permettre d’obtenir des rendements stables dans les transactions réelles.
/*backtest
start: 2025-01-09 00:00:00
end: 2025-01-16 00:00:00
period: 3m
basePeriod: 3m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=5
strategy("Buy above 60-day MA, Sell at year-end", overlay=true, pyramiding=1)
// Define inputs for start and end dates
startDate = input(defval=timestamp("2010-01-01"), title="Start Date")
endDate = input(defval=timestamp("2024-12-31"), title="End Date")
// Define 60-day moving average
length = input.int(defval=60, title="MA Length", minval=1)
ma = ta.sma(close, length)
slope = ta.sma(ma, 14) - ta.sma(ma, 14)[1]
// Check if current bar is within the specified date range
withinDateRange = true
// Function to check if a day is a trading day (Monday to Friday)
isTradingDay(day) => true
// Check if current bar is the last trading day of the year
// Check if current bar is the last trading day of the year
isLastTradingDayOfYear = false
yearNow = year(time)
if (month == 12 and dayofmonth == 31)
isLastTradingDayOfYear := isTradingDay(time)
else if (month == 12 and dayofmonth == 30)
isLastTradingDayOfYear := isTradingDay(time) and not isTradingDay(time + 86400000)
else if (month == 12 and dayofmonth == 29)
isLastTradingDayOfYear := isTradingDay(time) and not isTradingDay(time + 86400000) and not isTradingDay(time + 86400000 * 2)
// Plot moving average
plot(ma, color=color.blue, linewidth=2)
// Buy when closing price crosses above 60-day MA and up trend
if (withinDateRange and ta.crossover(close, ma) and slope > 0)
strategy.entry("Buy", strategy.long)
// Sell all positions at the last trading day of the year
if (isLastTradingDayOfYear)
strategy.close_all(comment="Sell at year-end")
// Plot buy and sell signals
//plotshape(series=ta.crossover(close, ma), location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
//plotshape(series=isLastTradingDayOfYear, location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")