Тенденция многопериодного скользящего среднего канала в соответствии со стратегией

Автор:Чао Чжан, Дата: 2024-02-20 13:45:42
Тэги:

img

Обзор

Эта стратегия использует несколько скользящих средних, включая SMA, EMA, VWMA, ALMA, SMMA, LSMA и VWMA, применяемых отдельно к высоким и низким, чтобы сформировать две средние линии в качестве канала.

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

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

Стратегия использует 7 различных типов скользящих средних, включая SMA, EMA, VWMA, ALMA, SMMA, LSMA и VWMA. Эти средние значения применяются отдельно к самым высоким и самым низким ценам свечей для получения двух средних линий.

Средняя линия, применяемая к высоким ценам, называется avg_high. Применяемая к низким ценам называется avg_low. Эти две линии образуют канал.

Идите длинный, когда закрытие выше среднего_высокого. Идите короткий, когда закрытие ниже среднего_низкого.

Стоп-лосс для длинного заключения составляет avg_low. Take profit - это цена входа *(1 + tp_long). Короче говоря, stop loss - avg_high, take profit - это цена входа *(1 - tp_short).

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

Наибольшее преимущество этой стратегии заключается в использовании нескольких скользящих средних для повышения прибыльности. Различные МА имеют разную скорость реакции на изменения цен. Объединение их формирует более надежные торговые сигналы.

Еще одним преимуществом является подход канала, который ограничивает диапазон стоп-лосса и снижает риск, подходящий для свинг-трейдинга.

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

Стратегия имеет два основных риска:

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

  2. На боковых рынках или на рынках без тренда, стратегия имеет тенденцию к потерем и сбоям.

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

Руководство по оптимизации

Области для дальнейшей оптимизации:

  1. Проверьте больше типов МА, чтобы найти лучшие комбинации, такие как SMA, EMA, KAMA, TEMA и т. д.

  2. Оптимизировать длины МА и ширину канала для определения оптимальных параметров.

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

  4. Включайте трендовые показатели, такие как ADX, ATR, чтобы избежать сбоев во время нестабильных рынков.

  5. Оптимизируйте логику входа и выхода с помощью дополнительных фильтров для уменьшения недействительных сделок.

Резюме

Эта стратегия повышает рентабельность с использованием нескольких MAs и снижает риск через каналы. Она хорошо работает для продуктов с тенденциями после оптимизации параметров. Но может понести большие потери при изменении тренда. Для смягчения рисков снижения необходимы дальнейшие оптимизации.


/*backtest
start: 2024-01-20 00:00:00
end: 2024-02-19 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/
// © exlux99

//@version=4

strategy(title="High/Low channel swing", shorttitle="Multi MA swing", overlay=true)


fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

//////
length_ma= input(defval=12, title="Length Moving averages", minval=1)

////////////////////////////////SETUP///////////////////////////////////////////

sma_high   = sma(high, length_ma)
ema_high   = ema(high, length_ma)
wma_high   = wma(high, length_ma)
alma_high  = alma(high,length_ma, 0.85, 6)
smma_high = rma(high,length_ma)
lsma_high = linreg(high, length_ma, 0)
vwma_high = vwma(high,length_ma)



avg_high = (sma_high+ema_high+wma_high+alma_high+smma_high+lsma_high+vwma_high)/7

///////////////////////////////////////////

sma_low   = sma(low, length_ma)
ema_low   = ema(low, length_ma)
wma_low   = wma(low, length_ma)
alma_low  = alma(low,length_ma, 0.85, 6)
smma_low = rma(low,length_ma)
lsma_low = linreg(low, length_ma, 0)
vwma_low = vwma(low,length_ma)



avg_low = (sma_low+ema_low+wma_low+alma_low+smma_low+lsma_low+vwma_low)/7

////////////////////////////PLOTTING////////////////////////////////////////////


plot(avg_high , title="avg", color=color.green, linewidth = 4)
plot(avg_low , title="avg", color=color.red, linewidth = 4)

long= close > avg_high
short = close < avg_low

tplong=input(0.06, title="TP Long", step=0.01)
sllong=input(0.05, title="SL Long", step=0.01)

tpshort=input(0.045, title="TP Short", step=0.01)
slshort=input(0.05, title="SL Short", step=0.01)

if(time_cond)
    strategy.entry("long",1,when=long)
    strategy.exit("closelong", "long" , profit = close * tplong / syminfo.mintick, loss = close * sllong / syminfo.mintick, alert_message = "closelong")
    strategy.close("long", when=crossunder(low,avg_low))
    
    
    strategy.entry("short",0,when=short)
    strategy.exit("closeshort", "short" , profit = close * tpshort / syminfo.mintick, loss = close * slshort / syminfo.mintick, alert_message = "closeshort")
    strategy.close("short",when=crossover(high,avg_high))



Больше