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.
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 1⁄3 de la ligne d’équilibre corporelle de 10 cycles comme condition de filtration de la percée. Lorsque l’entité franchit 1⁄3 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.
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.
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.
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.
/*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()