
Эта стратегия использует различные сигналы, предоставляемые индикатором равновесного шкала, и разработала чисто трендовую стратегию отслеживания, предназначенную для захвата среднесрочных и долгосрочных тенденций, фильтрации шокирующих скорректировок и отслеживания направлений сильных тенденций.
Стратегия использует основные сигналы, такие как линии преобразования, базовые линии и линии задержки в индикаторах равновесного диаграмма облаков. В долгосрочных оценках тенденций основное внимание уделяется взаимосвязи изменений в верхнем и нижнем диапазонах облаков для определения тенденций; в конкретных выборах времени входа и выхода на рынок основное внимание уделяется пересечению линий преобразования и базовых линий, а также изменению отношений цены и диаграмма облаков.
В целом, центральная логика стратегии заключается в следующем: подтверждение направления среднесрочной и долгосрочной тенденции - > ожидание возможности возобновления сильной тенденции - > отслеживание входа в тренд - > отслеживание выхода из остановки.
В частности, при определении среднесрочной и долгосрочной тенденции определяется изменение соотношения переднего облака и заднего облака (если передний облак находится вверху и зеленый, то он представляет собой тенденцию к повышению, а наоборот - тенденцию к снижению). После подтверждения среднесрочной и долгосрочной тенденции, после пересечения линии переключения и базовой линии, а также сигнала прорыва цены на карте облака, тенденция начинается заново, посылается сигнал входа; после входа используется базовая линия в качестве стоп-линии для отслеживания убыточного выхода.
Таким образом, можно отфильтровать среднесрочные и краткосрочные колебания, а также использовать сильные тенденции для получения стабильной прибыли в долгосрочной перспективе на рынке ценных бумаг.
(i) использование диаграммы равновесного масштаба для определения направления среднесрочных и долгосрочных тенденций, что позволяет определить основные направления
(ii) пересечение переходных линий и базовых линий, а также изменения в ценовом отношении к диаграмме облаков, чтобы определить момент входа, эффективно фильтровать колебания и улавливать сильные тенденции
(iii) механизм отслеживания стоп-лосс-выхода, позволяющий получать прибыль от большого тренда и эффективно контролировать индивидуальные потери
(iv) объединение сигналов из множества равновесных диаграмм, формирование систематической стратегии отслеживания тенденций, стабильная и хорошая работа;
(i) системный риск ошибочного суждения в среднесрочной и долгосрочной перспективе. Если среднесрочная и долгосрочная тенденции ошибочно суждаются, то последующие операции будут подвержены риску ошибочного направления.
(ii) риски, связанные с неправильным выбором времени входа.
(III) риски отслеживания остановки, вызванные слишком близким расстоянием. Если остановка находится слишком близко, в крайних случаях может быть преодолена остановка и вызвать убытки.
(iv) бремя сборов за транзакции, вызванное слишком высокой частотой транзакций. Если из-за неправильной настройки параметров частота транзакций становится слишком высокой, то сборы за транзакции также увеличиваются.
(i) тестирование комбинаций различных параметров равновесного цикла, чтобы найти оптимальные параметры
(ii) оптимизация условий въезда, создание более строгих фильтров для обеспечения эффективного въезда;
(III) Корректировка стоп-драйва для достижения оптимального баланса между рисками и доходами
(iv) добавление целевых цен на прибыль в сочетании с расстоянием между ценами и ключевыми показателями равновесия, формируя механизм динамического получения прибыли
Эта стратегия для отслеживания трендов на равновесном шкале облака, включающая в себя несколько сигналов для определения направления тренда, времени входа в игру, остановки и выхода из нее. Практика показывает, что эта стратегия может эффективно улавливать среднесрочные и долгосрочные тенденции, фильтровать колебания и стабильно получать избыточную прибыль. В будущем, с помощью постоянного тестирования оптимизации, ожидается дальнейшее улучшение эффективности стратегии и получение лучшей отдачи.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Ichimoku trendfollowing", overlay=true, initial_capital=1000, commission_type=strategy.commission.cash_per_order, commission_value=0.04, slippage=2)
//***************************
// INPUT BACKTEST RANGE *
//***************************
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2010, title = "From Year", minval = 2000)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2000)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true
//***************
//* ICHIMOKU *
//***************
//inizializzazione parametri,,
tenkanPeriods = input(9, minval=1, title="Tenkan-Sen")
kinjunPeriods = input(26, minval=1, title="Kinjun-Sen")
senkouSpanBPeriods = input(52, minval=1, title="Senkou Span B")
displacement = input(26, minval=1, title="-ChinkouSpan/+SenkouSpan A")
//definizione Tenkan-Sen (9 Period), Kinjun-Sen (26 Period), Chinkou Span (Lagging Line)
averageHighLow(period) => avg(lowest(period), highest(period))
tenkan= averageHighLow(tenkanPeriods)
kinjun = averageHighLow(kinjunPeriods)
senkouSpanA = avg(tenkan, kinjun)
senkouSpanB = averageHighLow(senkouSpanBPeriods)
//definisco il colore della kumo in base al trend.
senkouSpan1Above = senkouSpanA >= senkouSpanB ? 1 : na
senkouSpan2Below = senkouSpanA <= senkouSpanB ? 1 : na
span1plotU = senkouSpan1Above ? senkouSpanA : na
span2plotU = senkouSpan1Above ? senkouSpanB : na
span1plotD = senkouSpan2Below ? senkouSpanA : na
span2plotD = senkouSpan2Below ? senkouSpanB : na
col = senkouSpanA >= senkouSpanB ? lime : red
//plots Ichimoku
plot(tenkan, title = 'Tenkan-Sen', linewidth=1, color=blue)
plot(kinjun, title = 'Kinjun-Sen', linewidth=1, color=red)
plot(close, title = 'Chinkou Span', linewidth=1, offset = -displacement, color=aqua)
plot( senkouSpanA, title = 'Senkou Span A', style=line, linewidth=1, offset = displacement, color=lime)
plot(senkouSpanB, title = 'Senkou Span B', style=line, linewidth=1, offset = displacement, color=red)
//Cloud Lines Plot
p1 = plot(span1plotU ? span1plotU : na, title = 'Senkou Span A Above Senkou Span B', style=linebr, linewidth=1, offset = displacement, color=col)
p2 = plot(span2plotU ? span2plotU : na, title = 'Senkou Span B (52 Period) Below Span A Cloud', style=linebr, linewidth=1, offset = displacement, color=col)
p3 = plot(span1plotD ? span1plotD : na, title = 'Senkou Span A (26 Period) Below Span B Cloud', style=linebr, linewidth=1, offset = displacement, color=col)
p4 = plot(span2plotD ? span2plotD : na, title = 'Senkou Span B (52 Period) Above Span A Cloud', style=linebr, linewidth=1, offset = displacement, color=col)
//Fills that color cloud based on Trend.
fill(p1, p2, color=lime, transp=70, title='Kumo (Cloud)')
fill(p3, p4, color=red, transp=70, title='Kumo (Cloud)')
//***********************************************
//* condizioni ingresso ed uscita mercato *
//***********************************************
isKumoRialzista = senkouSpanA >= senkouSpanB ? true : false
isSopraKumo = (close > max(senkouSpanA[displacement], senkouSpanB[displacement]))
isSottoKumo = (close < min(senkouSpanA[displacement], senkouSpanB[displacement]))
isChinkouSpanSopra = high[displacement]<close
isChinkouSpanSotto = low[displacement]>close
filtroLong=isSopraKumo and isChinkouSpanSopra
filtroShort=isSottoKumo and isChinkouSpanSotto
//rimbalzato su kijun quando i prezzi stavano ritracciando e il trend era già in atto(tenkan >kijun x entrare long
isPullBackLijunEntryLong = kinjun<tenkan and low<kinjun and (close>kinjun)
isPullBackLijunEntryShort =kinjun>tenkan and high>kinjun and (close<kinjun)
//Breackout Kumo
isBreackoutKumoEntryLong = crossover(close, max(senkouSpanA[displacement], senkouSpanB[displacement])) and (close>tenkan) and (close>kinjun)
isBreackoutKumoEntryShort = crossunder(close, min(senkouSpanA[displacement], senkouSpanB[displacement])) and (close<tenkan) and (close<kinjun)
ConditionEntryLong = (isPullBackLijunEntryLong or isBreackoutKumoEntryLong ) and filtroLong
ConditionEntryShort = (isPullBackLijunEntryShort or isBreackoutKumoEntryLong ) and filtroShort
isExitLong = close<kinjun
isExitShort = close>kinjun
//ingressi ed uscite Mercato
strategy.entry ("Long",long=true, when = window() and ConditionEntryLong)
strategy.entry ("Short",long=false, when = window() and ConditionEntryShort)
strategy.close(id="Long", when=isExitLong)
strategy.close(id="Short", when=isExitShort)
strategy.close_all(when=not window())