Stratégie de sélection de l'indicateur de momentum stochastique double


Date de création: 2023-10-07 16:45:25 Dernière modification: 2023-10-07 16:45:25
Copier: 0 Nombre de clics: 736
1
Suivre
1617
Abonnés

Aperçu

La stratégie utilise deux indicateurs de dynamique aléatoires (SMI et RSI) pour la prise de décision sur la volatilité, en plus d’un filtrage des signaux de négociation avec des filtres martingale et physique, visant à capturer les tendances de la courte ligne moyenne et à suivre les fluctuations des prix.

Principe de stratégie

La stratégie utilise les indices binaires de dynamique aléatoire SMI et RSI pour juger de la surchauffe. Le SMI est calculé à partir de la différence entre les prix réels de la ligne K et la moyenne mobile des prix de clôture, ce qui permet d’identifier efficacement les points de retournement. Le RSI est déterminé par la comparaison de la surchauffe pour déterminer les surachats et les surventeurs.

Pour filtrer les fausses percées, la stratégie utilise également 13 de la ligne d’équilibre corporelle de 10 cycles comme condition de filtration de la percée. Lorsque l’entité franchit 13 de la ligne d’équilibre, la percée est considérée comme valide.

En outre, la stratégie utilise la stratégie de Martingale optionnelle, c’est-à-dire qu’elle augmente proportionnellement la position lors d’une transaction perdue dans l’espoir de récupérer les pertes antérieures.

La fonctionnalité de backtest permet de mesurer l’efficacité de la stratégie en entrant le temps de début et de fin.

Analyse des avantages

La stratégie utilise des indicateurs et des filtres binaires et aléatoires pour identifier efficacement les points de retournement, capturer les tendances de courte durée et suivre les fluctuations des prix.

  • Le SMI est capable d’identifier les points de basculement et de déterminer efficacement les surachats et les survente
  • RSI superposé pour éviter les fuites
  • Filtrage corporel pour supprimer les fausses percées et améliorer la précision du signal
  • Option de stratégie de chasse à la Martingale pour récupérer une partie des pertes

Analyse des risques

  • Les SMI et RSI sont des indicateurs de retard, le signal est retardé et il y a un risque de poursuite
  • Le risque d’accélération de la perte de Martingale
  • Dans un marché en pleine évolution, les filtres peuvent filtrer certains signaux valides.

L’optimisation des paramètres SMI et RSI permet de réduire la probabilité d’une poursuite de hauts et de bas. L’utilisation rationnelle de la stratégie de Martingale, le contrôle du taux et de la fréquence de prise de position. Le choix de l’activation ou non du filtre en fonction de la situation du marché réduit la probabilité de filtrage des signaux valides.

Direction d’optimisation

  • Optimiser les combinaisons de paramètres SMI et RSI pour obtenir le meilleur résultat
  • Ajustez les paramètres du filtre pour réduire la probabilité d’un signal de filtration valide
  • Optimiser le nombre et le pourcentage d’actions de Martingale
  • Combiner les indicateurs de tendance pour éviter les opérations inversées
  • Augmentation des stratégies de coupe-perte et maîtrise des pertes individuelles

Résumer

La stratégie utilise un ensemble d’indicateurs binaires aléatoires pour capturer les points de retournement, en plus de filtrer et de suivre les signaux de négociation avec des filtres et des martingales. Elle permet d’identifier efficacement les tendances de la courte ligne moyenne et de suivre les fluctuations des prix.

Code source de la stratégie
/*backtest
start: 2022-09-30 00:00:00
end: 2023-10-06 00:00:00
period: 2d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// strategy(title = "CS Basic Scripts - Stochastic Special (Strategy)", shorttitle = "Stochastic Special", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings 
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usesmi = input(true, defval = true, title = "Use SMI Strategy")
usersi = input(true, defval = true, title = "Use RSI Strategy")
usebod = input(true, defval = true, title = "Use Body-Filter")
a = input(5, "SMI Percent K Length")
b = input(3, "SMI Percent D Length")
limit = input(50, defval = 50, minval = 1, maxval = 100, title = "SMI Limit")

//Backtesting Input Range
fromyear = input(2017, defval = 2017, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Fast RSI
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Stochastic Momentum Index
ll = lowest (low, a)
hh = highest (high, a)
diff = hh - ll
rdiff = close - (hh+ll)/2
avgrel = ema(ema(rdiff,b),b)
avgdiff = ema(ema(diff,b),b)
SMI = avgdiff != 0 ? (avgrel/(avgdiff/2)*100) : 0
SMIsignal = ema(SMI,b)

//Lines
plot(SMI, color = blue, linewidth = 3, title = "Stochastic Momentum Index")
plot(SMIsignal, color = red, linewidth = 3, title = "SMI Signal Line")
plot(limit, color = black, title = "Over Bought")
plot(-1 * limit, color = black, title = "Over Sold")
plot(0, color = blue, title = "Zero Line")

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebod == false

//Signals
up1 = SMI < -1 * limit and close < open and body and usesmi
dn1 = SMI > limit and close > open and body and usesmi
up2 = fastrsi < 20 and close < open and body and usersi
dn2 = fastrsi > 80 and close > open and body and usersi
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up1 or up2
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()