Stratégie de trading suivant le momentum


Date de création: 2023-12-20 16:06:26 Dernière modification: 2023-12-20 16:06:26
Copier: 0 Nombre de clics: 651
1
Suivre
1621
Abonnés

Stratégie de trading suivant le momentum

Aperçu de la stratégie

La stratégie de suivi de la dynamique est une stratégie de négociation automatisée basée sur la tendance de suivi de la dynamique du marché, combinée à une variété d’indicateurs techniques comme jugement auxiliaire. La stratégie analyse l’information de la ligne K pour déterminer la direction et l’intensité des capitaux dominants sur le marché actuel, puis envoie un signal de négociation combiné à des indicateurs techniques tels que l’indicateur de prix de la quantité, la moyenne mobile, etc.

Dans l’ensemble, la stratégie est adaptée pour le trading de tendances de moyenne et longue ligne, capte efficacement les tendances du marché, réduit la fréquence des transactions et cherche à obtenir des bénéfices unitaires plus élevés. En outre, après optimisation des paramètres de la stratégie, elle peut également être utilisée pour le trading de courte ligne.

Principe de stratégie

Le jugement dominant

Le cœur de la stratégie de suivi de la dynamique est de déterminer la direction des capitaux dominants du marché. La stratégie surveille la volatilité du marché en temps réel en calculant l’indicateur ATR. Lorsque la volatilité augmente, ce qui signifie que la dominance est en train de s’accumuler ou de s’allouer, la stratégie quitte temporairement le marché pour éviter la période pendant laquelle la dominance opère.

Lorsque la fluctuation s’atténue, ce qui représente l’accumulation ou la distribution de la dominance, la stratégie revient et juge la direction spécifique de la dominance. Le jugement est effectué en calculant la position de la pression de soutien du marché pour voir s’il y a des signes de rupture.

Jugement auxiliaire

Après avoir déterminé la direction de la force principale, la stratégie introduit également plusieurs indicateurs techniques auxiliaires pour une nouvelle vérification afin d’éviter les erreurs de jugement. Plus précisément, des indicateurs tels que MACD, KDJ sont calculés pour déterminer s’ils sont conformes à la direction de la force principale.

La stratégie n’ouvre une position que lorsque la direction principale et les indicateurs auxiliaires émettent des signaux de synchronisation. Cela contrôle efficacement la fréquence de négociation et n’entre en jeu que dans des cas de probabilité élevée.

Arrêt de perte et sortie

Une fois la position établie, la stratégie de suivi de la dynamique suit les variations de prix en temps réel et utilise l’expansion de la valeur ATR comme signal de stop. Cela signifie que le marché est de nouveau entré dans la phase d’opération principale et doit immédiatement être éliminé pour éviter d’être piégé.

En outre, si le cours dépasse une certaine limite, le redressement s’arrête également. Il s’agit d’un redressement technique normal, et le contrôle des risques nécessite un arrêt immédiat.

Avantages stratégiques

Une forte systématisation

Le plus grand avantage de la stratégie de suivi de la dynamique réside dans son haut degré de systématisation et de normalisation. La logique de la transaction est claire, il existe des principes et des règles clairs pour chaque entrée et sortie, il n’y a pas de transactions aléatoires.

Cela rend la stratégie très réplicable et permet aux utilisateurs de configurer des applications à long terme sans intervention humaine.

Le risque est maîtrisé

La stratégie intègre des mécanismes de contrôle du risque à plusieurs niveaux, tels que le jugement de force majeure, la vérification auxiliaire et la définition d’une ligne de frein, qui permettent de contrôler efficacement les risques non systémiques.

En particulier, la stratégie consiste à ouvrir une position uniquement en cas de probabilité élevée et à définir un stop loss scientifique afin d’éviter au maximum l’expansion des pertes. Cela garantit une croissance stable du capital.

Les bénéfices sont plus durables

Les stratégies de suivi dynamique ont une plus longue période de tenue de position et des gains plus élevés par rapport aux stratégies de courte ligne. Cela rend les gains globaux des stratégies plus stables et durables.

De plus, la stratégie de suivi des tendances à long et moyen terme permet de saisir la volatilité des tendances, ce qui est particulièrement visible dans les grandes tendances.

Alerte au risque

Les paramètres sont difficiles à optimiser

Les stratégies de suivi de la force impliquent un plus grand nombre de paramètres, tels que les paramètres ATR, les paramètres de rupture, les paramètres de rupture, etc. Il existe une certaine corrélation entre ces paramètres, qui nécessite des tests répétés pour trouver la combinaison optimale de paramètres.

Si les paramètres ne sont pas correctement configurés, cela peut entraîner une fréquence de transaction excessive ou un contrôle insuffisant des risques. Cela nécessite que l’utilisateur ait une certaine expérience d’optimisation de la stratégie.

La rupture est facile à piéger

Les stratégies de dominance et les signaux de l’indicateur reposent sur la confirmation de la rupture des prix. Cependant, les opérations de rupture sont sujettes à de fausses ruptures, ce qui entraîne une plus grande probabilité de prise de position.

Si une percée critique échoue, cela peut entraîner des pertes importantes. C’est une faiblesse intrinsèque de la stratégie.

Optimiser les idées

La mise en place de l’apprentissage automatique

Les algorithmes d’apprentissage automatique peuvent détecter la corrélation entre les paramètres pour trouver la combinaison optimale de paramètres. C’est beaucoup plus efficace que les tests manuels.

Plus précisément, on peut utiliser l’algorithme EnvironmentError, basé sur l’apprentissage par renforcement des paramètres de répétition continue, pour maximiser les gains de stratégie.

Ajouter un filtre

Il est possible d’ajouter d’autres filtres auxiliaires, tels que les indicateurs de volume de transactions, les indicateurs de flux de capitaux, etc., sur la base des indicateurs existants. Les signaux de rupture sont vérifiés trois ou quatre fois, ce qui est plus fiable.

Mais trop de filtres peuvent aussi conduire à des opportunités manquées, et il faut équilibrer l’intensité des filtres. De plus, les filtres eux-mêmes doivent également éviter la corrélation.

La convergence des stratégies

L’utilisation d’une stratégie de suivi de la dynamique en combinaison avec d’autres stratégies permet d’exploiter les avantages des différentes stratégies, d’obtenir une orthopédie et d’améliorer la stabilité globale.

Par exemple, la combinaison de stratégies de retournement à court terme et d’ouverture de retournement après une rupture peut permettre de verrouiller plus de bénéfices.

Résumer

La stratégie de suivi de la dynamique est une stratégie de suivi de tendance systématique recommandée dans l’ensemble. La logique de négociation est claire, les risques sont maîtrisés et le retour sur investissement est stable et efficace pour les utilisateurs.

Cependant, la stratégie elle-même présente certaines lacunes inhérentes, qui nécessitent que l’utilisateur ait la capacité d’optimiser les paramètres et de fusionner les stratégies pour en tirer le meilleur parti. Dans l’ensemble, la stratégie de suivi de la dynamique est un produit quantifié adapté aux amateurs de stratégies avec une certaine base de quantification.

Code source de la stratégie
/*backtest
start: 2023-12-12 00:00:00
end: 2023-12-15 01:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Created by frasmac2k Strategy credit to Alex Morris

//@version=5
strategy("Mechanical", shorttitle="MECH", overlay=true)

// Get the current date and time
currentYear = year
currentMonth = month
currentDay = dayofmonth

// Create a timestamp for the present date and time
currentTimestamp = timestamp(currentYear, currentMonth, currentDay)

// Define time interval for backtesting
dStart = input(timestamp('2023-07-01'), title='Set Start date', tooltip='Select a start date to run the script from')

// Define direction of strategy
direction = input.string('Forward',title='Direction', tooltip='Forward will go LONG on a Green anchor candle. Inverse will go short on a Green anchor candle and vice versa for Red candle', options=['Forward', 'Inverse'])

// Define the anchor hour as user input with a range of 0 to 23
anchorHour = input.int(11, title="Anchor Hour", tooltip='Set the hour to trade', minval=0, maxval=23)

// Define the take profit and stop loss in pips
takeProfitPips = input.int(10, title='Define TP Pips', tooltip='How many pips do you want to set TP. Choose a sensible value related to the instrument', minval=5)
stopLossPips = input.int(10,'Define SL Pips', tooltip='How many pips do you want to set SL. Choose a sensible value related to the instrument', minval=5)

// Define Tick size
tick10p = input.int(100, title='tick size', tooltip='Choose how many ticks equal 10 pips. This can vary by broker so measure 10 pips on the chart and select how many ticks that equates to. Forex is typically 100. Some instruments such as indices can be 1000', options=[100,1000])

// Declare TP/SL variables
var float takeProfit = na
var float stopLoss = na

// Calculate take profit and stop loss levels in ticks
if tick10p == 100
    takeProfit := takeProfitPips * 10
    stopLoss := stopLossPips * 10
if tick10p == 1000
    takeProfit := takeProfitPips * 100
    stopLoss := stopLossPips * 100

// Declare offset time
var int offset = na

if currentTimestamp > timestamp('2023-10-29')
    offset := 4
else
    offset := 5

//adjust for exchange time
anchorHour := anchorHour - offset

// Define the anchor hour as user input with a range of 0 to 23
tradeHour = anchorHour

// Define logical check for strategy date range
isStratTime = true

// Calculate the time condition for placing the order at the user-defined hour (start of the next hour)
isTradeTime = true

// Logic condition for forwards or inverse
isForward = direction == 'Forward'
isInverse = direction == 'Inverse'

// Declare entry condition variables
var bool longCondition = na
var bool shortCondition = na

// Declare and initialize variables for anchorCandle open and close prices
var float anchorOpen = na
var float anchorClose = na
var float tradeOpen = na
var float tradeClose = na

// Set logic by direction

if isForward
    // Strategy logic
    if isTradeTime and isStratTime
        //Obtain candle open/close
        anchorOpen := open
        anchorClose := close
        // Define entry conditions
        longCondition := anchorClose > anchorOpen
        shortCondition := anchorClose < anchorOpen
        
        // Entry logic
        if longCondition
            strategy.entry("Long", strategy.long)
            strategy.exit("Exit Long", from_entry="Long", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')
        if shortCondition
            strategy.entry("Short", strategy.short)
            strategy.exit("Exit Short", from_entry="Short", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')

if isInverse
    // Strategy logic
    if isTradeTime and isStratTime
        //Obtain candle open/close
        anchorOpen := open
        anchorClose := close
        // Define entry conditions
        shortCondition := anchorClose > anchorOpen
        longCondition := anchorClose < anchorOpen
        
        // Entry logic
        if longCondition
            strategy.entry("Long", strategy.long)
            strategy.exit("Exit Long", from_entry="Long", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')
        if shortCondition
            strategy.entry("Short", strategy.short)
            strategy.exit("Exit Short", from_entry="Short", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')

// Define the time range for the background shade
startHour = anchorHour
startMinute = 0
endHour = anchorHour
endMinute = 0

// Check if the current time is within the specified range
isInTimeRange = (hour == startHour and minute >= startMinute) or (hour == endHour and minute <= endMinute) or (hour > startHour and hour < endHour)

// Define the background color for the shade
backgroundColor = color.new(color.red, 90)

// Apply the background shade
bgcolor(isInTimeRange ? backgroundColor : na)