Les ressources ont été chargées... Je charge...

Suivre la tendance de l'EMA/SMA avec une stratégie de swing trading combinée de filtre de volume et de système de prise de profit/arrêt de perte en pourcentage

Auteur:ChaoZhang est là., Date: 2024-12-11 15:12:35 Je suis désolé
Les étiquettes:Le taux d'intérêtSMA

img

Résumé

Cette stratégie est un système de trading complet qui combine le suivi des tendances avec des méthodes de swing trading, en utilisant des croisements EMA et SMA, l'identification swing high/low, le filtrage du volume et des mécanismes de prise de profit et de stop-loss basés sur le pourcentage.

Principes de stratégie

La stratégie utilise un mécanisme de filtrage de signaux à plusieurs niveaux, en commençant par des croisements EMA (10) et SMA (21) pour la détermination de la tendance de base, puis en utilisant des ruptures de point de pivot gauche/droite de 6 bar pour le timing d'entrée, tout en nécessitant un volume supérieur à la moyenne mobile de 200 périodes pour assurer une liquidité suffisante. Le système utilise 2% de profit et 1% de stop-loss pour la gestion des risques. Les positions longues sont initiées lorsque le prix dépasse les sommets d'oscillation avec confirmation de volume; les positions courtes sont prises lorsque le prix dépasse les sommets d'oscillation avec confirmation de volume.

Les avantages de la stratégie

  1. La confirmation de plusieurs signaux réduit les faux signaux grâce à la vérification de la tendance, de la rupture des prix et de l'expansion du volume
  2. Gestion souple des profits et pertes en utilisant un taux de prise de profit basé sur le pourcentage avec un arrêt de perte ultérieur
  3. Système de visualisation complet pour le suivi des transactions et des signaux
  4. Haute personnalisation avec paramètres clés réglables
  5. Gestion systématique du risque par des niveaux prédéfinis de stop-loss et de take profit

Risques stratégiques

  1. Possession d'une fausse rupture sur des marchés variés
  2. Le filtrage du volume peut manquer certains signaux valides
  3. Le pourcentage fixe des bénéfices pourrait être supprimé trop tôt en cas de forte tendance
  4. Le système des moyennes mobiles a un retard inhérent dans les retours rapides
  5. Nécessité d'examiner l'impact des coûts de négociation sur les rendements de la stratégie

Directions d'optimisation

  1. Introduction d'une adaptation à la volatilité pour un ajustement dynamique de la prise de profit/arrêt de perte
  2. Ajouter un filtrage de la force de tendance pour éviter de négocier dans des tendances faibles
  3. Optimiser l'algorithme de filtrage du volume en tenant compte des changements de volume relatifs
  4. Mettre en œuvre des filtres basés sur le temps pour éviter les périodes de négociation défavorables
  5. Considérer la classification du régime de marché pour l'adaptation des paramètres

Résumé

La stratégie construit un système de trading complet à travers des moyennes mobiles, des écarts de prix et une vérification du volume, adapté à la tendance à moyen et long terme.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// Strategy combining EMA/SMA Crossover, Swing High/Low, Volume Filtering, and Percentage TP & Trailing Stop
strategy("Swing High/Low Strategy with Volume, EMA/SMA Crossovers, Percentage TP and Trailing Stop", overlay=true)

// --- Inputs ---
source = close
TITLE = input(false, title='Enable Alerts & Background Color for EMA/SMA Crossovers')
turnonAlerts = input(true, title='Turn on Alerts?')
colorbars = input(true, title="Color Bars?")
turnonEMASMA = input(true, title='Turn on EMA1 & SMA2?')
backgroundcolor = input(false, title='Enable Background Color?')

// EMA/SMA Lengths
emaLength = input.int(10, minval=1, title='EMA Length')
smaLength = input.int(21, minval=1, title='SMA Length')
ema1 = ta.ema(source, emaLength)
sma2 = ta.sma(source, smaLength)

// Swing High/Low Lengths
leftBars = input.int(6, title="Left Bars for Swing High/Low", minval=1)
rightBars = input.int(6, title="Right Bars for Swing High/Low", minval=1)

// Volume MA Length
volMaLength = input.int(200, title="Volume Moving Average Length")

// Percentage Take Profit with hundredth place adjustment
takeProfitPercent = input.float(2.00, title="Take Profit Percentage (%)", minval=0.01, step=0.01) / 100

// Trailing Stop Loss Option
useTrailingStop = input.bool(true, title="Enable Trailing Stop Loss?")
trailingStopPercent = input.float(1.00, title="Trailing Stop Loss Percentage (%)", minval=0.01, step=0.01) / 100

// --- Swing High/Low Logic ---
pivotHigh(_leftBars, _rightBars) =>
    ta.pivothigh(_leftBars, _rightBars)

pivotLow(_leftBars, _rightBars) =>
    ta.pivotlow(_leftBars, _rightBars)

ph = fixnan(pivotHigh(leftBars, rightBars))
pl = fixnan(pivotLow(leftBars, rightBars))

// --- Volume Condition ---
volMa = ta.sma(volume, volMaLength)

// Declare exit conditions as 'var' so they are initialized
var bool longExitCondition = na
var bool shortExitCondition = na

// --- Long Entry Condition: Close above Swing High & Volume >= 200 MA ---
longCondition = (close > ph and volume >= volMa)
if (longCondition)
    strategy.entry("Long", strategy.long)

// --- Short Entry Condition: Close below Swing Low & Volume >= 200 MA ---
shortCondition = (close < pl and volume >= volMa)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// --- Take Profit and Trailing Stop Logic ---

// For long position: Set take profit at the entry price + takeProfitPercent
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercent)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercent)

// --- Long Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Long
    strategy.exit("Long Exit", "Long", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=longTakeProfitLevel)
else
    // Exit Long on Take Profit only
    strategy.exit("Long Exit", "Long", limit=longTakeProfitLevel)

// --- Short Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Short
    strategy.exit("Short Exit", "Short", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=shortTakeProfitLevel)
else
    // Exit Short on Take Profit only
    strategy.exit("Short Exit", "Short", limit=shortTakeProfitLevel)

// --- Plot Swing High/Low ---

plot(ph, style=plot.style_circles, linewidth=1, color=color.blue, offset=-rightBars, title="Swing High")
plot(ph, style=plot.style_line, linewidth=1, color=color.blue, offset=0, title="Swing High")
plot(pl, style=plot.style_circles, linewidth=1, color=color.red, offset=-rightBars, title="Swing High")
plot(pl, style=plot.style_line, linewidth=1, color=color.red, offset=0, title="Swing High")
// --- Plot EMA/SMA ---
plot(turnonEMASMA ? ema1 : na, color=color.green, title="EMA")
plot(turnonEMASMA ? sma2 : na, color=color.orange, title="SMA")

// --- Alerts ---
alertcondition(longCondition, title="Long Entry", message="Price closed above Swing High with Volume >= 200 MA")
alertcondition(shortCondition, title="Short Entry", message="Price closed below Swing Low with Volume >= 200 MA")

// --- Bar Colors for Visualization ---
barcolor(longCondition ? color.green : na, title="Long Entry Color")
barcolor(shortCondition ? color.red : na, title="Short Entry Color")
bgcolor(backgroundcolor ? (ema1 > sma2 ? color.new(color.green, 50) : color.new(color.red, 50)) : na)

Relationnée

Plus de