
Эта стратегия использует склонность к перекрестному пересечению двух различных длинных индикаторных скользящих средних ((EMA) для создания сигнала отслеживания тренда. По умолчанию используются длины EMA 130 и 400, и комбинация этих двух параметров хорошо работает.
Сделайте больше, когда скорая линия на склоне EMA пересекает медленную линию на склоне EMA и цена выше 200 циклов EMA; сделайте пробел, когда скорая линия на склоне EMA пересекает медленную линию на склоне EMA и цена ниже 200 циклов EMA.
Склонение в противоположном направлении при пересечении равновесия.
Эта стратегия работает лучше всего с биткоинами и высоколиквидированными Altcoins с высокой рыночной стоимостью, но также хорошо работает с более волатильными активами, особенно с теми, которые часто имеют тенденции.
В лучшем случае это будет четырехчасовой промежуток.
Кроме того, есть опциональный фильтр волатильности, который открывает позиции только тогда, когда разница между двумя наклонностями превышает определенный порог, чтобы избежать открытия позиций, когда шум при поперечном колебании цены намного больше, чем сигнал.
Наслаждайтесь!
В основе этой стратегии лежит сравнение скольжения движущихся средних индексов EMA двух различных длин.
Сначала вычислим EMA длины 130 и 400, затем вычислим соответствующий наклон, затем вычислим соответствующий наклон для EMA длины 3 и получим сглаженную кривую наклонности.
Сигнал покупания появляется при прохождении медленной линии по наклонности EMA над скорейшей линией; сигнал продажи - при прохождении медленной линии по наклонности EMA ниже скорейшей линией.
Для фильтрации колебаний можно использовать 200-циклическую ЭМА в качестве фильтра тренда, только если цена выше этой ЭМА, учитывайте более сигнала, а когда она ниже, учитывайте пустой сигнал.
Кроме того, можно выбрать фильтр частоты колебаний, который выдает сигнал только тогда, когда разница между двумя наклонностями больше, чем заданный порог, что позволяет отфильтровать случаи с пересечением частоты, но недостаточной частотой колебаний.
Когда скользкий склон пересекается в обратном направлении, ликвидируйте позицию и прекратите получать убытки.
Использование перекрестного скольжения для создания сигнала эффективного отслеживания тренда
Настройка комбинации параметров цикла EMA для различных рыночных условий
Тренд-фильтр поможет избежать ошибочного восприятия колебаний
Фильтр частоты колебаний фильтрует ложные сигналы
Правила простые, понятные и понятные
Используется в нескольких временных рамках
Частые открытия и закрытия при сильных толчках
Неправильные циклические параметры EMA могут пропустить поворот тренда
Сочетание параметров должно быть адаптировано к изменению рыночной среды.
Как и в системе MA, в конце большого тренда может быть обращена вспять потеря
Попробуйте различные параметры комбинации циклов EMA, чтобы найти оптимальный параметр
Параметры выбора в зависимости от характеристик различных валют и рыночной среды
Можно рассмотреть возможность включения стратегии по контролю за рисками с учетом убытков
Можно рассматривать динамическую корректировку параметров EMA
Попробуйте различные параметры по значению оттенка колебаний
Тестирование эффективности в разные временные рамки
Общая концепция стратегии ясна и понятна, используя перекрестный уклон EMA для создания сигнала, эффективно отслеживающего тренд; сочетание фильтра тренда и фильтра волатильности уменьшает шум торговли. Смесь параметров цикла EMA может быть адаптирована к различным рыночным условиям. В целом, это простая и практичная стратегия отслеживания тренда, которую стоит проверить и оптимизировать в реальном мире.
/*backtest
start: 2023-10-09 00:00:00
end: 2023-10-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// strategy(title="Slopes",initial_capital=1000, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.06, slippage = 2, default_qty_value=30, overlay=false)
//definizione input
start = timestamp(input(2018, "start year"), input(1, "start month"), input(1, "start day"), 00, 00)
end = timestamp(input(2020, "end year"), input(1, "end month"), input(1, "end day"), 00, 00)
average = input (title="Source MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])
len1=input(130,title="Fast MA Length")
len2=input(400,title="Slow MA Length")
smoothingavg = input (title="Smoothing MAs Type", type=input.string, defval="EMA",options=["EMA","SMA"])
smoothingavglen = input (3,title="Smoothing MAs Length")
trendfilter=input(true,title="Trend Filter")
trendfilterperiod=input(200,title="Trend Filter MA Period")
trendfiltertype=input (title="Trend Filter MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])
volatilityfilter=input(false,title="Volatility Filter")
volatilitydelta=input(0.0003,step=0.0001,title="Delta Slopes EMA")
//variabili
m1 = if average == "EMA"
ema(close,len1)
else
sma(close,len1)
m2=if average == "EMA"
ema(close,len2)
else
sma(close,len2)
slp1=(m1-m1[1])/m1
slp2=(m2-m2[1])/m2
e1=if smoothingavg == "EMA"
ema(slp1,smoothingavglen)
else
sma(slp1,smoothingavglen)
e2=if smoothingavg == "EMA"
ema(slp2,smoothingavglen)
else
sma(slp2,smoothingavglen)
plot(e1,color=color.yellow)
plot(e2,color=color.red)
//plot (abs(e1-e2),color=color.white)
//plot (ema(e1-e2,9),color=color.yellow)
//variabili accessorie e condizioni
TrendConditionL=if trendfiltertype =="EMA"
close>ema(close,trendfilterperiod)
else
close>sma(close,trendfilterperiod)
TrendConditionS=if trendfiltertype =="EMA"
close<ema(close,trendfilterperiod)
else
close<sma(close,trendfilterperiod)
VolatilityCondition = abs(e1-e2) > volatilitydelta
ConditionEntryL= if trendfilter == true
if volatilityfilter == true
e1>e2 and TrendConditionL and VolatilityCondition
else
e1>e2 and TrendConditionL
else
if volatilityfilter == true
e1>e2 and VolatilityCondition
else
e1>e2
ConditionEntryS= if trendfilter == true
if volatilityfilter == true
e1<e2 and TrendConditionS and VolatilityCondition
else
e1<e2 and TrendConditionS
else
if volatilityfilter == true
e1<e2 and VolatilityCondition
else
e1<e2
ConditionExitL=crossunder(e1,e2)
ConditionExitS=crossover(e1,e2)
if true
if ConditionExitS
if strategy.position_size < 0
strategy.close("SLPShort")
if true
if ConditionExitL
if strategy.position_size > 0
strategy.close("SLPLong")
if true
if ConditionEntryL
strategy.entry ("SLPLong",long=true)
if true
if ConditionEntryS
strategy.entry("SLPShort",long=false)