Tendance dynamique suivant plusieurs indicateurs Stratégie de trading par lots avec prise de bénéfices

EMA MACD RSI ATR
Date de création: 2025-02-10 14:49:11 Dernière modification: 2025-02-10 14:49:11
Copier: 2 Nombre de clics: 378
1
Suivre
1617
Abonnés

Tendance dynamique suivant plusieurs indicateurs Stratégie de trading par lots avec prise de bénéfices

Aperçu

Il s’agit d’une stratégie de négociation quantitative combinant suivi de tendance et analyse technique. La stratégie confirme les signaux de négociation par le biais de plusieurs indicateurs techniques, en utilisant un blocage par lots et un mécanisme de gestion de position dynamique visant à capturer les principales tendances du marché tout en contrôlant les risques. La stratégie intègre plusieurs indicateurs techniques tels que l’EMA, le MACD et le RSI pour identifier les opportunités de négociation potentielles par les croisements et les déviations entre les indicateurs.

Principe de stratégie

La logique de négociation centrale de la stratégie est basée sur les éléments clés suivants:

  1. Les signaux entrants sont filtrés par plusieurs indicateurs techniques: les signaux croisés des EMA rapides et des EMA lentes, les signaux de forfait d’or MACD et les signaux de survente et de survente RSI. Les entrées à plusieurs têtes exigent des EMA rapides avec des EMA lentes et des forfaits d’or MACD avec un RSI inférieur à 70; les entrées à vide nécessitent des EMA rapides avec des EMA lentes et des forfaits d’or MACD avec un RSI supérieur à 30.
  2. Le contrôle des risques est basé sur un stop-loss à taux fixe, fixé à 5% du prix d’ouverture.
  3. Le blocage par lots: le premier blocage est situé à 8% et le second à 12%, en ajustant dynamiquement la position du deuxième blocage pour s’adapter aux fluctuations du marché.
  4. La gestion des positions est basée sur le calcul dynamique de l’ATR, le risque maximal individuel est contrôlé à 5%, la position maximale ne dépasse pas 40% des intérêts du compte.

Avantages stratégiques

  1. La vérification croisée de plusieurs indicateurs techniques permet de filtrer efficacement les faux signaux et d’améliorer la qualité des transactions.
  2. L’utilisation d’un système de blocage par lots permet de bloquer une partie des bénéfices et de ne pas perdre complètement les bénéfices de la poursuite de la tendance.
  3. Le système de gestion dynamique des positions permet de régler automatiquement la taille des transactions en fonction de la volatilité du marché et de contrôler efficacement les risques.
  4. Un bon système de contrôle du vent, comprenant des arrêts fixes, des positions dynamiques et des limites de détention maximale, assure la stabilité à long terme de la stratégie.
  5. La logique de la stratégie est claire, les paramètres sont adaptables et peuvent être optimisés en fonction des différentes conditions du marché.

Risque stratégique

  1. Il est fréquent de rencontrer des problèmes de stop-loss dans les marchés à forte volatilité. Il est nécessaire de faire attention à la modification des paramètres ou à la suspension des transactions en cas de forte volatilité du marché.
  2. Il est recommandé d’ajouter un mécanisme de jugement horizontal.
  3. Le filtrage de plusieurs indicateurs peut entraîner la perte d’une partie de la tendance et peut être moins efficace que la stratégie d’un seul indicateur dans un marché en forte tendance.
  4. Le blocage par lots peut ne pas être en mesure de liquider les positions en temps opportun dans un marché en forte reprise, et il faut envisager d’augmenter le jugement des signaux de reprise.

Orientation de l’optimisation de la stratégie

  1. Envisagez d’introduire un mécanisme de filtrage de la volatilité du marché, réduisant les positions ou suspendant les transactions lorsque la volatilité est trop élevée.
  2. Il est possible d’augmenter le jugement de la force de la tendance et d’ajuster la position de stop pendant une forte tendance pour obtenir plus de profit de la tendance.
  3. Optimiser le système de gestion des positions et envisager d’ajouter des ajustements de position dynamiques basés sur le ratio gain/perte.
  4. Ajout de mécanismes de jugement de l’état du marché, utilisant différentes combinaisons de paramètres dans différents états du marché.
  5. Envisagez d’ajouter des indicateurs de volume de transactions pour améliorer la fiabilité des signaux de négociation.

Résumer

La stratégie utilise la combinaison d’indicateurs techniques multiples, combinés à un blocage par lots et à une gestion dynamique des positions, pour construire un système de négociation relativement parfait. L’avantage de la stratégie réside dans la maîtrise complète des risques et la fiabilité élevée des signaux de négociation, mais il existe également des inconvénients qui peuvent manquer certaines situations.

Code source de la stratégie
/*backtest
start: 2024-02-10 00:00:00
end: 2025-02-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Hang Strategy Aggressive", overlay=true, initial_capital=1000, currency=currency.USDT, default_qty_type=strategy.cash, default_qty_value=100)

// === 参数设置 ===
fastLength = input.int(5, "快速EMA长度")
slowLength = input.int(15, "慢速EMA长度")
rsiLength = input.int(7, "RSI长度")
atrPeriod = input.int(10, "ATR周期")
leverageMultiple = input.float(3.0, "杠杆倍数", minval=1.0, step=0.5)

// === 止盈止损参数 ===
stopLossPercent = input.float(5.0, "止损百分比", minval=1.0, step=0.5)
firstTakeProfitPercent = input.float(8.0, "第一止盈点百分比", minval=1.0, step=0.5)
secondTakeProfitPercent = input.float(12.0, "第二止盈点百分比", minval=1.0, step=0.5)
firstTakeProfitQtyPercent = input.float(50.0, "第一止盈仓位百分比", minval=1.0, maxval=100.0, step=5.0)

// === 技术指标 ===
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)
superFastEMA = ta.ema(close, 3)
rsi = ta.rsi(close, rsiLength)
atr = ta.atr(atrPeriod)

// === 趋势判断 ===
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)
macdCross = (macdLine > signalLine) and (macdLine[1] < signalLine[1])
macdCrossDown = (macdLine < signalLine) and (macdLine[1] > signalLine[1])

// === 交易信号 ===
longCondition = (fastEMA > slowEMA) and macdCross and (rsi < 70)
shortCondition = (fastEMA < slowEMA) and macdCrossDown and (rsi > 30)

// === 平仓信号 ===
exitLong = shortCondition or (fastEMA < slowEMA)
exitShort = longCondition or (fastEMA > slowEMA)

// === 仓位管理 ===
maxRiskPerTrade = 0.05
basePosition = strategy.equity * maxRiskPerTrade
atrAmount = atr * close
riskPosition = basePosition / atrAmount * leverageMultiple
positionSize = math.min(riskPosition, strategy.equity * 0.4 / close)

// === 交易状态变量 ===
var isLong = false
var isShort = false
var partialTpTriggered = false
var float stopPrice = na
var float firstTpPrice = na
var float secondTpPrice = na
var float firstTpQty = na

// === 交易执行 ===
// 多头入场
if (longCondition and not isLong and not isShort)
    strategy.entry("多", strategy.long, qty=positionSize)
    isLong := true
    partialTpTriggered := false

// 空头入场
if (shortCondition and not isShort and not isLong)
    strategy.entry("空", strategy.short, qty=positionSize)
    isShort := true
    partialTpTriggered := false

// === 止盈止损逻辑 ===
if (strategy.position_size > 0)  // 多仓
    stopPrice := strategy.position_avg_price * (1 - stopLossPercent/100)
    firstTpPrice := strategy.position_avg_price * (1 + firstTakeProfitPercent/100)
    // 只在未触发第一止盈时计算第二止盈价格
    if not partialTpTriggered
        secondTpPrice := strategy.position_avg_price * (1 + secondTakeProfitPercent/100)
    
    if (close[1] <= stopPrice or low <= stopPrice)
        strategy.close_all("多止损")
        isLong := false
        partialTpTriggered := false
    
    if (not partialTpTriggered and (close[1] >= firstTpPrice or high >= firstTpPrice))
        strategy.order("多第一止盈", strategy.short, qty=firstTpQty)
        partialTpTriggered := true
        // 在这里重新计算第二止盈价格
        secondTpPrice := high * (1 + 0.04)  // 基于当前最高价再上涨4%
    
    if (close[1] >= secondTpPrice or high >= secondTpPrice)
        strategy.close_all("多第二止盈")
        isLong := false
        partialTpTriggered := false

if (strategy.position_size < 0)  // 空仓
    stopPrice := strategy.position_avg_price * (1 + stopLossPercent/100)
    firstTpPrice := strategy.position_avg_price * (1 - firstTakeProfitPercent/100)
    // 只在未触发第一止盈时计算第二止盈价格
    if not partialTpTriggered
        secondTpPrice := strategy.position_avg_price * (1 - secondTakeProfitPercent/100)
    
    if (close[1] >= stopPrice or high >= stopPrice)
        strategy.close_all("空止损")
        isShort := false
        partialTpTriggered := false
    
    if (not partialTpTriggered and (close[1] <= firstTpPrice or low <= firstTpPrice))
        strategy.order("空第一止盈", strategy.long, qty=firstTpQty)
        partialTpTriggered := true
        // 在这里重新计算第二止盈价格
        secondTpPrice := low * (1 - 0.04)  // 基于当前最低价再下跌4%
    
    if (close[1] <= secondTpPrice or low <= secondTpPrice)
        strategy.close_all("空第二止盈")
        isShort := false
        partialTpTriggered := false

// === 其他平仓条件 ===
if (exitLong and isLong)
    strategy.close_all("多平仓")
    isLong := false
    partialTpTriggered := false

if (exitShort and isShort)
    strategy.close_all("空平仓")
    isShort := false
    partialTpTriggered := false

// === 绘图 ===
plot(fastEMA, "快速EMA", color=color.blue)
plot(slowEMA, "慢速EMA", color=color.red)
plot(superFastEMA, "超快EMA", color=color.green)

// 绘制止盈止损线
plot(strategy.position_size != 0 ? strategy.position_avg_price : na, "开仓价", color=color.yellow)
plot(strategy.position_size != 0 ? stopPrice : na, "止损线", color=color.red)
plot(strategy.position_size != 0 ? firstTpPrice : na, "第一止盈线", color=color.green)
plot(strategy.position_size != 0 ? secondTpPrice : na, "第二止盈线", color=color.blue)