Автоматическая стратегия отслеживания на основе тройной SMA


Дата создания: 2024-01-26 15:05:58 Последнее изменение: 2024-01-26 15:05:58
Копировать: 1 Количество просмотров: 640
1
Подписаться
1617
Подписчики

Автоматическая стратегия отслеживания на основе тройной SMA

Обзор

Трехкратная SMA - это стратегия, основанная на простых движущихся средних за три различных периода. Она позволяет автоматически отслеживать тенденции и использовать отклонения в тренде для наращивания позиций.

Стратегический принцип

Стратегия использует три различных цикла SMA в качестве основных показателей для определения тенденции, включая 200-циклические, 400-циклические и 600-циклические SMA. Цены, находящиеся выше трех SMA, оцениваются как восходящие, а наоборот - как взлетно-посадочные.

В качестве индикатора входов стратегия сочетает в себе использование цены закрытия и колебателя StochClose. Сигнал подается только в том случае, если цена совпадает с направлением тройной SMA.

Стоп-стандарт - это стоп-стандарт, когда цена достигает наименьшего SMA.

Стратегия позволяет делать ставки максимум 10 раз и устанавливает стопы в трех разных пропорциях: 1%, 2% и 6% соответственно.

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

Наибольшим преимуществом трёхмерной стратегии SMA является то, что она позволяет лучше определять направление и силу тренда, используя в комбинации три различных цикла SMA. Она обладает большей способностью отфильтровывать ложные сигналы, чем один-единственный SMA.

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

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

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

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

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

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

Чтобы снизить эти риски, можно соответствующим образом скорректировать периодичность SMA; или добавить другие показатели для комбинированного суждения, такие как KDJ, MACD и т. д., чтобы гарантировать качество входящего сигнала.

Направление оптимизации

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. Увеличить или скорректировать количество циклов SMA, чтобы найти наиболее подходящие для конкретного сорта циклические параметры

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

  3. Оптимизация стандартов стоп-лосса, чтобы они лучше соответствовали колебаниям рынка

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

  5. Тестирование параметров различных сортов, чтобы параметры стратегии были полностью адаптированы к большему количеству сортов

Подвести итог

Тройная SMA стратегия в целом является очень практичной стратегией для отслеживания тенденций. Она обеспечивает лучшую эффективность определения тенденции путем комбинирования трех различных циклов SMA и показателей StochClose, что позволяет эффективно избегать ошибочных сигналов. При этом допускается надлежащее наложение, что позволяет всегда отслеживать тенденцию к участию в прибыли.

Исходный код стратегии
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Tripla Sma with entries based on sma price closes ", shorttitle="TRIPLE SMA STRATEGY", overlay=true) ////resolution=""
len = input(200, minval=1, title="sma 1 length")
len1 = input(400, minval=1, title="sma 2 length")
len2 = input(600, minval=1, title="sma 3 length")
src = input(close, title="Source")
////////////////////////////////////////////
smma = 0.0
smma := na(smma[1]) ? sma(src, len) : (smma[1] * (len - 1) + src) / len

up = smma > smma [1]
down =smma < smma[1]
mycolor = up ? #64b5f6 : down ? #d32f2f : na
fastma = sma(hl2, 1)

fastplot = plot(fastma, color=#000000, transp=100, title='sma on candle')
slowplot = plot(smma, color=mycolor, transp=55, title='sma1')

////////////////////////////////////////////
smma1 = 0.0
smma1 := na(smma1[1]) ? sma(src, len1) : (smma1[1] * (len1 - 1) + src) / len1

up2 = smma1 > smma1 [1]
down2 =smma1 < smma1[1]

mycolor2 = up2 ? #64b5f6 : down2 ? #d32f2f : na
slowplot2 = plot(smma1, color=mycolor2, transp=45, title='sma2')

////////////////////////////////////////////
smma2 = 0.0
smma2 := na(smma2[1]) ? sma(src, len2) : (smma2[1] * (len2 - 1) + src) / len2

up3 = smma2 > smma2 [1]
down3 =smma2 < smma2[1]

mycolor3 = up3 ? #64b5f6 : down3 ? #d32f2f : na
slowplot3 = plot(smma2, color=mycolor3, transp=35, title='sma3')

////////////////////////////////////////////////////////////////////////////////////////
//Fill gaps
fillData = smma > fastma
fillData2 = smma < fastma

fillDtat = smma1 > smma
fillDtat2 = smma1 < smma

fillDat = smma2 > smma1
fillDat2 = smma2 < smma1


fillCol1 = fillData ? #ef5350 : fillData2 ? #64b5f6 : na
fillCol2 = fillDtat ? #ef5350 : fillDtat2 ? #64b5f6 : na
fillCol3 = fillDat ? #ef5350 : fillDat2 ? #64b5f6 : na


fill(slowplot, fastplot, color=fillCol1, transp=90, title="sma1 fill")
fill(slowplot, slowplot2, color=fillCol2, transp=80, title="sma2 fill")
fill(slowplot2, slowplot3, color=fillCol3, transp=60, title="sma3 fill")

uc = (close > smma) and (close > smma1)
dc = (close < smma) and (close < smma1)

barColor = uc ? #64b5f6 : dc ? #e91e63 : #b2b5be
barcolor(color=barColor)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//StochClose from @trendinvestpro 
periods = input(50, minval=1, title="length for the oscillator")
smooth = input(5, minval=1, title="oscillator smoothing")
hhc=highest(close,periods)
llc=lowest(close,periods)
StochClose = sma((close-llc)/(hhc-llc)*100, smooth)

shortline = input(95, minval=0, title="signal when oscillator crosses above")
longline = input(5, minval=0, title="signal when oscillator crosses below")

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
longs = close > smma2
shorts = close < smma2



long = longs == true and crossunder(StochClose, longline)
short = shorts == true and crossover(StochClose, shortline)

stoplong = close < smma and close < smma1 and close < smma2
stopshort = close > smma and close > smma1 and close > smma2

p1 = strategy.position_avg_price / 100 / syminfo.mintick

maxx = input(2500, title="max orders filled on a day", minval=0)
takeprofit1 = input(1, title="take profit level 1", minval=0)
takeprofit2 = input(2, title="take profit level 2", minval=0)
takeprofit3 = input(6, title="take profit level 3", minval=0)

takeprofitqt1 = input(30, title="take profit quantity first", minval=0)
takeprofitqt2 = input(30, title="take profit quantity second", minval=0)
takeprofitqt3 = input(30, title="take profit quantity third", minval=0)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////Strategy entries/////////////////////////////////////////////////////////////////////////////////////////
// strategy.risk.max_intraday_filled_orders(maxx)
strategy.entry("long", strategy.long, when=long)
strategy.exit("tpl1", "long", qty_percent = takeprofitqt1, profit = takeprofit1 * p1)
strategy.exit("tpl2", "long", qty_percent = takeprofitqt2, profit = takeprofit2 * p1)
strategy.exit("tpl3", "long", qty_percent = takeprofitqt3, profit = takeprofit3 * p1)
strategy.close("long", when=stoplong == true)


strategy.entry("short", strategy.short, when=short)
strategy.exit("tpl1", "short", qty_percent = takeprofitqt1, profit = takeprofit1 * p1)
strategy.exit("tpl2", "short", qty_percent = takeprofitqt2, profit = takeprofit2 * p1)
strategy.exit("tpl3", "short", qty_percent = takeprofitqt3, profit = takeprofit3 * p1)
strategy.close("short", when=stopshort == true)