Stratégie de trading à limite de moyenne mobile multiple


Date de création: 2023-09-22 14:16:20 Dernière modification: 2023-09-22 14:16:20
Copier: 0 Nombre de clics: 641
1
Suivre
1617
Abonnés

Aperçu

Cette stratégie est basée sur la négociation de plusieurs ordres de plafonnement en fonction de la rupture de la ligne de parité. Elle établit un nombre différent d’offres en hausse ou en baisse en fonction de la rupture de la ligne de parité, formant ainsi une position de plafonnement pyramidale.

Principe de stratégie

Cette stratégie utilise les indicateurs de la ligne moyenne pour déterminer la direction de la tendance. Plus précisément, le nombre d’options de plafonnement est basé sur le fait que le prix a franchi la ligne moyenne des 3 lignes supérieures.

Ainsi, plus la tendance des prix est forte, plus les ordres de plafonnement sont orientés dans le même sens; lorsque les prix reçoivent un signal de revers, ils ouvrent la position en sens inverse. L’équilibre de l’axe central est utilisé pour juger de la rupture de la position et émettre un signal de plafonnement.

L’ensemble de la stratégie est constitué d’une méthode de négociation combinant une ouverture de position pyramidale et une ouverture de position de rupture. L’objectif est d’ouvrir des positions à prix moyen multiples, de réduire les coûts et de contrôler les risques.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. L’opération est simple et intuitive.

  2. Les positions pyramidales permettent d’obtenir de meilleurs coûts au début de la tendance.

  3. La perte d’une ligne moyenne sur l’axe central peut être arrêtée à temps pour contrôler le risque.

  4. Le prix de la position de plafonnement a été fixé pour éviter les points de glissement.

  5. Les paramètres peuvent être personnalisés pour s’adapter à différentes variétés.

  6. La structure est claire, facile à comprendre et à développer.

Analyse des risques

La stratégie présente également les risques suivants:

  1. Le retard de l’indicateur de la ligne moyenne peut entraîner une erreur de jugement.

  2. L’échec d’un ticket à prix limité peut entraîner la perte d’une entrée.

  3. La perte d’équilibre de l’axe médian peut être trop grossière pour permettre une percée Je ne peux pas le faire.

  4. Une mauvaise configuration des paramètres peut entraîner une position trop grande de la pyramide.

  5. Une gamme de temps de détection insuffisante peut entraîner une suradaptation de la courbe.

  6. Les frais ne sont pas pris en compte.

Les solutions pour gérer les risques sont les suivantes:

  1. Paramètres de confirmation et d’optimisation en combinaison avec d’autres indicateurs.

  2. Le prix du billet est ajusté en fonction de la période de validité.

  3. Réglez les arrêts sur l’axe central, ou ajoutez une logique de jugement de rupture.

  4. Paramètres d’optimisation pour évaluer le rapport bénéfice/perte

  5. Élargissement de la période de rétroaction, rétroaction multi-marchés.

  6. Les frais d’adhésion et la logique des points de glissement.

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Optimiser les paramètres pour s’adapter à plus de variétés.

  2. Ajouter une confirmation de filtrage d’autres indicateurs, tels que MACD, KDJ, etc.

  3. Logique d’arrêt est ajoutée sur la ligne médiane.

  4. Modifier dynamiquement le ratio d’ouverture et le stop loss.

  5. Optimiser le placement des quotas, améliorer les coûts. Par exemple, régler les prix en fonction de la marge de fluctuation.

  6. Augmenter la gestion des coûts et éviter les excès de recouvrement.

  7. Tester l’effet des paramètres de différentes variétés et construire des pools de paramètres.

Résumer

La stratégie est structurée de manière simple, claire, facile à comprendre et à étendre. Cependant, elle peut être améliorée en introduisant d’autres indicateurs, en optimisant les paramètres, en améliorant la logique du prix limite, etc.

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

//Noro
//2019

//@version=4
strategy(title = "Robot WhiteBox MultiMA", shorttitle = "Robot WhiteBox MultiMA", 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
size = strategy.position_size
mult = 1 / syminfo.mintick
needtime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)

//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 = long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 = long2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close
longline3 = long3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close
shortline1 = short1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 = short2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close
shortline3 = short3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close

//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]
lots = 0.0
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)
if size < 0
    strategy.entry("TPS", strategy.long, 0, limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()