Эта стратегия использует многоцикличные адаптивные скользящие средние и индикаторы оценки риска зигзага в сочетании с этаповыми точками в работе рынка для прогнозирования тенденций и выпуска торговых сигналов.
Основная логика стратегии разделена на две основные линии. Первая основная линия использует адаптивные скользящие средние nAMA с различными параметрами для построения системы многоциклического фильтрационного суждения. Вторая основная линия использует систему оценки риска зигзага с различными параметрами для построения системы оценки риска многоциклического. Наконец, две основные линии объединяются. Когда линия короткого цикла превышает линию длинного цикла, генерируется сигнал покупки. Когда линия короткого цикла находится ниже линии длинного цикла, генерируется сигнал продажи.
В частности, первая основная линия устанавливает адаптивные скользящие средние 10-циклических и 4, 24 параметров соответственно. Вторая основная линия устанавливает зигзаговые линии оценки риска 7-циклических и 4, 300 параметров соответственно. Наконец, 10-циклическая линия в первой основной линии сравнивается с 31-циклической линией во второй основной линии, чтобы сформировать торговый сигнал. Когда 10-циклическая линия поднимается выше 31-циклической линии, генерируется сигнал покупки. Когда 10-циклическая линия падает ниже 31-циклической линии, генерируется сигнал продажи.
Кроме того, стратегия также устанавливает модуль подтверждения объема и цены. Торговые сигналы действительны только тогда, когда объем торгов больше среднего объема торговли на 6-х циклах. Это может отфильтровать ложные сигналы в некоторой степени. Наконец, стратегия набирает фазовые точки различных уровней цикла в качестве справочных сигналов.
Наибольшее преимущество этой стратегии заключается в применении многоцикличных адаптивных структур, которые могут адаптивно регулировать циклы в соответствии с рыночными условиями для динамического регулирования циклов.
Кроме того, стратегия использует многоцикличную совместную фильтрацию систем оценки риска зигзагов для эффективного контроля рисков торговли и избегания установления позиций во время фаз высокого риска.
Наибольший риск этой стратегии заключается в том, что она требует одного и того же направленного суждения о нескольких циклических линиях, поэтому способность захватить краткосрочные обратные рынки слаба. Когда короткоциклические линии и длинноциклические линии меняются одновременно, могут быть легко генерированы неясные сигналы. Циклы параметров могут быть сокращены для оптимизации.
Кроме того, основная фаза цикла адаптивной скользящей средней и цигзаговой системы оценки риска относительно коротка по сравнению с более широким рынком, и существует некоторое отставание в связи с более длительными уровнями.
Сократить основные параметры цикла адаптивной скользящей средней и линии оценки риска зигзагом до 5 циклов и 20 циклов, чтобы увеличить охват краткосрочных реверсий рынка.
Увеличить параметры основных циклов до 20 и 50 циклов, чтобы уменьшить задержку при более длительных рыночных драйверах.
Оптимизировать параметры торгового канала до 0,5-кратного ATR-канала, чтобы уменьшить возможность шумной торговли.
Добавить индикаторы проверки результатов, такие как 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")