Stratégie de prise de bénéfices dynamique par moyenne mobile


Date de création: 2023-09-18 21:46:47 Dernière modification: 2023-09-18 21:46:47
Copier: 3 Nombre de clics: 606
1
Suivre
1617
Abonnés

Aperçu

Cette stratégie est basée sur les moyennes mobiles pour déterminer la direction de la tendance, avec un certain pourcentage d’ATR de stop-loss, et combiné avec l’ATR pour ajuster dynamiquement la position. L’objectif est de suivre la tendance pour gagner de l’argent tout en contrôlant les risques.

Le principe

La stratégie utilise une moyenne mobile simple de longueur N pour déterminer la direction de la tendance. Lorsque vous portez un SMA long sur un SMA court, faites plus; lorsque vous portez un SMA long sur un SMA court, faites moins.

Après l’entrée, la stratégie prend un certain nombre de fois l’ATR comme arrêt. Si la position est longue, l’arrêt est l’entrée Price + ATR * Factor. Lorsque le prix dépasse l’arrêt, l’arrêt est éliminé.

En outre, la stratégie ajuste les positions en fonction de la taille de l’ATR. La taille de l’ATR représente la volatilité du marché, la taille de la position est inversée à l’ATR. Plus l’ATR est grand, plus la position est petite.

Les avantages

  1. L’utilisation d’une moyenne mobile pour déterminer la direction de la tendance a une certaine capacité de suivi de la tendance.

  2. L’arrêt ATR est rentable tout en évitant le retour.

  3. Les positions dynamiques permettent de contrôler le risque en fonction de la volatilité du marché.

  4. Les paramètres d’arrêt et de position peuvent être personnalisés.

  5. La combinaison de stop-loss peut limiter encore plus le risque.

Risques et solutions

  1. Les moyennes mobiles sont en retard, ce qui peut entraîner des retards d’entrée. Des paramètres plus sensibles peuvent être testés.

  2. Les variations de la taille d’ATR peuvent entraîner une réduction ou une augmentation de la taille de l’arrêt. Vous pouvez ajouter l’ATR à la moyenne pour extraire sa tendance.

  3. Si les fluctuations sont trop importantes, la position peut avoir un impact mineur sur les bénéfices. Vous pouvez définir une limite inférieure de position.

  4. Le risque d’augmentation des pertes sans arrêt est possible avec une stratégie de stop mobile.

  5. La stratégie peut ne pas être efficace pour les titres mal choisis, tels que les actifs à faible volatilité. Les titres à forte volatilité devraient être choisis.

Optimiser les idées

  1. Testez différentes combinaisons de paramètres pour trouver le paramètre optimal.

  2. Optimiser la logique d’ouverture de position, par exemple en ajoutant des filtres sur d’autres indicateurs.

  3. Il est également important de mettre en place des stratégies d’arrêt dynamiques et de stop loss pour rendre le stop loss plus flexible.

  4. Gestion des positions en combinaison avec les indicateurs de volatilité.

  5. La participation à un mécanisme de réadmission pour prolonger la période de détention.

Résumer

La stratégie utilise des moyennes mobiles pour juger de la tendance, arrêter les positions au ratio ATR et ajuster dynamiquement les positions. L’avantage est qu’il existe une certaine capacité de suivi de la tendance, qui peut être ajustée par des paramètres pour contrôler le risque.

Code source de la stratégie
/*backtest
start: 2023-09-10 00:00:00
end: 2023-09-17 00:00:00
period: 5m
basePeriod: 1m
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/
// © dongyun

//@version=4
strategy("利润目标止损的移动平均线", overlay=true)

period = input(80,'')
ptper = input(252,'')
ptfactor = input(12,'')
sizeper = input(20, '')

trend = 0.0
signal = 0
size = 1.0
investment = 100000
atrange = 0.0
ptrange = 0.0
stoph = 0.0
stopl = 0.0


if sizeper != 0
	atrange := atr(sizeper)

if atrange == 0 or sizeper == 0 
	size := 1
else
	size := investment/atrange * 0.1

trend := sma(close,period)


if signal != 1 and nz(trend[1]) < nz(trend[2]) and trend > nz(trend[1])
	strategy.entry('long',strategy.long, comment='open_long')
	signal := 1
else
    signal := nz(signal[1])
    
if signal != -1 and nz(trend[1]) > nz(trend[2]) and trend < nz(trend[1])
	strategy.entry('short',strategy.short, comment='open_short')
	signal := -1
else
    if signal == 0
        signal := nz(signal[1])

ptrange := atr(ptper)

if strategy.position_size > 0
	strategy.exit("exit_long", "long", qty = strategy.position_size, limit = close + ptfactor*ptrange , comment='trail_long') 
else
	if strategy.position_size < 0
		strategy.exit("exit_short", "short", qty = abs(strategy.position_size), limit = close - ptfactor*ptrange, comment='trail_short')