Стратегия следования за трендом на основе Ichimoku Kinko Hyo


Дата создания: 2024-01-18 15:03:28 Последнее изменение: 2024-01-18 15:03:28
Копировать: 2 Количество просмотров: 365
1
Подписаться
1214
Подписчики

Стратегия следования за трендом на основе Ichimoku Kinko Hyo

Обзор

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

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

Эта стратегия использует переходную линию, базовую линию, горизонтальную линию A, горизонтальную линию B и саму цену для определения направления и силы тренда. Конкретные критерии заключения следующие:

  1. В настоящее время облака широко распространены, и цены выше облаков.
  2. В будущем расширяются облака.
  3. Например, на картинке изображено, как на картинке изображено, что происходит.
  4. переводная линия над базовой;
  5. Цены выше конверсионной линии;
  6. Нынешняя и будущая линия A, линия B, эталонная линия и линия перехода находятся под углом вверх;

Сигнал покупать возникает, когда все вышеперечисленные условия одновременно выполнены; сигнал продавать возникает, когда все условия обратны.

Стратегия одновременно устанавливает переднюю линию A в качестве линии стоп-лосса. После того, как цена пересекает линию стоп-лосса, устраняется соответствующая позиция.

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

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

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

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

Стоп-линия в этой стратегии является более свободной, будущая линейка A. Это может привести к более высокому риску потерь. Можно рассмотреть возможность ужесточения стоп-линии или использовать вспомогательные показатели для контроля риска.

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

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

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

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

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

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

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

Исходный код стратегии
/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-17 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="BadaBing Ichimoku", shorttitle="BadaBing", overlay=true)

atr_period = input(title="ATR Period",  defval=20)
conversion_period = input(title="Conversion Line Period", defval=9, minval=1)
base_period = input(title="Base Line Period", defval=26, minval=1)
span_b_period = input(title="Span B Period", defval=52, minval=1)
displacement = input(title="Displacement", defval=26, minval=1)
min_current_cloud_atr = input(title="Min Current Cloud ATR", type=float, defval=1.0)
min_future_cloud_atr = input(title="Min Future Cloud ATR", type=float, defval=0)
check_base_line_above_cloud = input(title="Check Base Line above Cloud?", type=bool, defval=true)
check_conversion_line_above_base_line = input(title="Check Conversion Line above Base Line?", type=bool, defval=true)
check_price_above_conversion_line = input(title="Check Price above Conversion Line?", type=bool, defval=true)
check_span_a_point_up = input(title="Check Current Span A is pointing Up?", type=bool, defval=false)
check_span_b_point_up = input(title="Check Current Span B is pointing Up?", type=bool, defval=false)
check_future_span_a_point_up = input(title="Check Future Span A is pointing Up?", type=bool, defval=true)
check_future_span_b_point_up = input(title="Check Future Span B is pointing Up?", type=bool, defval=true)
check_base_line_point_up = input(title="Check Base Line is Pointing Up?", type=bool, defval=true)
check_conversion_line_point_up = input(title="Check Conversion Line is Pointing Up?", type=bool, defval=true)

bullish_color = #ccff99
bearish_color = #ff704d
span_a_color = #0000cc
span_b_color = #000066
conversion_color = #ff99ff
base_color = #4da6ff
bull_signal_color = #228b22
bear_signal_color = #990000

donchian(len) => avg(lowest(len), highest(len))
bchange(series) => series and not series[1]

conversion_line = donchian(conversion_period)
base_line = donchian(base_period)
future_span_a = avg(conversion_line, base_line)
future_span_b = donchian(span_b_period)
span_a = future_span_a[displacement]
span_b = future_span_b[displacement]
current_atr = atr(atr_period)

min_cloud_width = min_current_cloud_atr * current_atr
current_cloud_long_flag = span_a > (span_b + min_cloud_width)
current_cloud_short_flag = span_a < (span_b - min_cloud_width)
future_cloud_long_flag = future_span_a > (future_span_b + min_cloud_width)
future_cloud_short_flag = future_span_a < (future_span_b - min_cloud_width)
base_line_long_flag = check_base_line_above_cloud ? (base_line > span_a) : true
base_line_short_flag = check_base_line_above_cloud ? (base_line < span_a) : true
conversion_line_long_flag = check_conversion_line_above_base_line ? (conversion_line > base_line) : true
conversion_line_short_flag = check_conversion_line_above_base_line ? (conversion_line < base_line) : true
price_long_flag = check_price_above_conversion_line ? (close > conversion_line) : true
price_short_flag = check_price_above_conversion_line ? (close < conversion_line) : true
span_a_point_long_flag = check_span_a_point_up ? (span_a > span_a[1]) : true
span_a_point_short_flag = check_span_a_point_up ? (span_a < span_a[1]) : true
span_b_point_long_flag = check_span_b_point_up ? (span_b > span_b[1]) : true
span_b_point_short_flag = check_span_b_point_up ? (span_b < span_b[1]) : true
future_span_a_point_long_flag = check_future_span_a_point_up ? (future_span_a > future_span_a[1]) : true
future_span_a_point_short_flag = check_future_span_a_point_up ? (future_span_a < future_span_a[1]) : true
future_span_b_point_long_flag = check_future_span_b_point_up ? (future_span_b > future_span_b[1]) : true
future_span_b_point_short_flag = check_future_span_b_point_up ? (future_span_b < future_span_b[1]) : true
base_line_point_long_flag = check_base_line_point_up ? (base_line > base_line[1]) : true
base_line_point_short_flag = check_base_line_point_up ? (base_line < base_line[1]) : true
conversion_line_point_long_flag = check_conversion_line_point_up ? (conversion_line > conversion_line[1]) : true
conversion_line_point_short_flag = check_conversion_line_point_up ? (conversion_line < conversion_line[1]) : true


bada_long = bchange(current_cloud_long_flag)
   or bchange(future_cloud_long_flag)
   or bchange(base_line_long_flag)
   or bchange(conversion_line_long_flag)
   or bchange(price_long_flag)
   or bchange(span_a_point_long_flag)
   or bchange(span_b_point_long_flag)
   or bchange(future_span_a_point_long_flag)
   or bchange(future_span_b_point_long_flag)
   or bchange(base_line_point_long_flag)
   or bchange(conversion_line_point_long_flag)
bada_short = bchange(current_cloud_short_flag)
   or bchange(future_cloud_short_flag)
   or bchange(base_line_short_flag)
   or bchange(conversion_line_short_flag)
   or bchange(price_short_flag)
   or bchange(span_a_point_short_flag)
   or bchange(span_b_point_short_flag)
   or bchange(future_span_a_point_short_flag)
   or bchange(future_span_b_point_short_flag)
   or bchange(base_line_point_short_flag)
   or bchange(conversion_line_point_short_flag)
bada_color = bada_long ? bull_signal_color : bear_signal_color
plotshape(bada_long or bada_short, title="bada",
  style=shape.circle,
  location=location.belowbar,
  color=bada_color,
  transp=50)
   
bing_long = current_cloud_long_flag
   and future_cloud_long_flag
   and base_line_long_flag
   and conversion_line_long_flag
   and price_long_flag
   and span_a_point_long_flag
   and span_b_point_long_flag
   and future_span_a_point_long_flag
   and future_span_b_point_long_flag
   and base_line_point_long_flag
   and conversion_line_point_long_flag
bing_short = current_cloud_short_flag
   and future_cloud_short_flag
   and base_line_short_flag
   and conversion_line_short_flag
   and price_short_flag
   and span_a_point_short_flag
   and span_b_point_short_flag
   and future_span_a_point_short_flag
   and future_span_b_point_short_flag
   and base_line_point_short_flag
   and conversion_line_point_short_flag
bing_color = bing_long ? bull_signal_color : bear_signal_color
plotshape(bchange(bing_long or bing_short), title="bing",
   style=shape.diamond,
   location=location.abovebar,
   color=bing_color,
   transp=0)

c = plot(conversion_line, color=conversion_color, title="Conversion Line", linewidth=2)
b = plot(base_line, color=base_color, title="Base Line", linewidth=2)
p1 = plot(future_span_a, offset = displacement, color=span_a_color, title="Span A", linewidth=3)
p2 = plot(future_span_b, offset = displacement, color=red, title="Span B", linewidth=3)
fill(p1, p2, color = future_span_a > future_span_b ? bullish_color : bearish_color, transp = 60)

strategy.entry("long", true, 1, when=bing_long)
strategy.exit("stop", "long", stop=span_a)
strategy.close("long", when=close < base_line)
strategy.entry("short", false, 1, when=bing_short)
strategy.exit("stop", "short", stop=span_a)
strategy.close("short", when=close > base_line)