
La stratégie utilise l’indicateur Aroon et l’indicateur de force absolue (ASH) pour identifier les tendances du marché et les opportunités de négociation potentielles. Aroon aide à identifier la force et la direction des tendances, tandis qu’ASH fournit des informations sur la force motrice. En combinant ces indicateurs, la stratégie tente de capturer des opportunités de négociation rentables sur le marché Ethereum.
La stratégie utilise deux ensembles de paramètres de l’indicateur Aroon:
La longueur de l’ASH est de 9 lignes K, utilisant le cours de clôture comme source de données.
La stratégie contient des conditions d’entrée et de sortie spécifiques:
Le plus grand avantage de cette stratégie réside dans la combinaison de l’utilisation de deux indicateurs. L’indicateur Aroon permet de déterminer efficacement la direction et la force d’une tendance, tandis que l’indicateur ASH fournit des informations supplémentaires sur la dynamique et aide à déterminer les moments d’entrée et de sortie.
De plus, l’Aroon utilise deux ensembles de paramètres différents pour faire des jugements sur la marge de manœuvre, ce qui permet de s’adapter avec souplesse aux changements de la situation du marché.
Le risque principal de cette stratégie réside dans les limites de l’indicateur lui-même. L’indicateur Aroon est faible pour le rattrapage des chocs et est susceptible de générer de faux signaux. L’indicateur ASH est également plus sensible aux inversions excessives à court terme.
En outre, une mauvaise configuration des paramètres peut affecter la performance de la stratégie. Il est nécessaire d’optimiser et de tester la longueur et la courte durée de l’indicateur Aroon ainsi que la longueur de l’indicateur ASH pour trouver la meilleure combinaison de paramètres.
On peut envisager d’ajouter des filtres, tels que la rupture des prix, l’augmentation du volume des transactions, etc., pour éviter de générer de faux signaux dans des situations de choc.
Il est possible de tester différentes combinaisons et pondérations d’indicateurs pour trouver le paramètre optimal. Vous pouvez également essayer de combiner d’autres indicateurs, tels que le RSI, le KD, etc., pour former une combinaison d’indicateurs plus puissante et améliorer la performance de la stratégie.
Cette stratégie intègre les avantages de l’utilisation de deux indicateurs, Aroon et ASH, qui confirment une meilleure efficacité pour juger les tendances et capturer les points de basculement. Cependant, les paramètres de configuration et les limites de l’indicateur lui-même doivent encore être optimisés.
/*backtest
start: 2023-03-05 00:00:00
end: 2024-03-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// © IkkeOmar
//@version=5
strategy("Aroon and ASH strategy - ETHERIUM [IkkeOmar]", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=1, commission_value=0, slippage=2)
// AROON SETTINGS ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Inputs for longs
length_upper_long = input.int(56, minval=15)
length_lower_long = input.int(20, minval=5)
// Inputs for shorts
//Aroon Short Side Inputs
length_upper_short = input.int(17, minval=10)
length_lower_short = input.int(55)
// ABSOLUTE STRENGTH HISTOGRAM SETTINGS ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
length = input(title='Length', defval=9)
src = input(title='Source', defval=close)
// CALCULATIONS: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Aroon
upper_long = 100 * (ta.highestbars(high, length_upper_long + 1) + length_upper_long) / length_upper_long
lower_long = 100 * (ta.lowestbars(low, length_lower_long + 1) + length_lower_long) / length_lower_long
upper_short = 100 * (ta.highestbars(high, length_upper_short + 1) + length_upper_short) / length_upper_short
lower_short = 100 * (ta.lowestbars(low, length_lower_short + 1) + length_lower_short) / length_lower_short
// Ahrens Moving Average
ahma = 0.0
ahma := nz(ahma[1]) + (src - (nz(ahma[1]) + nz(ahma[length])) / 2) / length
// CONDITIONS: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Options that configure the backtest start date
startDate = input(title='Start Date', defval=timestamp('01 Jan 2018 00:00'))
// Option to select trade directions
tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Long')
// Translate input into trading conditions
longOK = tradeDirection == 'Long' or tradeDirection == 'Both'
shortOK = tradeDirection == 'Short' or tradeDirection == 'Both'
// Check if the close time of the current bar falls inside the date range
inDateRange = true
longCondition = ta.crossover(upper_long, lower_long) and inDateRange and lower_long >= 5 and longOK
longCloseCondition = ta.crossunder(upper_long, lower_long) and inDateRange
shortCondition = ta.crossunder(upper_short, lower_short) and inDateRange and shortOK
shortCloseCondition = ta.crossover(upper_short, lower_short) and inDateRange
// Start off with the initial states for the longs and shorts
var in_short_trade = false
var in_long_trade = false
var long_signal = false
var short_signal = false
if longCondition
long_signal := true
if longCloseCondition
long_signal := false
if shortCondition
short_signal := true
if shortCloseCondition
short_signal := false
// While no trades active and short condition is met, OPEN short
if true and in_short_trade == false and in_long_trade == false and shortCondition
strategy.entry("short", strategy.short, when = shortCondition)
in_short_trade := true
in_long_trade := false
// While no trades and long condition is met, OPEN LONG
if true and in_short_trade == false and in_long_trade == false and longCondition
strategy.entry("long", strategy.long, when = longCondition)
in_long_trade := true
in_short_trade := false
// WHILE short trade and long condition is met, CLOSE SHORT and OPEN LONG
if true and in_short_trade == true and in_long_trade == false and longCondition
// strategy.close("short", when = longCondition)
strategy.entry("long", strategy.long, when = longCondition)
in_short_trade := false
in_long_trade := true
// WHILE long trade and short condition is met, CLOSE LONG and OPEN SHORT
if true and in_short_trade == false and in_long_trade == true and shortCondition
// strategy.close("long", when = shortCondition)
strategy.entry("short", strategy.short, when = shortCondition)
in_short_trade := true
in_long_trade := false
// WHILE long trade and exit long condition is met, CLOSE LONG
// if short signal is active, OPEN SHORT
if true and in_short_trade == false and in_long_trade == true and longCloseCondition
if short_signal
strategy.entry("short", strategy.short, when = short_signal)
in_long_trade := false
in_short_trade := true
else
strategy.close("long", when = longCloseCondition)
in_long_trade := false
in_short_trade := false
// if in short trade only and exit short condition is met, close the short
// if long signal still active, OPEN LONG
if true and in_short_trade == true and in_long_trade == false and shortCloseCondition
if long_signal
strategy.entry("long", strategy.long, when = long_signal)
in_short_trade := false
in_long_trade := true
else
strategy.close("short", when = shortCloseCondition)
in_short_trade := false
in_long_trade := false