Cette stratégie est basée sur le parallèle de négociation, par la définition de trois lignes d’entrée de plusieurs têtes et des têtes vides, pour réaliser plusieurs positions ouvertes à double sens, appartient à la stratégie de suivi de la tendance. Lorsque le prix franchit la ligne de parallèle, en ouvrant position faire plus de la courbe, par le biais de la suspension de l’ordre de réaliser l’entrée en lots.
Cette stratégie est principalement basée sur la rupture de la ligne moyenne pour juger de la direction de la tendance. Plus précisément, elle obtient un indicateur de la ligne moyenne en calculant la moyenne arithmétique du prix d’ouverture, du prix de clôture, du prix le plus élevé et du prix le plus bas.
Le nombre d’ordres de plus en plus vides augmente progressivement, permettant l’ouverture de lots par la configuration d’une liste de suspension. Par exemple, la ligne d’entrée 1 déclenche l’ouverture d’une main en plus / vide, la ligne d’entrée 2 déclenche l’ajout d’une main en plus, la ligne d’entrée 3 ajoute une main en plus. Cela permet de diversifier les coûts d’entrée et de réduire le risque de commandes individuelles.
La stratégie a également un mécanisme de compensation. Lorsque le montant de la position est inférieur à zéro, le stop loss est suivi en fonction du prix moyen, et si le prix revient au-dessus de la moyenne, le stop loss est annulé. Cela permet de bloquer une partie des bénéfices et de protéger les fonds.
Dans l’ensemble, la stratégie utilise les indicateurs de la ligne moyenne pour déterminer la direction de la tendance, maximiser la marge bénéficiaire par une ligne d’entrée à plusieurs niveaux, tout en réglant le risque de contrôle de l’arrêt de la perte, ce qui est typique de la stratégie de suivi de la tendance.
Cette stratégie présente les avantages suivants:
L’utilisation d’une ligne moyenne pour déterminer clairement la direction de la tendance. La ligne moyenne peut filtrer efficacement le bruit du marché pour déterminer la direction de la tendance principale.
Les lignes d’entrée à plusieurs niveaux permettent de tirer le meilleur parti de la zone de tendance. Grâce à plusieurs lignes d’entrée, il est possible de capturer au maximum toute la zone de tendance et d’élargir l’espace de profit.
La répartition des ordres permet de réduire le coût moyen de détention des positions.
La mise en place d’un mécanisme de compensation des pertes pour contrôler efficacement les risques. Grâce à des ordres de compensation des pertes, les pertes peuvent être arrêtées rapidement lorsque le prix revient au-dessous de la moyenne, évitant ainsi des pertes excessives.
La stratégie est claire et compréhensible, les paramètres sont flexibles et peuvent être optimisés pour différents marchés.
Cette stratégie comporte aussi des risques:
Probabilité d’erreur de la ligne moyenne. La ligne moyenne détermine le retard de la tendance et la probabilité d’erreur.
Le risque de perte en cas de renversement de la tendance. La stratégie est basée sur la tendance, ce qui entraînera des pertes plus importantes en cas de renversement de la tendance.
Les lignes d’entrée sont trop serrées, ce qui augmente la fréquence des transactions et le coût des points de glissement.
Le risque de concentration des positions est accru lorsque les positions sont détenues en lots.
Le point d’arrêt n’est pas défini de manière raisonnable, il peut s’arrêter trop tôt ou trop petit.
Les mesures de gestion des risques correspondantes:
Optimiser les paramètres de la moyenne et choisir la moyenne périodique appropriée.
Attention aux indicateurs techniques importants, analysez les signaux de reprise de tendance et arrêtez les pertes en temps opportun.
Adaptation de la distance de réglage de la ligne d’arrivée pour réduire la fréquence des transactions.
Optimisation de la taille et du ratio des positions et contrôle des risques de concentration.
Test et optimisation des points de rupture pour réduire le risque de rupture.
Cette stratégie peut être optimisée dans les domaines suivants:
Tester différents paramètres de la moyenne et sources de données, choisir le meilleur indicateur de la moyenne pour déterminer l’effet de la tendance.
Optimiser le rapport entre la distance et le nombre de positions des lignes d’entrée multiples pour trouver les paramètres optimaux.
Combinez avec d’autres indicateurs comme conditions de filtrage, pour éviter que la ligne égale émette un faux signal. Comme le MACD, le RSI, etc.
Optimisation de la position de la ligne d’arrêt, il est également possible de régler le point d’arrêt en fonction de la dynamique ATR.
Augmenter le jugement sur le renversement de tendance et mettre en place des conditions de fermeture complète des positions.
Les paramètres permettent d’optimiser la stratégie en fonction des différentes périodes du marché.
Augmentation de la fonction d’ajustement dynamique du nombre de positions, déterminant le nombre de joueurs ouverts en fonction du taux d’utilisation des fonds.
Cette stratégie utilise une ligne uniforme pour déterminer la direction de la tendance et la principale source de profit est le comportement de la tendance. En entrant à plusieurs niveaux et en ouvrant des positions par lots, il est possible de saisir efficacement la tendance et d’élargir la zone de profit.
/*backtest
start: 2022-09-19 00:00:00
end: 2023-09-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2019
//@version=4
strategy(title = "Robot WhiteBox Iceberg", shorttitle = "Robot WhiteBox Iceberg", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)
//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
s = input(defval = "7. OHLC4", options = ["1. Open", "2. High", "3. Low", "4. Close", "5. HL2", "6. HLC3", "7. OHLC4", "8. OC2", "9. PCMA"], title = "Data")
short3 = input(true, title = "short 3")
short2 = input(true, title = "short 2")
short1 = input(true, title = "short 1")
long1 = input(true, title = "long 1")
long2 = input(true, title = "long 2")
long3 = input(true, title = "long 3")
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
lots = 0.0
size = strategy.position_size
mult = 1 / syminfo.mintick
needtime = true
//MA
oc2 = (open + close) / 2
pcma = (highest(high, len) + lowest(low, len)) / 2
src = s == "1. Open" ? open : s == "2. High" ? high : s == "3. Low" ? low : s == "4. Close" ? close : s == "5. HL2" ? hl2 : s == "6. HLC3" ? hlc3 : s == "7. OHLC4" ? ohlc4 : s == "8. OC2" ? oc2: close
sma = sma(src, len)
ma = s == "9. PCMA" ? round(pcma * mult) / mult : round(sma * mult) / mult
//Levels
longline1 = 0.0
longline2 = 0.0
longline3 = 0.0
shortline1 = 0.0
shortline2 = 0.0
shortline3 = 0.0
longline1 := long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 := lots[1] == 0 ? long2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close : longline2[1]
longline3 := lots[1] == 0 ? long3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close : longline3[1]
shortline1 := short1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 := lots[1] == 0 ? short2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close : shortline2[1]
shortline3 := lots[1] == 0 ? short3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close : shortline3[1]
//Lines
colorlong1 = long1 ? color.lime : na
colorlong2 = long2 ? color.lime : na
colorlong3 = long3 ? color.lime : na
colorshort1 = short1 ? color.red : na
colorshort2 = short2 ? color.red : na
colorshort3 = short3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort3, title = "Short line 3")
plot(shortline2, offset = offset, color = colorshort2, title = "Short line 2")
plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1")
plot(ma, offset = offset, color = color.blue, title = "MA line")
plot(longline1, offset = offset, color = colorlong1, title = "Long line 1")
plot(longline2, offset = offset, color = colorlong2, title = "Long line 2")
plot(longline3, offset = offset, color = colorlong3, title = "Long line 3")
//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if ma > 0
lots := round(size / lot)
strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long1 and needtime))
lots := round(size / lot)
strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long2 and needtime))
lots := round(size / lot)
strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long3 and needtime))
lots := round(size / lot)
strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short1 and needtime))
lots := round(size / lot)
strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short2 and needtime))
lots := round(size / lot)
strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short3 and needtime))
if size > 0
strategy.entry("TPL", strategy.short, 0, limit = ma, when = needtime)
if size < 0
strategy.entry("TPS", strategy.long, 0, limit = ma, when = needtime)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()
strategy.cancel("L1")
strategy.cancel("L2")
strategy.cancel("L3")
strategy.cancel("S1")
strategy.cancel("S2")
strategy.cancel("S3")
strategy.cancel("TPL")
strategy.cancel("TPS")