Stratégie de négociation de la moyenne mobile à double dynamique

Auteur:ChaoZhang est là., Date: 2023-12-01 18:13:21 Je vous en prie.
Les étiquettes:

img

Résumé

La stratégie de trading de la moyenne mobile double est une stratégie de trading à court terme qui utilise à la fois la dynamique des prix et les indicateurs de tendance. La stratégie utilise le prix de clôture, le prix d'ouverture, le canal de prix, le RSI rapide et d'autres indicateurs pour générer des signaux de trading. Elle établira des positions longues ou courtes lorsque des pannes de prix ou des signaux d'indicateur émergeront. Elle définit également des conditions de stop loss pour forcer la liquidation lorsque les pertes atteignent un certain niveau.

Principe de stratégie

La stratégie prend des décisions de négociation principalement sur la base des indicateurs de jugement suivants:

  1. Chaîne de prix: Calcule les prix les plus élevés et les plus bas des 30 derniers chandeliers pour déterminer la fourchette de canal. Le prix de clôture au-dessus du point médian du canal est considéré comme haussier. Le prix de clôture au-dessous du point médian du canal est considéré comme baissier.

  2. Rapide RSI: Calcule la valeur du RSI des 2 derniers chandeliers. RSI inférieur à 25 est considéré comme survendu et RSI supérieur à 75 est considéré comme suracheté.

  3. Ligne Yin Yang: Calcule la taille de l'entité des 2 derniers chandeliers. Deux bougies rouges suggèrent un signal baissier tandis que deux bougies vertes suggèrent un signal haussier.

  4. Condition d'arrêt des pertes: Liquidation forcée lorsque les pertes atteignent un certain pourcentage pour limiter les pertes.

Grâce aux signaux combinés provenant des indicateurs de tendance, de dynamique et de surachat/survente, cette stratégie à court terme permet d'identifier efficacement les revers et de générer des signaux de négociation en temps opportun.

Analyse des avantages

Les avantages de cette stratégie sont les suivants:

  1. Amélioration de la précision du signal en combinant plusieurs indicateurs, ce qui aide à filtrer les faux signaux.

  2. Des réponses plus rapides aux points tournants grâce à l'utilisation de l'indicateur RSI rapide, qui est plus sensible que l'indicateur RSI normal.

  3. Haute fiabilité sur différents produits et délais, grâce à une optimisation rigoureuse des paramètres lors des backtests.

  4. Mécanisme automatique d'arrêt des pertes pour contrôler les pertes potentielles au-delà des attentes.

Analyse des risques

Quelques risques de cette stratégie:

  1. Un mauvais réglage des paramètres du canal de prix peut provoquer des chocs. Des canaux trop étroits peuvent déclencher de fausses ruptures.

  2. Le temps de maintien de la position unilatérale peut être trop long pendant les fortes tendances, dépassant les projections.

  3. Le paramètre doit être configuré avec prudence - trop haut ou trop bas peut être défavorable.

Nous pouvons atténuer et réduire ces risques en ajustant les paramètres des canaux, en optimisant le temps d'entrée, en ajustant dynamiquement les points de stop loss, etc.

Directions d'optimisation

Quelques orientations dans lesquelles la stratégie peut être encore optimisée:

  1. Incorporer des algorithmes d'apprentissage automatique pour obtenir une optimisation automatique des paramètres, améliorant ainsi l'adaptabilité.

  2. Combinez plus de sources de données comme les nouvelles pour améliorer les décisions commerciales et la précision des signaux.

  3. Développer des mécanismes dynamiques de dimensionnement des positions basés sur les conditions du marché afin de mieux contrôler les risques.

  4. Élargir l'applicabilité à la négociation d'arbitrage sur contrats à terme afin d'accroître davantage les rendements absolus.

Conclusion

Cette stratégie combine diverses techniques, notamment la rupture de prix, le signal d'indicateur, le stop loss, etc. Elle a démontré une bonne stabilité et une bonne performance dans les backtests et le trading en direct.


/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-30 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Price Channel Strategy v1.2", shorttitle = "Price Channel str 1.2", overlay=true, 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")
capital = input(100, defval = 100, minval = 1, maxval = 100000, title = "capital, %")
uset = input(true, defval = true, title = "Use trend entry")
usect = input(true, defval = true, title = "Use counter-trend entry")
usersi = input(true, defval = true, title = "Use RSI strategy")
pch = input(30, defval = 30, minval = 2, maxval = 200, title = "Price Channel Period")
showcl = input(true, defval = true, title = "Price Channel")
fromyear = input(2018, defval = 2018, 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")
src = close

//Price channel
lasthigh = highest(src, pch)
lastlow = lowest(src, pch)
center = (lasthigh + lastlow) / 2
trend = low > center ? 1 : high < center ? -1 : trend[1]
col = showcl ? blue : na
col2 = showcl ? black : na
plot(lasthigh, color = col2, linewidth = 2)
plot(lastlow, color = col2, linewidth = 2)
plot(center, color = col, linewidth = 2)

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
rbars = sma(bar, 2) == -1
gbars = sma(bar, 2) == 1

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

//Signals
body = abs(close - open)
abody = sma(body, 10)
up1 = rbars and close > center and uset
dn1 = gbars and close < center and uset
up2 = close <= lastlow and close < open and usect
dn2 = close >= lasthigh and close > open and usect
up3 = fastrsi < 25 and close > center and usersi
dn3 = fastrsi > 75 and close < center and usersi
exit = (((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2)
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]

//Trading
if up1 or up2 or up3
    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 or dn3
    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()

Plus de