Stratégie de négociation de suivi de l'élan

Auteur:ChaoZhang est là., Date: 2023-12-20 16h06:26
Les étiquettes:

img

Vue d'ensemble de la stratégie

La stratégie de trading de suivi de l'élan est une stratégie de trading automatisée qui suit principalement les tendances de l'élan du marché et utilise plusieurs indicateurs techniques comme jugements auxiliaires.

Dans l'ensemble, cette stratégie est adaptée au trading de tendance à moyen et à long terme, et peut capturer efficacement les tendances du marché et réduire la fréquence de trading pour poursuivre des bénéfices uniques plus élevés.

Principe de stratégie

Le jugement de la puissance principale

Le noyau de la stratégie de suivi de l'élan est de juger de la direction des principaux fonds du marché. La stratégie calcule l'indicateur ATR pour surveiller la volatilité du marché en temps réel. Lorsque la volatilité augmente, cela signifie que les principaux fonds s'accumulent ou se distribuent, et la stratégie sortira temporairement du marché pour éviter la période où les principaux fonds sont en activité.

Lorsque la volatilité s'affaiblit, cela signifie que l'accumulation ou l'allocation de la force principale est complète, et la stratégie rentrera sur le marché pour déterminer la direction spécifique de la force principale. La méthode de jugement consiste à calculer les positions de soutien et de pression du marché pour voir s'il y a des signes de percées.

Arrêt auxiliaire

Après avoir déterminé l'orientation des fonds principaux, la stratégie introduira également plusieurs indicateurs techniques auxiliaires à vérifier à nouveau afin d'éviter les erreurs d'appréciation.

Ce n'est que lorsque la direction des fonds principaux et des indicateurs auxiliaires émettent des signaux dans la même direction que la stratégie ouvre des positions.

Sortie de stop-loss

Après l'ouverture des positions, la stratégie de suivi de l'élan suivra les changements de prix en temps réel et utilisera l'expansion des valeurs ATR comme signal de stop-loss.

En outre, si le mouvement des prix dépasse une certaine fourchette puis retombe, un stop loss se produira également.

Les avantages de la stratégie

Systématisme élevé

Le plus grand avantage des stratégies de suivi de l'élan est leur haut degré de systématisation et de normalisation.

Cela rend la réplicabilité de cette stratégie très forte. Les utilisateurs peuvent l'appliquer pour une utilisation à long terme après configuration sans intervention manuelle.

Contrôle des risques

La stratégie comporte des mécanismes intégrés de contrôle des risques à plusieurs niveaux, tels que les jugements de puissance principale, la vérification auxiliaire, le réglage de la ligne de stop-loss, etc., qui peuvent contrôler efficacement les risques non systématiques.

Plus précisément, la stratégie n'ouvre des positions que dans des situations à forte probabilité et fixe des points d'arrêt scientifiques pour maximiser l'évitement des pertes.

Des rendements relativement durables

Comparativement aux stratégies à court terme, la durée de détention des stratégies de suivi de l'élan est plus longue et chaque bénéfice est plus élevé.

En outre, la stratégie suit les tendances à moyen et à long terme, ce qui permet de tenir pleinement compte de la volatilité des tendances.

Alertes au risque

Optimisation des paramètres difficile

La stratégie de suivi du momentum implique plusieurs paramètres, tels que les paramètres ATR, les paramètres de pénétration, les paramètres de stop loss, etc. Il existe une certaine corrélation entre ces paramètres, ce qui nécessite des tests répétés pour trouver la combinaison optimale de paramètres.

Une mauvaise configuration des paramètres peut facilement conduire à une fréquence de trading excessive ou à un contrôle insuffisant des risques.

Piège d'évasion

Lorsque la stratégie détermine les principaux signaux de puissance et d'indicateur, elle s'appuie sur la percée des prix pour la confirmer.

Si une percée clé échoue, elle peut entraîner des pertes plus importantes.

Directions d'optimisation

Introduction de l'apprentissage automatique

Les algorithmes d'apprentissage automatique peuvent être utilisés pour détecter automatiquement les corrélations entre les paramètres et trouver des combinaisons optimales de paramètres.

Plus précisément, l'algorithme EnvironmentError peut être utilisé pour itérer en continu des paramètres basés sur l'apprentissage par renforcement afin de maximiser les rendements de la stratégie.

Augmenter les filtres

Des filtres supplémentaires peuvent être introduits sur la base d'indicateurs existants, tels que les indicateurs du volume des transactions, les indicateurs des flux de capitaux, etc., afin de vérifier trois ou quatre fois les signaux de percée afin d'améliorer la fiabilité.

Mais trop de filtres peuvent aussi conduire à des opportunités manquées. L'intensité du filtre doit être équilibrée. En outre, les filtres eux-mêmes doivent également éviter la corrélation.

Fusion stratégique

Combiner la stratégie de suivi de l'élan avec d'autres stratégies pour tirer parti des forces des différentes stratégies afin d'atteindre l'orthogonalité et d'améliorer la stabilité globale.

Par exemple, l'intégration de stratégies d'inversion à court terme et l'ouverture de transactions inversées après des percées peuvent générer plus de bénéfices.

Résumé

En général, la stratégie de trading de suivi de l'élan est une stratégie de suivi de tendance systématisée qui vaut la peine d'être recommandée.

Mais la stratégie elle-même a aussi quelques faiblesses inhérentes. Elle exige que les utilisateurs aient la capacité d'optimiser les paramètres et d'intégrer des stratégies afin de maximiser l'efficacité de cette 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)



Plus de