Stratégie ADR croisée de l'EMA - Méthode de négociation multidimensionnelle basée sur des indicateurs techniques avec une gestion stricte des risques

Auteur:ChaoZhang est là., Date: 2024-03-28 16:46:29 Je vous en prie.
Les étiquettes:

img

Résumé

La stratégie EMA Cross ADR est une stratégie de trading quantitative basée sur la plateforme TradingView. Elle combine plusieurs indicateurs techniques pour déterminer les tendances, filtrer les signaux et définir les niveaux de stop-loss et de take-profit. La stratégie utilise deux moyennes mobiles exponentielles (MAE) avec des périodes différentes pour identifier la tendance principale, utilise la plage quotidienne moyenne (ADR) comme filtre de volatilité et définit dynamiquement les niveaux de stop-loss et de take-profit en fonction d'un ratio risque-rendement. En outre, la stratégie intègre des mesures de gestion des risques telles qu'une fenêtre de temps de négociation, des arrêts de rentabilité et une limite de perte maximale quotidienne, visant à capturer les opportunités de tendance tout en contrôlant strictement le risque à la baisse.

Principes de stratégie

  1. Double EMA Crossover: La stratégie utilise deux EMA avec des périodes différentes pour déterminer la tendance. Lorsque l'EMA à court terme franchit le niveau supérieur de l'EMA à long terme, il est considéré comme une tendance haussière, générant un signal long; inversement, lorsque l'EMA à court terme franchit le niveau inférieur de l'EMA à long terme, il est considéré comme une tendance baissière, générant un signal court.

  2. Filtre de volatilité ADR: afin d'éviter de générer des signaux de négociation dans des environnements à faible volatilité, la stratégie introduit l'indicateur ADR comme filtre de volatilité.

  3. Fenêtre de temps de négociation: La stratégie permet aux utilisateurs de définir les heures de début et de fin pour le trading quotidien. Les transactions ne sont exécutées que dans la fenêtre de temps spécifiée, ce qui aide à éviter les périodes illiquides ou très volatiles.

  4. L'option de prise de profit et de stop-loss dynamique: la stratégie calcule dynamiquement les prix de prise de profit et de stop-loss en fonction des prix moyens les plus élevés et les plus bas des N bougies les plus récentes, combinés à un ratio risque-rendement prédéfini.

  5. Stop au seuil de rentabilité: lorsqu'une position atteint un certain niveau de profit (ratio risque-rendement défini par l'utilisateur), la stratégie déplace le stop-loss au seuil de rentabilité (prix d'entrée).

  6. Limite de perte quotidienne maximale: Pour contrôler la perte maximale par jour, la stratégie fixe une limite de perte quotidienne. Une fois que la perte quotidienne atteint cette limite, la stratégie cesse de négocier jusqu'à l'ouverture du jour suivant.

  7. Fermer toutes les positions à la fin de la journée: indépendamment du fait que les positions aient atteint les niveaux de prise de profit ou de stop-loss, la stratégie ferme toutes les positions à une heure fixe chaque jour de négociation (par exemple, à 16h00) afin d'éviter le risque du jour au lendemain.

Analyse des avantages

  1. Une forte capacité de suivi des tendances: en utilisant des croisements doubles de l'EMA pour déterminer les tendances, la stratégie peut capturer efficacement les principales tendances du marché, améliorant ainsi le taux de réussite et le potentiel de profit.

  2. Une bonne adaptabilité à la volatilité: l'introduction de l'indicateur ADR en tant que filtre de volatilité permet d'éviter des opérations fréquentes dans des environnements à faible volatilité, réduisant les pertes causées par des signaux non valides et des fausses ruptures.

  3. Contrôle strict des risques: la stratégie définit des mesures de contrôle des risques à partir de plusieurs dimensions, y compris des arrêts de perte et des prises de bénéfices dynamiques, des arrêts de rentabilité et des limites de perte quotidiennes maximales, contrôlant efficacement le risque à la baisse et améliorant les rendements ajustés au risque.

  4. Paramètres flexibles: les différents paramètres de la stratégie, tels que les périodes EMA, la durée ADR, le ratio risque/rendement, la fenêtre de temps de négociation, etc., peuvent être réglés de manière flexible en fonction des préférences des utilisateurs et des caractéristiques du marché afin d'optimiser les performances de la stratégie.

  5. Haut degré d'automatisation: la stratégie est basée sur la plateforme TradingView et la logique de trading est entièrement exécutée par le programme, ce qui réduit l'interférence des émotions humaines et des jugements subjectifs, ce qui favorise le fonctionnement stable à long terme de la stratégie.

Analyse des risques

  1. Risque d'optimisation des paramètres: Bien que les paramètres de la stratégie puissent être ajustés de manière flexible, une optimisation excessive peut entraîner un surajustement et de mauvaises performances hors échantillon.

  2. Risque d'événement soudain: la stratégie se négocie principalement sur la base d'indicateurs techniques et peut ne pas réagir suffisamment à certains événements fondamentaux soudains majeurs, tels que des changements de politique ou des fluctuations significatives des données économiques, entraînant des retires importants.

  3. Risque d'inversion de tendance: au cours des périodes clés d'inversion de tendance, les signaux croisés de la double EMA peuvent être retardés, ce qui entraîne la perte du meilleur moment pour établir des positions ou des pertes au début d'un renversement de tendance.

  4. Risque de liquidité: bien que la stratégie fixe une fenêtre de temps de négociation, si la liquidité des instruments négociés est faible, elle peut encore faire face à des risques tels que des dérapages et des retards de négociation, ce qui affecte les performances de la stratégie.

  5. Risque d'échec des indicateurs techniques: la stratégie repose fortement sur des indicateurs techniques. Si les conditions du marché changent de manière significative, ce qui fait perdre aux indicateurs leur signification initiale, l'efficacité de la stratégie peut diminuer.

Directions d'optimisation

  1. Introduction d'indicateurs plus dimensionnels: sur la base des EMA et des ADR doubles existants, envisager l'introduction d'indicateurs techniques plus efficaces, tels que le MACD et le RSI, afin d'améliorer la fiabilité et la robustesse des signaux.

  2. Optimisation dynamique des paramètres: établir un mécanisme d'optimisation des paramètres qui ajuste dynamiquement les paramètres clés de la stratégie en fonction des différents états du marché (tels que les tendances ou les oscillations) afin de s'adapter aux changements du marché.

  3. Incorporer des facteurs fondamentaux: Prendre en considération certains indicateurs fondamentaux importants, tels que les données économiques et les orientations des politiques, qui peuvent aider la stratégie à mieux comprendre les tendances du marché et à éviter les risques systémiques en temps opportun.

  4. Améliorer les mécanismes d'arrêt des pertes et de prise de bénéfices: optimiser davantage la logique d'arrêt des pertes et de prise de bénéfices sur la base de l'arrêt des pertes et de prise de bénéfices dynamiques existants, tels que l'introduction d'arrêts de retard et de prises de bénéfices partielles, afin de mieux protéger les bénéfices et contrôler les risques.

  5. Plusieurs instruments et délais: étendre la stratégie à plusieurs instruments et délais de négociation et améliorer l'adaptabilité et la stabilité de la stratégie grâce à une diversification des investissements et à l'optimisation des délais.

Résumé

La stratégie EMA Cross ADR est une stratégie de trading quantitative basée sur l'analyse technique. Elle détermine les tendances par le biais de doubles croisements EMA et utilise l'indicateur ADR pour filtrer la volatilité. La stratégie définit également des mesures strictes de contrôle des risques, y compris le stop-loss dynamique et le take-profit, les break-even stops et les limites de perte quotidiennes maximales pour contrôler le risque à la baisse. Les avantages de la stratégie résident dans sa forte capacité de suivi des tendances, une bonne adaptabilité à la volatilité, un contrôle strict des risques, des paramètres flexibles et un haut degré d'automatisation. Cependant, elle comporte également certains risques, tels que le risque d'optimisation des paramètres, le risque d'événement soudain, le risque d'inversion de tendance, le risque de liquidité et le risque d'échec des indicateurs techniques.


/*backtest
start: 2024-02-26 00:00:00
end: 2024-03-27 00:00:00
period: 2h
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/
// © Sameh_Hussein

//@version=5
strategy('EMA Cross ADR Strategy with Stats', overlay=true)

// Adjustable Parameters
shortEmaLength = input(10, title='Short EMA Length')
longEmaLength = input(50, title='Long EMA Length')
adrLength = input(14, title='ADR Length')
riskRewardRatio = input(2.0, title='Risk/Reward Ratio')
lookbackCandles = input(10, title='Lookback Candles for Stop Loss')
startTime = input(0900, title='Start Time')
endTime = input(1600, title='End Time')
minAdrValue = input(10, title='Minimum ADR Value for Entry')
breakEvenProfit = input.float(1.0, title='Break-Even Profit', minval=0.0)
breakEvenRR = input.float(1.0, title='Break-Even Risk-Reward Ratio', minval=0.0)
dailyLossLimit = input(-2000.0, title='Daily Loss Limit')

// Exponential Moving Averages
shortEma = ta.ema(close, shortEmaLength)
longEma = ta.ema(close, longEmaLength)

// Average Daily Range
adr = ta.sma(ta.tr, adrLength)

// Time Filter Function
timeFilter() => true

// Entry Conditions with ADR filter
longCondition = ta.crossover(shortEma, longEma) and timeFilter() and adr > minAdrValue
shortCondition = ta.crossunder(shortEma, longEma) and timeFilter() and adr > minAdrValue

// Calculate the average low and average high of the previous 'lookbackCandles' candles
averageLow = ta.sma(low, lookbackCandles)
averageHigh = ta.sma(high, lookbackCandles)

// Risk and Reward Calculation
stopLossLong = averageLow
takeProfitLong = close + (close - averageLow) * riskRewardRatio
stopLossShort = averageHigh
takeProfitShort = close - (averageHigh - close) * riskRewardRatio

// Entry Control Variables
var longEntryAllowed = true
var shortEntryAllowed = true

// Update entry price on trade execution
var float entryPriceLong = na
var float entryPriceShort = na

if (strategy.position_size > 0)
    if (strategy.position_size[1] <= 0)
        entryPriceLong := strategy.opentrades.entry_price(strategy.opentrades - 1)
    else
        entryPriceLong := entryPriceLong
else
    entryPriceLong := na

if (strategy.position_size < 0)
    if (strategy.position_size[1] >= 0)
        entryPriceShort := strategy.opentrades.entry_price(strategy.opentrades - 1)
    else
        entryPriceShort := entryPriceShort
else
    entryPriceShort := na

// Adjust stop loss to break-even plus the defined profit when the specified risk-reward ratio is reached
breakEvenTriggerLong = entryPriceLong + (entryPriceLong - stopLossLong) * breakEvenRR
breakEvenTriggerShort = entryPriceShort - (stopLossShort - entryPriceShort) * breakEvenRR

if (longEntryAllowed and close >= breakEvenTriggerLong)
    stopLossLong := entryPriceLong + breakEvenProfit

if (shortEntryAllowed and close <= breakEvenTriggerShort)
    stopLossShort := entryPriceShort - breakEvenProfit

// Close all trades at 1600
if (hour == 15 and minute == 59)
    strategy.close_all(comment='Close at 1600')

// Define the daily loss variable and last trade day
var float[] dailyLossArray = array.new_float(1, 0.0)
var int[] lastTradeDayArray = array.new_int(1, na)

// Function to update the daily loss
updateDailyLoss() =>
    _dailyLoss = array.get(dailyLossArray, 0)
    _lastTradeDay = array.get(lastTradeDayArray, 0)
    if na(_lastTradeDay) or dayofmonth != _lastTradeDay
        _dailyLoss := 0.0
        array.set(lastTradeDayArray, 0, dayofmonth)
    if not na(strategy.closedtrades.entry_bar_index(strategy.closedtrades - 1))
        _dailyLoss += strategy.closedtrades.profit(strategy.closedtrades - 1)
    array.set(dailyLossArray, 0, _dailyLoss)

// Call the function to update the daily loss
updateDailyLoss()

// Execute Strategy
if longCondition and longEntryAllowed
    strategy.entry('Long', strategy.long)
    strategy.exit('Take Profit/Stop Loss', 'Long', stop=stopLossLong, limit=takeProfitLong)
    longEntryAllowed := false

if shortCondition and shortEntryAllowed
    strategy.entry('Short', strategy.short)
    strategy.exit('Take Profit/Stop Loss', 'Short', stop=stopLossShort, limit=takeProfitShort)
    shortEntryAllowed := false

// Reset entry control variables on position close
if strategy.position_size == 0
    longEntryAllowed := true
    shortEntryAllowed := true

// // Statistics
// winRate = strategy.wintrades / strategy.closedtrades * 100
// totalTrades = strategy.closedtrades
// averageProfit = strategy.grossprofit / strategy.wintrades
// averageLoss = strategy.grossloss / strategy.losstrades

// // Plotting
// plot(shortEma, color=color.new(color.red, 0), title='Short EMA')
// plot(longEma, color=color.new(color.blue, 0), title='Long EMA')

// // Display Table
// table statsTable = table.new(position=position.top_right, columns=2, rows=4, bgcolor=color.gray, border_width=1)
// table.cell(statsTable, column=0, row=0, text='Win Rate (%)', bgcolor=color.blue)
// table.cell(statsTable, column=1, row=0, text=str.tostring(winRate), bgcolor=color.blue)
// table.cell(statsTable, column=0, row=1, text='Total Trades', bgcolor=color.blue)
// table.cell(statsTable, column=1, row=1, text=str.tostring(totalTrades), bgcolor=color.blue)
// table.cell(statsTable, column=0, row=2, text='Average Profit', bgcolor=color.blue)
// table.cell(statsTable, column=1, row=2, text=str.tostring(averageProfit), bgcolor=color.blue)
// table.cell(statsTable, column=0, row=3, text='Average Loss', bgcolor=color.blue)
// table.cell(statsTable, column=1, row=3, text=str.tostring(averageLoss), bgcolor=color.blue)


Plus de