
Эта стратегия в сочетании с использованием индикатора Aroon и индикатора абсолютной силы ((ASH) предназначена для выявления рыночных тенденций и потенциальных торговых возможностей. Aroon помогает идентифицировать силу и направление тенденций, в то время как ASH дает представление о движущей силе.
Стратегия использует два параметра показателя Aroon:
ASH имеет длину 9 K-линий и использует цены закрытия в качестве источника данных.
Стратегия включает в себя определенные условия для входа и выхода:
Наибольшее преимущество этой стратегии заключается в сочетании использования двух индикаторов: индикатор Aroon позволяет эффективно определять направление и силу тренда, а индикатор ASH предоставляет дополнительную динамическую информацию, помогающую определить время входа и выхода.
Кроме того, используя два различных параметра показателя Aroon, можно гибко адаптироваться к изменениям в рыночной ситуации.
Основной риск этой стратегии заключается в ограничениях самого индикатора. Показатель Aroon слабен для шокирующего рыночного свертывания, что может привести к ошибочным сигналам. Показатель ASH также более чувствителен к краткосрочным чрезмерным поворотам.
Кроме того, неправильная настройка параметров также может повлиять на эффективность стратегии. Необходимо оптимизировать и тестировать длину и короткость циклов показателя Aroon и длину показателя ASH, чтобы найти оптимальную комбинацию параметров.
Можно рассмотреть возможность добавления фильтров, таких как прорыв цены, увеличение объема торгов и т. д., чтобы избежать ошибочных сигналов в шокирующем режиме.
Можно тестировать различные комбинации и веса показателей, чтобы найти оптимальные параметры. Также можно попробовать комбинировать другие показатели, такие как RSI, KD и т. Д., чтобы сформировать более мощную комбинацию показателей, повышая эффективность стратегии.
Эта стратегия объединяет преимущества использования обоих показателей Aroon и ASH, подтверждается двумя показателями, что она более эффективна при определении тенденций и захвате переломных моментов. Однако параметры и ограничения самих показателей все еще нуждаются в оптимизации. В целом, идея является новой и заслуживает дальнейшего улучшения и проверки.
/*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