Многоциклическая стратегия прогнозирования адаптивных тенденций

Автор:Чао Чжан, Дата: 2024-02-01 14:34:38
Тэги:

img

Обзор

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

Принцип стратегии

Основная логика стратегии разделена на две основные линии. Первая основная линия использует адаптивные скользящие средние nAMA с различными параметрами для построения системы многоциклического фильтрационного суждения. Вторая основная линия использует систему оценки риска зигзага с различными параметрами для построения системы оценки риска многоциклического. Наконец, две основные линии объединяются. Когда линия короткого цикла превышает линию длинного цикла, генерируется сигнал покупки. Когда линия короткого цикла находится ниже линии длинного цикла, генерируется сигнал продажи.

В частности, первая основная линия устанавливает адаптивные скользящие средние 10-циклических и 4, 24 параметров соответственно. Вторая основная линия устанавливает зигзаговые линии оценки риска 7-циклических и 4, 300 параметров соответственно. Наконец, 10-циклическая линия в первой основной линии сравнивается с 31-циклической линией во второй основной линии, чтобы сформировать торговый сигнал. Когда 10-циклическая линия поднимается выше 31-циклической линии, генерируется сигнал покупки. Когда 10-циклическая линия падает ниже 31-циклической линии, генерируется сигнал продажи.

Кроме того, стратегия также устанавливает модуль подтверждения объема и цены. Торговые сигналы действительны только тогда, когда объем торгов больше среднего объема торговли на 6-х циклах. Это может отфильтровать ложные сигналы в некоторой степени. Наконец, стратегия набирает фазовые точки различных уровней цикла в качестве справочных сигналов.

Анализ стратегических преимуществ

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

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

Анализ стратегических рисков

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

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

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

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

  2. Увеличить параметры основных циклов до 20 и 50 циклов, чтобы уменьшить задержку при более длительных рыночных драйверах.

  3. Оптимизировать параметры торгового канала до 0,5-кратного ATR-канала, чтобы уменьшить возможность шумной торговли.

  4. Добавить индикаторы проверки результатов, такие как MACD, для повышения надежности сигнала.

Резюме

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


/*backtest
start: 2023-01-25 00:00:00
end: 2024-01-31 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Best Rabbit Strategy", shorttitle="Rabbit God",overlay=true)
Length = input(10, minval=1)
xPrice = close
xvnoise = abs(xPrice - xPrice[1])
Fastend = input(2)
Slowend = input(30)
nfastend = 2/(Fastend + 1)
nslowend = 2/(Slowend + 1)
nsignal = abs(xPrice - xPrice[Length])
nnoise = sum(xvnoise, Length)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) 
nAMA = nz(nAMA[1]) + nsmooth * (xPrice - nz(nAMA[1]))

Length2 = input(10, minval=1)
xPrice2 = close
xvnoise2 = abs(xPrice2 - xPrice2[1])
Fastend2 = input(4)
Slowend2 = input(24)
nfastend2 = 2/(Fastend2 + 1)
nslowend2 = 2/(Slowend2 + 1)
nsignal2 = abs(xPrice2 - xPrice2[Length2])
nnoise2 = sum(xvnoise, Length2)
nefratio2 = iff(nnoise2 != 0, nsignal2 / nnoise2, 0)
nsmooth2 = pow(nefratio2 * (nfastend2 - nslowend2) + nslowend2, 2) 
nAMA2 = nz(nAMA2[1]) + nsmooth2 * (xPrice2 - nz(nAMA2[1]))

price = input(hl2)
len = input(defval=7,minval=1)
FC = input(defval=4,minval=1)
SC = input(defval=300,minval=1)
len1 = len/2
w = log(2/(SC+1))
H1 = highest(high,len1)
L1 = lowest(low,len1)
N1 = (H1-L1)/len1
H2 = highest(high,len)[len1]
L2 = lowest(low,len)[len1]
N2 = (H2-L2)/len1
H3 = highest(high,len)
L3 = lowest(low,len)
N3 = (H3-L3)/len
dimen1 = (log(N1+N2)-log(N3))/log(2)
dimen = iff(N1>0 and N2>0 and N3>0,dimen1,nz(dimen1[1]))
alpha1 = exp(w*(dimen-1))
oldalpha = alpha1>1?1:(alpha1<0.01?0.01:alpha1)
oldN = (2-oldalpha)/oldalpha
N = (((SC-FC)*(oldN-1))/(SC-1))+FC
alpha_ = 2/(N+1)
alpha = alpha_<2/(SC+1)?2/(SC+1):(alpha_>1?1:alpha_)
out = (1-alpha)*nz(out[1]) + alpha*price

price2 = input(hl2)
len2 = input(defval=31,minval=1)
FC2 = input(defval=40,minval=1)
SC2 = input(defval=300,minval=1)
len12 = len2/2
w2 = log(2/(SC2+1))
H12 = highest(high,len12)
L12 = lowest(low,len12)
N12 = (H1-L1)/len12
H22 = highest(high,len2)[len12]
L22 = lowest(low,len2)[len12]
N22 = (H22-L22)/len12
H32 = highest(high,len2)
L32 = lowest(low,len2)
N32 = (H32-L32)/len2
dimen12 = (log(N12+N22)-log(N32))/log(2)
dimen2 = iff(N12>0 and N22>0 and N32>0,dimen12,nz(dimen12[1]))
alpha12 = exp(w*(dimen2-1))
oldalpha2 = alpha12>1?1:(alpha12<0.01?0.01:alpha12)
oldN2 = (2-oldalpha2)/oldalpha2
N4 = (((SC2-FC2)*(oldN2-1))/(SC2-1))+FC2
alpha_2 = 2/(N4+1)
alpha2 = alpha_2<2/(SC2+1)?2/(SC2+1):(alpha_2>1?1:alpha_2)
out2 = (1-alpha2)*nz(out2[1]) + alpha2*price2

tf = input(title="Resolution",  defval = "current")
vamp = input(title="VolumeMA",  defval=6)
vam = sma(volume, vamp)

up = high[3]>high[4] and high[4]>high[5] and high[2]<high[3] and high[1]<high[2] and volume[3]>vam[3]
down = low[3]<low[4] and low[4]<low[5] and low[2]>low[3] and low[1]>low[2] and volume[3]>vam[3]
fractalup =  up ? high[3] : fractalup[1] 
fractaldown = down ? low[3] : fractaldown[1]

fuptf = request.security(syminfo.tickerid,tf == "current" ? timeframe.period : tf, fractalup)
fdowntf = request.security(syminfo.tickerid,tf == "current" ? timeframe.period : tf, fractaldown)

plot(fuptf, "FractalUp", color=lime, linewidth=1, style=cross, transp=0, offset =-3, join=false)
plot(fdowntf, "FractalDown", color=red, linewidth=1, style=cross, transp=0, offset=-3, join=false)

buyEntry= nAMA[0]>nAMA2[0] and out[0]>out2[0]
sellEntry= nAMA[0]<nAMA2[0] and out[0]<out2[0]

if (buyEntry)
    strategy.entry("Buy", strategy.long, comment="Long Position Entry")


if (sellEntry)
    strategy.entry("Sell", strategy.short, comment="Short Position Entry")

Больше