Stratégie de négociation algorithmique multifonctionnelle basée sur la tendance et la moyenne mobile croisée

Auteur:ChaoZhang est là., Date: 2023-12-08 12:14:50 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie intègre plusieurs indicateurs techniques et concepts de trading pour générer automatiquement des signaux d'achat et de vente.

La logique de la stratégie

Indicateurs techniques

  • Indicateur UTSTC personnalisé: un stop de trail adaptatif basé sur la plage moyenne vraie pour ajuster la plage de stop loss en fonction de la volatilité du marché.

  • Indicateur STC: la différence entre les moyennes mobiles simples rapides et lentes pour déterminer la direction de la tendance du marché et les points d'inversion potentiels.

  • Moyennes mobiles simples (MMS) et moyennes mobiles exponentielles (MME): Tracer des moyennes mobiles de différentes périodes pour fournir des informations supplémentaires sur la tendance.

Signaux de négociation

  • Signal d'achat: Généré lorsque le prix de clôture dépasse la ligne UTSTC et que STC est en hausse.

  • Signal de vente: généré lorsque le prix de clôture dépasse la ligne UTSTC et que STC est en baisse.

Les avantages

  • Intégre plusieurs indicateurs pour déterminer la tendance du marché, améliorant la précision du signal.

  • L'UTSTC ajuste automatiquement les arrêts en fonction de la volatilité réelle, contrôlant ainsi efficacement les pertes par transaction.

  • Des signaux de trading simples et efficaces provenant de croix de moyenne mobile.

  • Différentes combinaisons de paramètres permettent d'adapter davantage d'environnements de marché.

Les risques

  • Les indicateurs de tendance tels que le STC peuvent être en retard et manquer des renversements à court terme.

  • Les moyennes mobiles peuvent générer de faux signaux.

  • Une évaluation attentive des paramètres requis, des combinaisons inappropriées peuvent réduire les bénéfices ou augmenter les pertes.

  • Une plage de stop-loss trop large peut augmenter les pertes, trop serrée peut arrêter tôt.

Des possibilités d'amélioration

  • Testez différentes longueurs STC pour trouver des réglages avec un impact stratégique minimal.

  • Incorporer des filtres supplémentaires pour réduire les faux signaux, par exemple KDJ, MACD.

  • Optimiser les arrêts basés sur les résultats des backtests pour trouver le meilleur mélange de paramètres.

  • Évaluer les différentes périodes de conservation pour déterminer l'optimum.

Conclusion

Cette stratégie combine la tendance, les arrêts automatisés et les modules de signal dans un cadre de trading algorithmique assez complet.


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("OB+LQ+UTSTC+SMA+EMA-NORA-MIP21-Jashore-Bangladesh-OneMinuteTF", shorttitle="OB+LS+UTSTC-MIP21-Jashore-Bangladesh-OneMinuteTF", overlay=true)

// Order Block + Liquidity Swings [NORA] Settings
pivot_length = input(14, title="Pivot Lookback")
bull_ext_last = input(3, title="Bullish OB Extension")
bear_ext_last = input(3, title="Bearish OB Extension")
swing_length = input(5, title="Swing Length")
area = input("Wick Extremity", title="Swing Area", options=["Wick Extremity", "Full Range"])
min_profit = input(0.5, title="Minimum Profit Target")
max_loss = input(0.5, title="Maximum Loss Stop")

// Variables
var float bull_ob_price = na
var float bear_ob_price = na
var float swing_high = na
var float swing_low = na

// Calculate Order Block Prices
var float low_lowest = na
var float high_highest = na
if bar_index >= pivot_length
    low_lowest := lowest(low, pivot_length)
    high_highest := highest(high, pivot_length)
    bull_ob_price := low_lowest
    bear_ob_price := high_highest

// Calculate Swing High/Low Prices
var float low_lowest_swing = na
var float high_highest_swing = na

if area == "Wick Extremity"
    low_lowest_swing := lowest(low, swing_length)
    high_highest_swing := highest(high, swing_length)
else
    low_lowest_swing := lowest(high - low, swing_length)
    high_highest_swing := highest(high - low, swing_length)

swing_low := low_lowest_swing
swing_high := high_highest_swing

// Trading Logic for Order Block + Liquidity Swings
buy_liquidity = crossover(close, bull_ob_price) and close > swing_low
sell_liquidity = crossunder(close, bear_ob_price) and close < swing_high

// Plot Buy/Sell Signals for Order Block + Liquidity Swings
plotshape(series=buy_liquidity, style=shape.labelup, location=location.belowbar, color=color.rgb(39, 166, 175), size=size.small, title="Bullish LQ")
plotshape(series=sell_liquidity, style=shape.labeldown, location=location.abovebar, color=color.rgb(248, 95, 215), size=size.small, title="Bearish LQ")

// UTSTC-SMA-EMA-NORA-New Settings
keyvalue = input(3, title="UT Bot Key Value", step=0.5)
atrperiod = input(10, title="UT Bot ATR Period")
src = close

xATR = atr(atrperiod)
nLoss = keyvalue * xATR
xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))
pos = 0   
pos := iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue
plot(xATRTrailingStop, color=xcolor, title="UT Bot Trailing Stop")

// STC Settings
stc_length = input(12, title="STC Length")
fastLength = input(26, title="STC Fast Length")
slowLength = input(50, title="STC Slow Length")
fastMA = ema(close, fastLength)
slowMA = ema(close, slowLength)
STC = fastMA - slowMA
STCColor = STC > STC[1] ? color.green : color.red
plot(STC, color=STCColor, title="STC")

// Add SMAs
sma21 = sma(close, 21)
sma44 = sma(close, 44)
plot(sma21, color=color.blue, title="SMA 21")
plot(sma44, color=color.orange, title="SMA 44")

// Add EMA
ema5 = ema(close, 5)
plot(ema5, color=color.yellow, title="EMA 5")

// Combined Strategy
buySignal = crossover(src, xATRTrailingStop) and STC < 25 and STCColor == color.green
sellSignal = crossunder(src, xATRTrailingStop) and STC > 75 and STCColor == color.red

// Plot Buy and Sell signals as triangles
plotshape(series=buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(series=sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)

strategy.entry("Buy", strategy.long, when=buySignal)
strategy.entry("Sell", strategy.short, when=sellSignal)



Plus de