Basé sur la stratégie de l'indice de mouvement à double sens


Date de création: 2024-02-18 10:00:22 Dernière modification: 2024-02-18 10:00:22
Copier: 0 Nombre de clics: 620
1
Suivre
1617
Abonnés

Basé sur la stratégie de l’indice de mouvement à double sens

Aperçu

Cette stratégie génère un signal de transaction en calculant les indices de mouvement bidirectionnel DI+ et DI- ainsi que l’indice de direction moyenne ADX, en combinaison avec l’EMA des moyennes mobiles indicielles. Un signal de vente est généré lorsque DI+ est dépassé et que l’ADX est supérieur à 20; un signal de vente est généré lorsque DI+ est dépassé et que l’ADX est supérieur à 25; un signal de stop loss est généré lorsque DI+ est dépassé et que l’ADX est supérieur à 30.

Principe de stratégie

  1. Calculer le DI+, le DI- et l’ADX

    • Appel de la fonction ta.dmi () pour calculer le DI+, le DI- et l’ADX
    • DI+/DI- reflète la direction du prix
    • L’ADX reflète l’ampleur moyenne des variations de prix
  2. Calcul de l’indice des moyennes mobiles

    • Appeler la fonction personnalisée my_ema () pour calculer l’EMA
    • L’EMA peut aplanir efficacement les données sur les prix
  3. Signal de transaction généré

    • Signaux d’achat: DI+ sur le DI- et ADX> 20 et le cours de clôture> EMA
      • Les prix ont tendance à augmenter et à varier
    • Signaux de vente: DI- sous DI+ et ADX> 25 et prix de clôture < EMA
      • Les prix ont tendance à baisser et varient beaucoup
  4. Arrêt de la transaction

    • Acheter un arrêt de perte: DI+ sur le DI et ADX > 30
      • Le retour de la tendance des prix
    • Vente à la perte: DI+ inférieur à DI- et ADX > 30
      • Le retour de la tendance des prix

En résumé, la stratégie combine un indicateur de mouvement et un indicateur de tendance pour générer un signal de transaction lorsque la tendance des prix est forte. En même temps, les conditions de stop-loss limitent les pertes.

Analyse des avantages

  1. Utilisation du double DI pour éviter les faux signaux
    • Un seul DI est susceptible de générer des signaux erronés, la combinaison de DI+ et DI- assure la tendance
  2. Les conditions ADX assurent une plus grande fluctuation des prix
    • Pour éviter les chocs, ne négociez que lorsque les fluctuations de prix sont plus fortes
  3. Conditions de l’EMA avec le DI
    • L’EMA est efficace pour identifier les tendances à long terme des prix
  4. Conditions de mise en réserve strictes
    • La fin des pertes en temps opportun pour éviter des pertes énormes

Analyse des risques

  1. Arrêt fréquent
    • Si les tremblements de terre sont violents, les pertes sont trop fréquentes.
  2. Dépendance des paramètres
    • Les paramètres DI et ADX doivent être optimisés pour trouver la meilleure combinaison
  3. Fréquence de transaction faible
    • Des conditions plus strictes réduisent la fréquence des transactions

Il est possible d’optimiser la fréquence de négociation en augmentant le stop loss, en ajustant la combinaison de paramètres ou en ajoutant des conditions de filtrage supplémentaires.

Direction d’optimisation

  1. Optimisation des paramètres
    • Optimiser les paramètres DI et ADX pour trouver la meilleure combinaison de paramètres
  2. Ajouter un filtre
    • Filtrez les signaux de conditions telles que l’ajout d’une quantité de transaction, la déviation, etc.
  3. Élargissement de la marge de stop
    • Laissez les conditions de stop-loss appropriées et réduisez la fréquence de stop-loss

Résumer

La stratégie intègre des indicateurs de dynamisme et des indicateurs d’analyse de tendances pour générer des signaux de négociation lorsque les prix sont tendance. Des conditions de contrôle de risque de stop-loss strictes peuvent être définies. L’efficacité de la stratégie peut être encore améliorée par l’optimisation des paramètres, l’ajout de filtres de signal et l’élargissement approprié de la marge de stop-loss.

Code source de la stratégie
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Tamil_FNO_Trader

//@version=5
strategy("Overlay Signals by TFOT", overlay=true)

// Calculate DMI
len = input.int(14, minval=1, title="DI Length")
lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50)
[diplus, diminus, adx] = ta.dmi(len, lensig)

// Get EMA
emalen = input.int(26, minval=1, title = "EMA Length")
emasrc = input.source(close, title = "EMA Source")

my_ema(src, length) =>
    alpha = 2 / (length + 1)
    sum = 0.0
    sum := na(sum[1]) ? src : alpha * src + (1 - alpha) * nz(sum[1])
EMA2 = my_ema(emasrc, emalen)

// Variables
var bool buycondition1 = false
var bool sellcondition1 = false

var int firstbuybar = na
var int firstsellbar = na

var int buyexitbar = na
var int sellexitbar = na

var bool buyexit1 = false
var bool sellexit1 = false

// Buy & Sell Conditions
buycondition1 := (ta.crossover(diplus, diminus)) and (adx > 20) and (close > EMA2) and na(firstbuybar)
sellcondition1 := (ta.crossover(diminus, diplus)) and (adx > 25) and (close < EMA2) and na(firstsellbar)

buyexit1 := ta.crossover(diminus, diplus) and (adx > 30) and na(buyexitbar)
sellexit1 := ta.crossover(diplus, diminus) and (adx > 30) and na(sellexitbar)

if buycondition1
    if(na(firstbuybar))
        firstbuybar := bar_index
        buyexitbar := na
        firstsellbar := na
        strategy.entry("Buy", strategy.long)

if sellcondition1
    if(na(firstsellbar))
        firstsellbar := bar_index
        sellexitbar := na
        firstbuybar := na
        strategy.entry("Sell", strategy.short)

if buyexit1 and not na(firstbuybar)
    if(na(buyexitbar))
        buyexitbar := bar_index
        firstbuybar := na
        firstsellbar := na
        strategy.close("Buy")

if sellexit1 and not na(firstsellbar)
    if(na(sellexitbar))
        sellexitbar := bar_index
        firstsellbar := na
        firstbuybar := na
        strategy.close("Sell")

// Plot signals on chart
hl = input.bool(defval = true, title = "Signal Labels")

plotshape(hl and buycondition1 and bar_index == firstbuybar ? true : na, "Buy", style = shape.labelup, location = location.belowbar, color = color.green, text = "Buy", textcolor = color.white, size = size.tiny)
plotshape(hl and sellcondition1 and bar_index == firstsellbar ? true : na, "Sell", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell", textcolor = color.white, size = size.tiny)

plotshape(hl and buyexit1 and bar_index == buyexitbar ? true : na, "Buy Exit", style = shape.labelup, location = location.belowbar, color = color.red, text = "Buy X", textcolor = color.white, size = size.tiny)
plotshape(hl and sellexit1 and bar_index == sellexitbar ? true : na, "Sell Exit", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell X", textcolor = color.white, size = size.tiny)