La stratégie permet de réaliser des entrées et des arrêts à plusieurs niveaux en définissant des moyennes mobiles à plusieurs paramètres différents. La stratégie calcule d’abord 3 lignes longues et 3 lignes courtes, en faisant plus lorsque la ligne longue est inférieure à la ligne courte et en faisant vide lorsque la ligne courte est inférieure à la ligne longue. La stratégie peut définir des paramètres tels que la longueur du cycle de calcul de la ligne moyenne mobile, le taux d’écart et la plage de temps de négociation, qui s’appliquent à la négociation de tendances sur les lignes longues et moyennes.
La moyenne mobile simple des cycles len des prix sources src dans les paramètres de calcul est utilisée comme moyenne de référence.
Le nombre de lignes longues et courtes correspondant aux paramètres long et short.
Les lignes longues telles que longline1 sont déviées de la moyenne de référence par rapport aux paramètres définis tels que longlevel1.
Dans le temps de négociation, le rapport entre le prix et la ligne moyenne permet d’obtenir des entrées à plusieurs niveaux.
Le stop loss est exécuté lorsque le prix touche la moyenne de référence.
Le placement obligatoire à l’heure de clôture.
Cette stratégie présente les avantages suivants:
Il existe plusieurs niveaux d’entrée, permettant d’accéder à différentes étapes de la tendance pour en tirer profit.
Les paramètres sont plus personnalisables et peuvent être ajustés en fonction des variétés et des styles de négociation.
Le système d’équilibrage est plus fiable pour les jugements de rupture.
Il est possible de définir des périodes de temps négociables pour éviter des périodes d’impact comme la publication de données importantes.
Il existe des mécanismes de prévention des pertes qui permettent de contrôler les pertes individuelles.
Cette stratégie comporte aussi des risques:
Le risque d’une prise de position multiple est élevé et nécessite un soutien financier adéquat.
Une mauvaise configuration des paramètres peut entraîner des opérations de ligne ultra-courte. Les paramètres doivent être configurés correctement.
Le temps de sortie fixe peut manquer le gain de tendance de la dernière étape. Le suivi des arrêts de perte peut être configuré pour optimiser.
Le contrôle des coûts de détention peut être ajouté.
Le fait de ne pas prendre en compte le contrôle du nombre de positions peut conduire à une position unilatérale excessive.
Cette stratégie peut être optimisée dans les domaines suivants:
Augmentation de la perte de mouvement pour remplacer le temps de départ fixe.
En tenant compte de la position du jour au lendemain, ajouter la commission de la position et le contrôle des points de glissement.
En rejoignant le Stop Loss Tracker, vous pourrez profiter des gains de la dernière étape.
Le nombre de mains est ajusté en fonction de la position, le contrôle de la position unidirectionnelle.
Tester l’effet de différents paramètres sur différentes variétés et établir un mécanisme d’optimisation des paramètres.
Optimisation du point de rupture de test pour réduire les ruptures inutiles.
La stratégie de la ligne moyenne de déplacement à plusieurs niveaux permet de suivre la tendance et de réaliser des bénéfices grâce à l’entrée à plusieurs niveaux de la ligne moyenne. Le temps de négociation et le point d’arrêt sont mieux contrôlés par le risque. L’efficacité de la stratégie peut être encore améliorée par le contrôle des coûts de détention, l’optimisation des paramètres et l’optimisation des pertes.
/*backtest
start: 2022-09-16 00:00:00
end: 2023-09-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2019
//@version=4
strategy(title = "Noro's ShiftMA-multi Strategy v1.1", shorttitle = "ShiftMA-multi", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)
//Settings
long = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for long")
short = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
src = input(ohlc4, title = "MA Source")
shortlevel3 = input(15.0, title = "Short line 3")
shortlevel2 = input(10.0, title = "Short line 2")
shortlevel1 = input(5.0, title = "Short line 1")
longlevel1 = input(-5.0, title = "Long line 1")
longlevel2 = input(-10.0, title = "Long line 2")
longlevel3 = input(-15.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
fromyear = input(1900, defval = 1900, 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")
//Variables
size = strategy.position_size
mult = 1 / syminfo.mintick
//MA
ma = sma(src, len)
longline1 = long >= 1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 = long >= 2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close
longline3 = long >= 3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close
shortline1 = short >= 1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 = short >= 2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close
shortline3 = short >= 3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close
//Lines
colorlong1 = long >= 1 ? color.lime : na
colorlong2 = long >= 2 ? color.lime : na
colorlong3 = long >= 3 ? color.lime : na
colorshort1 = short >= 1 ? color.red : na
colorshort2 = short >= 2 ? color.red : na
colorshort3 = short >= 3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort1)
plot(shortline2, offset = offset, color = colorshort2)
plot(shortline1, offset = offset, color = colorshort3)
plot(ma, offset = offset, color = color.blue)
plot(longline1, offset = offset, color = colorlong1)
plot(longline2, offset = offset, color = colorlong2)
plot(longline3, offset = offset, color = colorlong3)
//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
lots = 0.0
needtime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
if ma > 0
lots := round(size / lot)
strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long >= 1 and needtime))
lots := round(size / lot)
strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long >= 2 and needtime))
lots := round(size / lot)
strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long >= 3 and needtime))
lots := round(size / lot)
strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short >= 1 and needtime))
lots := round(size / lot)
strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short >= 2 and needtime))
lots := round(size / lot)
strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short >= 3 and needtime))
if size > 0
strategy.entry("TPL", strategy.short, 0, limit = ma)
if size < 0
strategy.entry("TPS", strategy.long, 0, limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()