Stratégie de négociation quantitative à facteurs multiples

Auteur:ChaoZhang est là., Date: 2023-09-13 14:46:59
Les étiquettes:

La stratégie quantitative de négociation à facteurs multiples qui intègre des facteurs moyens mobiles et des indicateurs oscillants pour contrôler les risques et améliorer la stabilité.

La logique de la stratégie

La stratégie est composée de trois modules principaux:

  1. Facteurs de moyenne mobile

L'utilisation de 5 EMA avec des périodes différentes (8, 13, 21, 34, 55) pour construire un filtre de tendance. Les EMA sont disposés de court à long.

  1. Indicateurs oscillants

Combiner les oscillateurs RSI et stochastiques pour valider les signaux de rupture, en évitant les fausses ruptures excessives dans les marchés à courants.

Le RSI (14) génère un signal long lorsqu'il se situe dans la plage 40-70 et un signal court lorsqu'il se trouve dans la plage 30-60.

Le stochastique (14,3,3) donne un signal long lorsque la ligne K est comprise entre 20-80 et un signal court lorsque la ligne K est comprise entre 5-95.

  1. Logique d'entrée et de sortie

Le signal d'entrée n'est déclenché que lorsque les deux facteurs sont alignés. Le signal de sortie est généré lorsque l'un des facteurs n'est plus valide.

Le filtre à facteurs multiples strict assure un taux de gain élevé et des signaux fiables.

Les avantages

  • La conception multifactorielle filtre efficacement le bruit du marché et empêche le sur-échange.
  • Combine suivi de tendance et inversion de la moyenne, équilibrant le trading dynamique et le trading par emplacement.
  • Capture les points d'inversion au sein des tendances à l'aide d'un MA et d'oscillateurs.
  • Grand espace d'optimisation pour obtenir de meilleures performances.

Les risques

  • Relativement faible fréquence de signal, peut manquer certaines opportunités.
  • Le retard de l'AM doit être vérifié avec des oscillateurs plus rapides.
  • Les oscillateurs sujets aux faux signaux doivent être utilisés comme facteurs auxiliaires.
  • Les paramètres doivent être optimisés périodiquement pour s'adapter à l'évolution des conditions du marché.

Conclusion

Cette stratégie combine avec succès les atouts des stratégies de trading de suivi de tendance et d'inversion.


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

Plus de