Indicateur de momentum combiné à une moyenne mobile pour faire une stratégie longue


Date de création: 2024-02-29 11:57:18 Dernière modification: 2024-02-29 11:57:18
Copier: 7 Nombre de clics: 536
1
Suivre
1617
Abonnés

Indicateur de momentum combiné à une moyenne mobile pour faire une stratégie longue

Aperçu

Cette stratégie est combinée avec l’indicateur de dynamique MACD et l’indicateur de tendance DMI pour effectuer plusieurs opérations en cas d’éligibilité. Ses sorties sont réglées avec des arrêts fixes et des arrêts de trailing volatiles personnalisés pour bloquer les gains.

Le principe

Les entrées de la stratégie dépendent des indicateurs MACD et DMI:

  • Si le MACD est positif (la ligne MACD est supérieure à la ligne Signal), cela indique une augmentation de la dynamique sur le marché
  • Lorsque le DI+ est supérieur au DI- dans le DMI, cela indique que le marché est en phase de tendance haussière

Lorsque les deux conditions ci-dessus sont réunies, il est préférable d’ouvrir un plus.

Les sorties de position ont deux critères:

  • Stop fixe: close Le pourcentage de hausse de prix atteignant le stop fixe
  • Tracking Stop Loss: utilise l’ATR et le prix le plus récent pour calculer une position d’arrêt dynamiquement ajustée. Cette position peut être appelée trailing stop loss en fonction de la volatilité du marché

Les avantages

  • La combinaison du MACD et du DMI permet de déterminer de manière plus fiable la direction de la tendance du marché et de réduire les erreurs
  • Les conditions de stop-loss combinent un stop-loss fixe et un stop-loss fluctuant, permettant de verrouiller les bénéfices de manière flexible

Les risques

  • Le MACD et le DMI peuvent générer de faux signaux, entraînant des pertes inutiles
  • Le blocage fixe peut empêcher de maximiser les bénéfices
  • Les trails avec une stagnation de la volatilité peuvent être mal réglés, trop radicaux ou conservateurs

Direction d’optimisation

  • On peut envisager d’ajouter d’autres indicateurs pour filtrer les signaux d’entrée, par exemple en utilisant l’indicateur KDJ pour déterminer s’il y a eu trop d’achat ou trop de vente
  • Différents paramètres peuvent être testés pour obtenir de meilleurs effets de stop-loss
  • Paramètres tels que les moyennes mobiles peuvent être ajustés en fonction de la variété de transaction spécifique, optimiser le système

Résumer

Cette stratégie intègre plusieurs indicateurs pour juger des tendances et des conditions du marché et intervient dans des situations où la probabilité de rentabilité est plus élevée. Les conditions de stop-loss sont également conçues de manière optimisée, en tenant compte de la flexibilité du blocage des gains tout en garantissant un certain profit. Grâce à l’ajustement des paramètres et à une gestion plus approfondie des risques, cette stratégie peut devenir un système de trading quantitatif avec une sortie stable.

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@version=4
strategy(shorttitle='(MACD + DMI Scalping with Volatility Stop',title='MACD + DMI Scalping with Volatility Stop by (Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)

// Works better on 3h, 1h, 2h, 4h

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true

// DMI and MACD inputs and calculations

[pos_dm, neg_dm, avg_dm] = dmi(14, 14)
[macd, macd_signal, macd_histogram] = macd(close, 12, 26, 9)


Take_profit= ((input (3))/100)

longTakeProfit = strategy.position_avg_price * (1 + Take_profit)

length = input(20, "Length", minval = 2)
src = input(close, "Source")
factor = input(2.0, "vStop Multiplier", minval = 0.25, step = 0.25)
volStop(src, atrlen, atrfactor) =>
    var max     = src
    var min     = src
    var uptrend = true
    var stop    = 0.0
    atrM        = nz(atr(atrlen) * atrfactor, tr)
    max         := max(max, src)
    min         := min(min, src)
    stop        := nz(uptrend ? max(stop, max - atrM) : min(stop, min + atrM), src)
    uptrend     := src - stop >= 0.0
    if uptrend != nz(uptrend[1], true)
        max    := src
        min    := src
        stop   := uptrend ? max - atrM : min + atrM
    [stop, uptrend]

[vStop, uptrend] = volStop(src, length, factor)


closeLong = close > longTakeProfit or crossunder(close, vStop)


//Entry 
strategy.entry(id="long", long = true, when = crossover(macd, macd_signal) and pos_dm > neg_dm and window())


//Exit
strategy.close("long", when = closeLong and window())