Stratégie de négociation à risque contrôlé MACD

Auteur:ChaoZhang est là., Date: 2023-10-26 15h51 et 34 min
Les étiquettes:

img

Résumé

Cette stratégie conçoit une stratégie de trading à long terme qui contrôle le risque de chaque transaction en fonction de l'indicateur MACD. Par rapport aux stratégies traditionnelles de flipping long-short, cette stratégie se concentre davantage sur le contrôle du risque de chaque transaction. En calculant des niveaux de stop loss et de profit raisonnables et en définissant des tailles de position appropriées, elle limite la perte maximale pour chaque transaction. Cela peut contrôler efficacement les retraits et réaliser des profits stables à long terme.

Principaux

La stratégie calcule d'abord la ligne MACD et la ligne de signal de l'indicateur MACD. Lorsque la ligne MACD traverse au-dessus de la ligne de signal, elle est déterminée comme un signal d'achat. Pour filtrer les fausses ruptures, la stratégie nécessite un barsince ((crossover ((macd_line, signal_line)) <= 5, ce qui signifie que la rupture s'est produite dans les 5 barres les plus récentes. Elle nécessite également que les lignes MACD et de signal soient inférieures à 0, ce qui indique une condition de survente, et la fermeture au-dessus de la ligne WMA, ce qui indique une tendance à la hausse. Lorsque les conditions ci-dessus sont remplies, une position longue est ouverte.

Pour chaque transaction, la stratégie calcule des niveaux raisonnables de stop loss et de take profit. Le stop loss est défini au plus bas des 3 barres les plus récentes. Le take profit est défini au prix d'entrée plus 4 fois la distance entre le stop loss et le prix d'entrée.

La clé est que la stratégie calcule la taille de la position spécifique en fonction du risque maximal abordable. Le paramètre capital_risk définit le pourcentage du capital total qui peut être perdu pour chaque transaction. La taille de la position en USD est ensuite calculée en fonction de la plage de stop loss. Elle est ensuite convertie en contrats pour l'exécution.

Le risque de chaque transaction est contrôlé à 1% du capital total, ce qui permet de contrôler efficacement les retraits.

Les avantages

  • Le contrôle des risques est prioritaire, le risque par transaction est contrôlable
  • La taille des positions optimisée pour maximiser l'utilisation du capital
  • La stratégie de stop loss contrôle efficacement les retraits
  • Une prise de profit raisonnable permet un potentiel de profit élevé

Risques et améliorations

  • Le MACD a un retard, peut manquer les changements de tendance rapides
  • Les paramètres d'arrêt des pertes ou de prise de bénéfices inappropriés peuvent réduire les bénéfices ou augmenter le risque
  • Une fréquence de négociation élevée peut augmenter les coûts de transaction

Améliorations possibles:

  • Incorporer d'autres indicateurs pour déterminer la tendance, éviter le décalage MACD
  • Optimiser les algorithmes de stop loss et de profit pour être plus souples
  • Réduire la fréquence des transactions afin de réduire les coûts de transaction

Résumé

Cette stratégie détermine la direction de la tendance en utilisant le MACD, et prend le contrôle des risques comme la priorité pour le commerce avec une taille de position optimisée. Les clés sont le contrôle des risques et la taille de la position, ce qui peut réaliser des profits stables à long terme. Mais le MACD présente quelques défauts, et les mécanismes de stop loss/take profit ont besoin d'une optimisation supplémentaire.


/*backtest
start: 2022-10-19 00:00:00
end: 2023-10-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy( "McDonalds ", shorttitle="Ur Lovin' It", initial_capital=10000, default_qty_type=strategy.cash, currency=currency.USD )

capital_risk    = input( 1.0, "% capital risk per trade" ) / 100
r_exit          = input( 4.0, "Take Profit in 'R'" )
wma_length      = input( 150, 'WMA Bias Length' )

[macd_line, signal_line, hist ] = macd(close, 12, 26, 9)

w_line = wma( close, wma_length )

golong = barssince(crossover(macd_line, signal_line)) <= 5 and ( macd_line < 0 and signal_line < 0 ) and ( close > w_line ) and strategy.opentrades == 0

float stop = na
float tp = na

// For a stop, use a recent low 
stop := golong ? lowest(low, 3)[1] : stop[1]
range = abs(close - stop)
tp := golong ? close + (r_exit * range) : tp[1]


// This is the bit that calculates how much size to use so we only lose 1% of the `strategy.equity`
how_much_willing_to_lose = strategy.equity * capital_risk
// Spread the risk across the stop range 
position_size_in_usd = how_much_willing_to_lose / (range / close)
// Sized specified in base contract
position_size_in_contracts = position_size_in_usd / close

// Enter the position
if golong
    strategy.entry("long", strategy.long, qty=position_size_in_contracts)
    strategy.exit("long exit","long", stop=stop, limit=tp)

// experimental exit strategy
// hist_strength = hist >= 0 ? ( hist[1] < hist ? 'strong' : 'weak') : ( hist[1] < hist ? 'weak' : 'strong' )
// if hist < 0 and hist_strength == 'strong' and falling( hist, 8 )
//     strategy.close("long")


plot( strategy.equity,  color=strategy.equity > 10000 ? color.green : color.red, linewidth=2 )

Plus de