Stratégie de trading quantitative multi-facteurs qui prend en compte le facteur de linéarité et le facteur d’indicateur d’oscillation pour contrôler le risque et améliorer la stabilité. Cet article détaille les principes, les avantages et les risques potentiels de cette stratégie de trading.
La stratégie est composée de trois modules:
Le filtre de tendance est construit à l’aide de cinq moyennes EMA de différentes périodes (8, 13, 21, 34 et 55 jours). Les moyennes sont rangées de courtes à longues et ne présentent des caractéristiques de tendance et ne génèrent un signal de négociation que si elles traversent les moyennes de courte période.
Le RSI et le Stochastic sont des indicateurs de volatilité qui permettent de vérifier les ruptures afin d’éviter de nombreuses fausses ruptures dans un marché en crise.
Le paramètre RSI est de 14, lorsque le RSI est dans la fourchette 40-70 et dans la fourchette 30-60
Le paramètre stochastique est [ 14 , 3 , 3 ] , lorsque la ligne K est conforme à la condition de plus dans la plage 20-80 et à la condition de moins dans la plage 5-95.
Un signal d’entrée n’est déclenché que lorsque le facteur de la moyenne et le facteur de l’indicateur de l’oscillation sont simultanément admissibles; un signal de sortie est déclenché lorsque l’un des facteurs n’est plus admissible.
L’ensemble de la stratégie utilise un mécanisme de filtrage multifonctionnel rigoureux, qui assure la stabilité et la fiabilité du signal de négociation tout en conservant un taux de victoire élevé.
Cette stratégie a réussi à combiner les avantages du suivi de la tendance et du trading inversé, le modèle multifacteur maîtrise efficacement les risques et permet d’obtenir des gains supplémentaires stables. C’est un modèle de stratégie de trading quantitatif très pratique qui mérite une étude et une application approfondies de la communauté de l’intelligence artificielle.
/*backtest
start: 2022-09-12 00:00:00
end: 2022-11-15 00:00:00
period: 2d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title = "Combined Strategy", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value = .0020, pyramiding = 0, slippage = 3, overlay = true)
//----------//
// MOMENTUM //
//----------//
ema8 = ema(close, 8)
ema13 = ema(close, 13)
ema21 = ema(close, 21)
ema34 = ema(close, 34)
ema55 = ema(close, 55)
plot(ema8, color=red, style=line, title="8", linewidth=1)
plot(ema13, color=orange, style=line, title="13", linewidth=1)
plot(ema21, color=yellow, style=line, title="21", linewidth=1)
plot(ema34, color=aqua, style=line, title="34", linewidth=1)
plot(ema55, color=lime, style=line, title="55", linewidth=1)
longEmaCondition = ema8 > ema13 and ema13 > ema21 and ema21 > ema34 and ema34 > ema55
exitLongEmaCondition = ema13 < ema55
shortEmaCondition = ema8 < ema13 and ema13 < ema21 and ema21 < ema34 and ema34 < ema55
exitShortEmaCondition = ema13 > ema55
// ---------- //
// OSCILLATORS //
// ----------- //
rsi = rsi(close, 14)
longRsiCondition = rsi < 70 and rsi > 40
exitLongRsiCondition = rsi > 70
shortRsiCondition = rsi > 30 and rsi < 60
exitShortRsiCondition = rsi < 30
// Stochastic
length = 14, smoothK = 3, smoothD = 3
kFast = stoch(close, high, low, 14)
dSlow = sma(kFast, smoothD)
longStochasticCondition = kFast < 80
exitLongStochasticCondition = kFast > 95
shortStochasticCondition = kFast > 20
exitShortStochasticCondition = kFast < 5
//----------//
// STRATEGY //
//----------//
longCondition = longEmaCondition and longRsiCondition and longStochasticCondition and strategy.position_size == 0
exitLongCondition = (exitLongEmaCondition or exitLongRsiCondition or exitLongStochasticCondition) and strategy.position_size > 0
if (longCondition)
strategy.entry("LONG", strategy.long)
if (exitLongCondition)
strategy.close("LONG")
shortCondition = shortEmaCondition and shortRsiCondition and shortStochasticCondition and strategy.position_size == 0
exitShortCondition = (exitShortEmaCondition or exitShortRsiCondition or exitShortStochasticCondition) and strategy.position_size < 0
if (shortCondition)
strategy.entry("SHORT", strategy.short)
if (exitShortCondition)
strategy.close("SHORT")