
La stratégie est une stratégie de trading quantifiée basée sur la synergie entre l’indicateur de force relative (RSI) et l’oscillateur de dynamique (AO). La stratégie identifie les opportunités potentielles de survente principalement en capturant le signal de couplage entre le RSI qui franchit la ligne horizontale 50 et l’AO qui se trouve dans la zone négative. La stratégie utilise un mécanisme de stop-loss pourcentage pour gérer le risque, en utilisant par défaut 10% des fonds du compte pour la négociation.
La logique centrale de la stratégie est basée sur la synergie de deux indicateurs techniques:
Il s’agit d’une stratégie de suivi de tendance combinant les indicateurs RSI et AO pour effectuer plusieurs transactions en capturant les signaux de revers des zones de survente. La stratégie est conçue de manière rationnelle, le risque est en place, mais il reste de la place pour l’optimisation.
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="🐂 BUY Only - RSI Crossing 50 + AO Negative", shorttitle="🐂 AO<0 RSI+50 Strategy", overlay=true)
// -----------------------------
// --- User Inputs ---
// -----------------------------
// RSI Settings
rsiPeriod = input.int(title="RSI Period", defval=14, minval=1)
// AO Settings
aoShortPeriod = input.int(title="AO Short Period", defval=5, minval=1)
aoLongPeriod = input.int(title="AO Long Period", defval=34, minval=1)
// Strategy Settings
takeProfitPerc = input.float(title="Take Profit (%)", defval=2.0, minval=0.0, step=0.1)
stopLossPerc = input.float(title="Stop Loss (%)", defval=1.0, minval=0.0, step=0.1)
// -----------------------------
// --- Awesome Oscillator (AO) Calculation ---
// -----------------------------
// Calculate the Awesome Oscillator
ao = ta.sma(hl2, aoShortPeriod) - ta.sma(hl2, aoLongPeriod)
// Detect AO Crossing Zero
aoCrossOverZero = ta.crossover(ao, 0)
aoCrossUnderZero = ta.crossunder(ao, 0)
// -----------------------------
// --- Relative Strength Index (RSI) Calculation ---
// -----------------------------
// Calculate RSI
rsiValue = ta.rsi(close, rsiPeriod)
// Detect RSI Crossing 50
rsiCrossOver50 = ta.crossover(rsiValue, 50)
rsiCrossUnder50 = ta.crossunder(rsiValue, 50)
// -----------------------------
// --- Plotting Arrows and Labels ---
// -----------------------------
// Plot AO Cross Over Arrow (AO+)
plotshape(series=aoCrossOverZero,
location=location.belowbar,
color=color.green,
style=shape.labelup,
title="AO Crosses Above Zero",
text="AO+",
textcolor=color.white,
size=size.small)
// Plot AO Cross Under Arrow (AO-)
plotshape(series=aoCrossUnderZero,
location=location.abovebar,
color=color.red,
style=shape.labeldown,
title="AO Crosses Below Zero",
text="AO-",
textcolor=color.white,
size=size.small)
// Plot RSI Cross Over Arrow (RSI Up)
plotshape(series=rsiCrossOver50,
location=location.belowbar,
color=color.blue,
style=shape.labelup,
title="RSI Crosses Above 50",
text="RSI Up",
textcolor=color.white,
size=size.small)
// Plot RSI Cross Under Arrow (RSI Down)
plotshape(series=rsiCrossUnder50,
location=location.abovebar,
color=color.orange,
style=shape.labeldown,
title="RSI Crosses Below 50",
text="RSI Down",
textcolor=color.white,
size=size.small)
// -----------------------------
// --- Buy Signal Condition ---
// -----------------------------
// Define Buy Signal: AO is negative and previous bar's RSI > 50
buySignal = (ao < 0) and (rsiValue[1] > 50)
// Plot Buy Signal
plotshape(series=buySignal,
location=location.belowbar,
color=color.lime,
style=shape.triangleup,
title="Buy Signal",
text="BUY",
textcolor=color.black,
size=size.small)
// -----------------------------
// --- Strategy Execution ---
// -----------------------------
// Entry Condition
if buySignal
strategy.entry("Long", strategy.long)
// Exit Conditions
// Calculate Stop Loss and Take Profit Prices
if strategy.position_size > 0
// Entry price
entryPrice = strategy.position_avg_price
// Stop Loss and Take Profit Levels
stopLevel = entryPrice * (1 - stopLossPerc / 100)
takeProfitLevel = entryPrice * (1 + takeProfitPerc / 100)
// Submit Stop Loss and Take Profit Orders
strategy.exit("Exit Long", from_entry="Long", stop=stopLevel, limit=takeProfitLevel)