Эта стратегия использует перекресток склонов двух EMA с разной длиной для формирования тренда после сигналов.
Условия, при которых стратегия выходит на рынок:
Когда простые склоны пересекаются в противоположном направлении, он закрывает позицию.
Стратегия лучше всего работает на биткойне и самых ликвидных и капитализированных альткоинах, но также хорошо работает и на волатильных активах, особенно если они часто становятся трендом. Лучше всего на четырехчасовом графике.
Существует также дополнительный фильтр волатильности, который открывает позицию только в том случае, если разница между двумя склонами больше определенного значения.
Наслаждайтесь!
В основе этой стратегии лежит сравнение уклонов двух EMA с разной длиной.
Сначала рассчитываются EMA с длиной 130 и 400, затем рассчитываются наклоны каждого, затем на каждом наклоне рассчитываются EMA длины 3, чтобы получить сглаженные кривые наклона.
При пересечении быстрого наклонения EMA над медленным наклонением EMA генерируется сигнал покупки.
Чтобы отфильтровать шум, 200-периодный EMA может использоваться в качестве фильтра тренда, рассматривая длинные сигналы только тогда, когда цена выше EMA, и короткие сигналы только тогда, когда ниже.
Кроме того, можно использовать фильтр волатильности, генерирующий сигналы только тогда, когда разница между двумя склонами больше порога, чтобы избежать случаев, когда склоны пересекаются, но волатильность недостаточна.
Когда быстрые и медленные склоны пересекаются обратно, позиции закрываются, чтобы остановить прибыль/убытки.
Использование крестов наклона для генерации сигналов может эффективно отслеживать тенденции
Корректировка комбинаций периодов 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)