Стратегия перекрестного использования ИСО ЕМА

Автор:Чао Чжан, Дата: 2023-10-25 11:46:49
Тэги:

img

Обзор

Эта стратегия использует принцип экспоненциальной скользящей средней (EMA), в сочетании с индикатором RSI, для определения направления тренда для входов и выходов.

Логика стратегии

Стратегия использует 3 линии EMA с различными периодами - быстрые, средние и медленные линии. Сигнал покупки генерируется, когда быстрая EMA пересекает среднюю EMA, а сигнал продажи генерируется, когда быстрая EMA пересекает среднюю EMA.

Стратегия также включает в себя индикатор RSI для измерения условий перекупленности и перепродажи. RSI рассчитывает соотношение средних дней роста к средним дням падения за период, чтобы показать относительную силу актива. Значения выше перекупленного порога сигнализируют о перекупленных условиях, а значения ниже перепроданного порога сигнализируют о перепроданных условиях.

Условия покупки стратегии:

  1. Пересечение цены выше линий быстрой, средней и медленной ЭМА
  2. РСИ превышает порог перепроданности

Условия продажи:

  1. Быстрое пересечение средней ЕМА
  2. Пересечение RSI ниже средней линии

Используя перекрестки EMA для определения направления тренда в сочетании с RSI для выявления краткосрочных возможностей реверсии, эта стратегия использует как следующие за трендом, так и средние концепции реверсии.

Анализ преимуществ

Эта стратегия сочетает в себе перекрестки EMA и RSI для измерения как тренда, так и уровня перекупа/перепродажи, фильтруя ложные прорывы и шумные сделки.

Настройки RSI позволяют стратегии сопоставлять входы и выходы в выгодных зонах перекупленности/перепроданности.

Требование к цене пересечь все 3 линии EMA перед входом в торговлю помогает избежать обмана.

Анализ рисков

Как и все стратегии с обратным тестированием, эта стратегия подвергается риску перенапряжения обратного тестирования.

На рынках с различными показателями стратегия может генерировать ложные сигналы и приносить убытки.

Плохая настройка параметров RSI может привести к упущенным возможностям или ложным сигналам.

Возможности для расширения

  1. Подумайте о добавлении проверки в более длительные сроки, чтобы избежать шума.

  2. Дождитесь повторного тестирования линий EMA, прежде чем вводить сделки для подтверждения сигнала.

  3. Включите другие индикаторы, такие как MACD, полосы Боллинджера для подтверждения комбинированного сигнала.

  4. Используйте машинное обучение для оптимизации параметров надежности.

  5. Подумайте о добавлении стоп-лосса для быстрого выхода из неопределенных трендов.

Заключение

Эта стратегия сочетает в себе EMA кроссоверы и RSI для выявления тренда, используя при этом краткосрочные обратные тенденции. Она эффективно использует как концепции следующего тренда, так и концепции реверсии среднего значения. Существует возможность оптимизации с помощью проверки сигналов, настройки параметров, остановки потерь и т. Д. Но необходимо учитывать перенапряжение бэкстеста и оценивать производительность в режиме реального времени. В целом, это служит полезным ориентиром для обучения, но требует дальнейшей проверки на живых рынках.


/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © chadsadachai

//@version=5
strategy("EMA Cross V1", overlay= true)

//rsi
length = input.int(title = "Rsi Lenght" , defval=26 , minval=1, maxval=50)
overS = input.int(title = "Rsi OVS line" , defval=30 , minval=1, maxval=40)
overB = input.int(title = "Rsi OVB line" , defval=70 , minval=1, maxval=100)
mLine = input.int(title = "Rsi Medium line" , defval=42 , minval=1, maxval=60)
price = close
vrsi = ta.rsi(price, length)
co = vrsi >= mLine and vrsi < overB 
cu = ta.crossunder(vrsi, overB)
//ema
F = input.int(title = "EMA Fast" , defval=17 , minval=1, maxval=50)
M = input.int(title = "EMA Medium" , defval=35, minval=1, maxval=100)
S = input.int(title = "EMA Slow" , defval=142, minval=1, maxval=200)
emaF = ta.ema(price , F)
emaM = ta.ema(price , M)
emaS = ta.ema(price , S)

//plot
plot(emaF , color = color.green , linewidth=1)
plot(emaM , color = color.yellow , linewidth=1)
plot(emaS , color = color.red , linewidth=1)

//Time Stamp
start = timestamp(input.int(title = "Start Year" , defval=2011 , minval=2011, maxval=2025), input.int(title = "Start Month" , defval=1 , minval=1, maxval=12), input.int(title = "Start Day" , defval=1 , minval=1, maxval=31), 0, 0)
end = timestamp(input.int(title = "End Year" , defval=2025 , minval=2011, maxval=2025), input.int(title = "End Month" , defval=1 , minval=1, maxval=12), input.int(title = "End Day" , defval=1 , minval=1, maxval=31), 0, 0)
// years = input.int(title = "Year" , defval=2018 , minval=2011, maxval=2025)
// months = input.int(title = "Month" , defval=1 , minval=1, maxval=12)
// days = input.int(title = "Day" , defval=1 , minval=1, maxval=31)

//longCondition Default
// longCondition1 = EMA_Fast >= EMA_Slow and EMA_Fast >= EMA_Medium//ta.crossover(EMA_Fast, EMA_Slow)  EMA_Fast > EMA_Slow and EMA_Medium > EMA_Slow
// longCondition3 = price >= EMA_Medium and price > EMA_Slow
// longCondition2 = vrsi >= overSold and vrsi <= overBought 

//longCondition & shortCondition ETHUSD
// 1.price > emaF > emaM > emaS
// 2.rsi overcross overS
longC1 = price > emaF and price > emaM and price > emaS 
// longC1 = ta.crossover(emaF, emaM)
longC2 = if longC1
    co
// shortC1 = EMA_Fast < EMA_Medium //and EMA_Fast < EMA_Slow and EMA_Medium < EMA_Slow //and cu
// shortC2 = overBought > vrsi //and vrsi < overBought //overSold < vrsi and vrsi < mediumLine

// exitLong Condition
// 1.price < emaF < emaM < emaS
// 2.rsi overcross mediumLine
exitLong1 = ta.crossunder(emaF, emaM) //or emaF < emaM//and price < emaM and price < emaF
exitLong2 = ta.crossunder(vrsi,mLine)
//exitLong3 = price < emaM
//strategy.entry
if time >=start and time <=end
    strategy.entry("Buy", strategy.long , when = longC1 and longC2)

// if(exitLong1 or exitLong2)
strategy.close("Buy" , when = exitLong1 or exitLong2)
    
// exitShort1 = EMA_Fast > EMA_Medium
// //exitShort2 = ta.crossover(vrsi , mediumLine) 
// exitShort2 = ta.crossunder (vrsi,mediumLine)
// strategy.close("Short" , when = exitShort1 or exitShort2)
// //shortCondition = cu


// //if (shortCondition1 and shortCondition2)
//     //strategy.entry("My Short Entry Id", strategy.short)


Больше