Стратегия отслеживания тренда балансовой линии Ичимоку

Автор:Чао Чжан, Дата: 2023-10-12 17:29:46
Тэги:

Обзор

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

Логика стратегии

Стратегия в основном использует следующие индикаторы Ichimoku:

  • Линия преобразования (Tenkan-sen): представляет собой краткосрочную тенденцию, рассчитанную как среднее значение наивысшего максимума и наименьшего минимума за последние 9 периодов.
  • Базовая линия (Kijun-sen): представляет собой среднесрочную тенденцию, рассчитанную как среднее значение самого высокого максимума и самого низкого минимума за последние 26 периодов
  • Лидирующее расстояние А (Senkou Span A): среднее значение конверсии и базовых линий
  • Leading Span B (Senkou Span B): среднее значение наивысшего максимума и наименьшего минимума за последние 52 периода.

Он длинный, когда цена переходит выше облака, и короткий, когда цена переходит ниже облака. Причины входа и выхода запускаются, когда цена переходит верхнюю и нижнюю части облака соответственно. Выходы запускаются, когда достигается соотношение прибыли или убытка.

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

  • Использует Ичимоку для определения направления тренда, избегая ложных сигналов от шума рынка
  • Разрыв облака сверху/внизу эффективно определяет точки переворота тренда
  • Точки получения прибыли и остановки потерь помогают зафиксировать прибыль и контролировать риск

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

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

Руководство по оптимизации

  • Подумайте о сочетании других показателей для повышения точности
  • Динамическая оптимизация параметров для различных периодов и рынков
  • Использование последующего остановки потери для корректировки остановок на основе движения цены и избежания раннего выхода
  • Разработка автоматизированной стратегии прибыли/убытка для разумной корректировки показателей на основе волатильности

Резюме

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


/*backtest
start: 2023-10-04 00:00:00
end: 2023-10-08 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Estratégia com Ichimoku" , pyramiding=0, calc_on_every_tick = true, initial_capital = 20000, commission_type = strategy.commission.cash_per_order, commission_value = 10.00)

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////Ichimoku Clouds////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////(VERSÃO 40.0)//////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

periodoLinhaDeConversao = input(defval=9, title="Tenkan-sen (Linha de Conversão)",  minval=1)
periodoLinhaBase = input(defval=26, title="Kijun-sen (Linha Base)",  minval=1)
periodoNivelAdiantadoB = input(defval=52, title="Senkou Span B (Nível adiantado B)",  minval=1)
deslocamento = input(defval=26, title="Deslocamento",  minval=1)

linhaDeConversao = (highest(high,periodoLinhaDeConversao)+lowest(low,periodoLinhaDeConversao))/2
linhaBase = (highest(high,periodoLinhaBase)+lowest(low,periodoLinhaBase))/2
nivelAdiantadoA = (linhaDeConversao + linhaBase)/2
nivelAdiantadoB = (highest(high,periodoNivelAdiantadoB)+lowest(low,periodoNivelAdiantadoB))/2

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
strategy.initial_capital = 50000
//Hardcoded quantity - strategy.entry(qty=)
capitalInicial = strategy.initial_capital
lotes = (strategy.initial_capital - (strategy.initial_capital % (open*100)))/open

//Percentage input goal - strategy.exit(profit=)
percentGoal = input (defval = 5.0, title = "Goal (%)", type = float, minval=0.0, step=0.1)
longGoal = (strategy.position_avg_price * (percentGoal/100)) * 100
shortGoal = (strategy.position_avg_price - (strategy.position_avg_price / (1+(percentGoal/100)))) * 100

//Percentage input stop - strategy.exit(loss=)
percentStop = input (defval = 0.5, title = "Stop (%)", type = float, minval=0.0, step=0.1)
longStop = (strategy.position_avg_price * (percentStop/100)) * 100
shortStop = (strategy.position_avg_price * (percentStop/100)) * 100

strategy.entry('entryLong', strategy.long, lotes, when = strategy.position_size == 0 and crossover(close,max(nivelAdiantadoA[deslocamento], nivelAdiantadoB[deslocamento])))
strategy.entry('entryShort', strategy.short, lotes, when = strategy.position_size == 0 and crossunder(close,min(nivelAdiantadoA[deslocamento], nivelAdiantadoB[deslocamento])))
strategy.exit('exitLong', 'entryLong', profit = longGoal, loss = longStop)
strategy.exit('exitShort', 'entryShort', profit = shortGoal, loss = shortStop)

plot(strategy.equity, title="Variação de capital", color=white)
//plot(strategy.position_size, color=red)

Больше