Système de suivi des tendances de réglage de position dynamique


Date de création: 2024-01-26 14:41:08 Dernière modification: 2024-01-26 14:41:08
Copier: 0 Nombre de clics: 616
1
Suivre
1617
Abonnés

Système de suivi des tendances de réglage de position dynamique

Aperçu

Cette stratégie utilise une combinaison de deux stratégies de négociation de systèmes populaires, le système de croisement des moyennes mobiles des indices et le système de négociation de la mer. Le système est spécialement conçu pour les périodes de la ligne solaire et suit les tendances du marché en temps réel en ajustant dynamiquement les positions.

Principe de stratégie

La stratégie comprend deux types de stratégies: les stratégies de tendance et les stratégies de rupture.

Les stratégies de tendance utilisent un croisement d’EMA rapides et d’EMA lentes comme signal de négociation. La longueur des cycles d’EMA rapides est définie par l’utilisateur et la longueur des cycles d’EMA lentes est cinq fois supérieure à celle des EMA rapides. Le signal est obtenu par la différence entre les EMA rapides et les EMA lentes divisée par la différence standard du taux de rendement de 252 cycles, ce qui produit un signal de négociation plus fiable après ajustement du taux de volatilité.

La stratégie de rupture utilise la moyenne des prix les plus élevés et les plus bas d’une période fixe comme référence. Elle génère un signal de survente ou de dépréciation lorsque le prix augmente ou diminue par rapport à la référence au-delà d’une certaine marge.

Les ajustements de position sont calculés en fonction de la volatilité récente des prix et des objectifs de risque annualisés définis par l’utilisateur. Les positions sont plus importantes lorsque la volatilité est faible et les positions sont plus petites lorsque la volatilité est élevée. La gestion dynamique des positions après ajustement des risques.

Le stop loss est basé sur le multiplicateur de l’amplitude d’onde réelle. Le stop loss suit le recouvrement mobile basé sur le prix le plus élevé et le prix le plus bas.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. La combinaison de deux sous-stratégies de suivi des tendances et de rupture permet une commutation adaptative dans différents environnements de marché, avec une robustesse élevée.

  2. L’application de techniques avancées de gestion des positions et de contrôle des risques permet d’ajuster dynamiquement les positions et de contrôler efficacement les risques.

  3. L’utilisation de la volatilité réelle et des objectifs de risque annualisés pour ajuster les positions permet d’obtenir un niveau de risque de portefeuille relativement stable dans des marchés à forte ou faible volatilité.

  4. En définissant une position de stop loss en fonction de la fluctuation réelle des prix, il est possible d’éviter efficacement les petites pertes inutiles causées par le stop loss.

  5. La position de suivi des pertes peut être ajustée en temps réel, ce qui permet de suivre la tendance de manière flexible pour gagner de l’argent, et d’arrêter les pertes en temps opportun.

Analyse des risques

Les principaux risques de cette stratégie sont les suivants:

  1. L’optimisation dépend des paramètres, les différents paramètres ont une grande influence sur la performance de la stratégie et nécessitent des tests complets pour obtenir les meilleurs paramètres.

  2. Le suivi des arrêts peut être trop fréquent dans la tendance de la secousse. L’amplitude des arrêts peut être assouplie de manière appropriée et le mécanisme d’arrêt optimisé.

  3. Les techniques de gestion de position et de contrôle des risques sont sensibles au capital initial et aux coûts de transaction. Des fonds initiaux trop faibles et des coûts de transaction trop élevés peuvent affecter la rentabilité de la stratégie.

  4. La stratégie de fixation des objectifs de risque annualisé et de l’effet de levier maximal dépend de la volatilité correctement évaluée de l’indicateur. Une évaluation inexacte de la volatilité peut entraîner une position trop grande ou trop petite.

Direction d’optimisation

Les principaux axes d’optimisation de la stratégie sont les suivants:

  1. La recherche de la combinaison optimale des paramètres. Les paramètres optimaux peuvent être trouvés en faisant appel à plus de données historiques.

  2. Amélioration des mécanismes de freinage des pertes. Des formes de freinage telles que le freinage mobile, le freinage temporel et le freinage de choc peuvent être testées et des stratégies de freinage optimisées.

  3. Optimisation des positions et gestion des risques. Différents objectifs de risque peuvent être testés pour trouver le meilleur ensemble de risques et de gains. L’impact de différents niveaux de levier peut également être testé.

  4. Essayez d’autres indicateurs auxiliaires. D’autres indicateurs techniques peuvent être ajoutés pour améliorer l’exactitude du signal et la robustesse de la stratégie.

  5. Tester différents cycles de détention. Vous pouvez essayer d’utiliser des décisions d’aide à un cycle plus élevé pour améliorer l’exactitude de la configuration de la position.

Résumer

Cette stratégie intègre le suivi de la tendance et la tendance à briser les deux grandes catégories de stratégies de négociation, l’utilisation de la technologie de gestion de position dynamique avancée, la réalisation de la position de détention ajustée au risque, peut contrôler efficacement le risque tout en suivant les mouvements du marché, la rentabilité est forte, il vaut la peine de tester et d’optimiser.

Code source de la stratégie
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
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/
// © Crunchster1

//@version=5
strategy(title="Crunchster's Turtle and Trend System", shorttitle="Turtle Trend", overlay=true, slippage=10, pyramiding=1, precision = 4, calc_on_order_fills = false, calc_on_every_tick = false, default_qty_value = 0.1, initial_capital = 1000, commission_value = 0.06, process_orders_on_close = true)

// Inputs and Parameters
src = input(close, 'Source', group='Strategy Settings')
length = input.int(title="Lookback period for fast EMA", defval=10, minval=2, group='Strategy Settings', tooltip='This sets the lookback period for the fast exponential moving average. The slow EMA is 5x the fast EMA length')
blength = input.int(title="Lookback period for Breakout", defval=20, minval=5, step=5, group='Strategy Settings')

long = input(true, 'Long', inline='08', group='Strategy toggle')
short = input(true, 'Short', inline='08', group='Strategy toggle', tooltip='Toggle long/short strategy on/off')

EMAwt = input(false, 'Trend', inline='01', group='Strategy toggle')
breakwt = input(true, 'Breakout', inline='01', group='Strategy toggle', tooltip='Toggle trend/breakout strategy on/off')

stopMultiple = input.float(2, 'Stop multiple', step=0.5, group='Risk Management Settings', tooltip='Multiple for ATR, setting hard stop loss from entry price')
trail = input.int(10, 'Trail lookback', step=5, group='Risk Management Settings', tooltip='Lookback period for the trailing stop')
lev = input.float(1, 'Max Leverage', step=0.5, group='Risk Management Settings', tooltip='Max leverage sets maximum allowable leverage of total capital (initial capital + any net profit), capping maximum volatility adjusted position size')
riskT = input.float(15, maxval=75, title='Annualised Volatility Target %', group='Risk Management Settings', tooltip='Specify annual risk target, used to determine volatility adjusted position size. Annualised daily volatility is referenced to this value and position size adjusted accordingly')
comp = input(true, 'Compounding', inline='09', group='Risk Management Settings')
Comppct = input.float(50, '%', step=5, inline='09', group='Risk Management Settings', tooltip='Toggle compounding of profit, and set % of profit to compound')

// Backtesting period
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31, inline='04', group='Backtest range')
FromMonth = input.int(defval=1, title='From Mon', minval=1, maxval=12, inline='04', group='Backtest range')
FromYear = input.int(defval=2018, title='From Yr', minval=1900, inline='04', group='Backtest range', tooltip='Set start of backtesting period')
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31, inline='05', group='Backtest range')
ToMonth = input.int(defval=1, title='To Mon', minval=1, maxval=12, inline='05', group='Backtest range')
ToYear = input.int(defval=9999, title='To Yr', minval=1900, inline='05', group='Backtest range', tooltip='Set end of backtesting period')

start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window = time >= start and time <= finish

// Breakout strategy
lower = ta.lowest(low[1], blength)
upper = ta.highest(high[1], blength)
basis = math.avg(upper, lower)
signal = 20*(close - basis) / (upper - lower)

// Trend strategy
fEMA = ta.ema(close[1], length)
sEMA = ta.ema(close[1], length*5)
emadiff = fEMA - sEMA
nemadiff = 5*emadiff/(ta.stdev(close - close[1], 252))

//Risk Management formulae
strategy.initial_capital = 50000
tr = math.max(high - low, math.abs(high - close), math.abs(low - close)) //True range
stopL = ta.sma(tr, 14) //Average true range
stdev = ta.stdev(close-close[1], 14) //volatility of recent returns
maxcapital = strategy.initial_capital+strategy.netprofit //Maximum capital available to invest - initial capital net of profit
annvol = 100*math.sqrt(365)*stdev/close //converts recent volatility of returns into annualised volatility of returns - assumes daily timeframe

risk = 1.1
if comp
    risk := (strategy.initial_capital+(Comppct*strategy.netprofit/100))//adjust investment capital to include compounding
else
    risk := strategy.initial_capital

shares = (risk * (riskT/annvol)) / close //calculates volatility adjusted position size, dependent on user specified annualised risk target
if ((shares*close) > lev*maxcapital) //ensures position size does not exceed available capital multiplied by user specified maximum leverage
    shares := lev*maxcapital/close

//To set the price at the entry point of trade
Posopen() =>
    math.abs(strategy.position_size[1]) <= 0 and math.abs(strategy.position_size) > 0

var float openN = na
if Posopen()
    openN := stopL

// Trailing stop
tlower = ta.lowest(low[1], trail)
tupper = ta.highest(high[1], trail)
tbasis = math.avg(tupper, tlower)
tsignal = 20*(close - tbasis) / (tupper - tlower)

// Strategy Rules
if EMAwt
    if long
        longCondition2 = (nemadiff >2 and nemadiff[1] <2) and window
        exitlong = tsignal <= -10
        if (longCondition2)
            strategy.entry('Trend Long!', strategy.long, qty=shares)
        if strategy.position_size > 0    
            strategy.exit('Stop Long', from_entry = 'Trend Long!', stop=(strategy.opentrades.entry_price(0) - (openN * stopMultiple)))
        if (exitlong)
            strategy.close('Trend Long!', immediately = true)

    if short
        shortCondition2 = (nemadiff <-1 and nemadiff[1] >-1) and window
        exitshort = tsignal >= 10
        if (shortCondition2)
            strategy.entry('Trend Short!', strategy.short, qty=shares)
        if strategy.position_size < 0   
            strategy.exit('Stop Short', from_entry = 'Trend Short!', stop=(strategy.opentrades.entry_price(0) + (openN * stopMultiple)))
        if (exitshort)
            strategy.close('Trend Short!', immediately = true)

if breakwt
    if long
        longCondition1 = (signal >= 10) and window
        exitlong = tsignal <= -10
        if (longCondition1)
            strategy.entry('Break Long!', strategy.long, qty=shares)
        if strategy.position_size > 0    
            strategy.exit('Stop Long', from_entry = 'Break Long!', stop=(strategy.opentrades.entry_price(0) - (openN * stopMultiple)))
        if (exitlong)
            strategy.close('Break Long!', immediately = true)

    if short
        shortCondition1 = (signal <= -10) and window
        exitshort = tsignal >= 10
        if (shortCondition1)
            strategy.entry('Break Short!', strategy.short, qty=shares)
        if strategy.position_size < 0   
            strategy.exit('Stop Short', from_entry = 'Break Short!', stop=(strategy.opentrades.entry_price(0) + (openN * stopMultiple)))
        if (exitshort)
            strategy.close('Break Short!', immediately = true)

// Visuals of trend and direction
plot(nemadiff, title='EMA Forecast', color=color.black, display=display.none)
plot(ta.sma(ta.median(math.sqrt(math.pow(nemadiff,2)), 700), 350), 'Forecast mean', color=color.rgb(245, 0, 0), display=display.none)

MAColor = fEMA > sEMA ? #00ff00 : #ff0000
MA1 = plot(fEMA, title='Fast EMA', color=MAColor)
MA2 = plot(sEMA, title='Slow EMA', color=MAColor)
fill(MA1, MA2, title='Band Filler', color=MAColor)