
La stratégie utilise plusieurs moyennes mobiles (MA) comme indicateurs de tendance et de dynamisme, y compris les moyennes mobiles simples (SMA) et les moyennes mobiles indicielles (EMA). En outre, la stratégie utilise les moyennes mobiles de Fibonacci comme point d’entrée potentiel. L’objectif principal de la stratégie est de capturer des opportunités de vente et d’achat en temps opportun lorsque les prix et le volume des transactions évoluent de manière significative.
L’avantage de la stratégie réside dans la prise en compte intégrale de plusieurs facteurs du marché et l’utilisation de plusieurs MA et EMA comme indicateurs auxiliaires. Cependant, la stratégie peut générer des signaux de trading excessifs dans des marchés en turbulence et dépendre d’indicateurs calculés à partir de données historiques, ce qui nécessite une optimisation supplémentaire pour améliorer son adaptabilité et sa fiabilité. Les orientations d’optimisation comprennent l’introduction d’indicateurs de force de tendance, l’optimisation des paramètres, la combinaison d’autres indicateurs techniques et l’introduction de mesures de gestion des risques.
/*backtest
start: 2023-05-28 00:00:00
end: 2024-06-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="Buy/Sell with Volume and Candlestick Signals", overlay=true)
// Fibonacci Retracement Levels
var float[] fibonacciLevels = array.new_float(5)
array.set(fibonacciLevels, 2, 0.47)
array.set(fibonacciLevels, 3, 0.658)
array.set(fibonacciLevels, 4, 0.886)
// Calculate Fibonacci Retracement Levels
fibonacciRetrace(highLevel, lowLevel) =>
priceRange = highLevel - lowLevel
retracementLevels = array.new_float(0)
for i = 0 to array.size(fibonacciLevels) - 1
level = highLevel - array.get(fibonacciLevels, i) * priceRange
array.push(retracementLevels, level)
retracementLevels
fibRetracementValues = fibonacciRetrace(high, low)
fibRetracement = ta.sma(close, 21)
plot(fibRetracement, color=color.purple, title="Fibonacci Retracement")
// Define inputs
fast_ma = input.int(title="Fast MA Period", defval=10)
short_sma_10 = input.int(title="Short SMA 10 Period", defval=10)
short_sma_60 = input.int(title="Short SMA 60 Period", defval=60)
slow_ma = input.int(title="Slow MA Period", defval=30)
ema1Length = input.int(title="EMA 1 Length", defval=3)
fast_ma_9 = input.int(title="Fast MA 9", defval=9)
// Define indicators
fast_ma_val = ta.sma(close, fast_ma)
short_sma_10_val = ta.sma(close, short_sma_10)
short_sma_60_val = ta.sma(close, short_sma_60)
slow_ma_val = ta.sma(close, slow_ma)
up_trend = fast_ma_val > slow_ma_val
down_trend = fast_ma_val < slow_ma_val
volume_up = volume > ta.sma(volume, 20)
volume_down = volume < ta.sma(volume, 20)
// Calculate accuracy values
fast_ema_val = ta.ema(close, fast_ma)
slow_ema_val = ta.ema(close, slow_ma)
ema1_val = ta.ema(close, ema1Length)
fast_ma_9_val = ta.sma(close, fast_ma_9)
ema7_val = ta.ema(close, 7)
accuracy = ta.crossover(close, slow_ma_val) ? fast_ema_val : slow_ema_val
// Define lines
plot(up_trend ? fast_ma_val : na, color=color.green, linewidth=2, title="Up Trend")
plot(down_trend ? fast_ma_val : na, color=color.red, linewidth=2, title="Down Trend")
plot(volume_up ? fast_ma_val : na, color=color.green, linewidth=2, title="Volume Up")
plot(volume_down ? fast_ma_val : na, color=color.red, linewidth=2, title="Volume Down")
plot(accuracy, color=color.yellow, linewidth=1, title="Accuracy Line")
plot(ema1_val, color=color.purple, linewidth=1, title="EMA 1")
plot(fast_ma_9_val, color=color.orange, linewidth=1, title="Fast MA 9")
plot(ema7_val, color=color.blue, linewidth=1, title="EMA 7")
plot(short_sma_60_val, color=color.red, linewidth=1, title="Short SMA 60")
hline(0, color=color.gray, linestyle=hline.style_dotted, title="Zero Line")
// Buy/Sell Signals
buySignal = ta.crossunder(short_sma_60_val, accuracy)
sellSignal = ta.crossover(short_sma_60_val, accuracy)
// Exit Signals
exitLongSignal = ta.crossunder(fast_ma_9_val, ema7_val)
exitShortSignal = ta.crossover(fast_ma_9_val, ema7_val)
// Plot Buy/Sell Signals
plotshape(buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")
if exitLongSignal
strategy.close("Buy")
if exitShortSignal
strategy.close("Sell")
if buySignal
strategy.entry("Enter Long", strategy.long)
else if sellSignal
strategy.entry("Enter Short", strategy.short)