Контрарианская стратегия торговли - это стратегия, которая берет контрарианные сигналы на основе последовательных роста или падения цены, чтобы пойти в длинный путь, когда выполняется короткое условие, или идти в короткий путь, когда выполняется длинное условие.
Стратегия в основном реализуется в следующих частях:
Установите последовательные периоды для роста и падения цен, т.е. последовательные BarUp и BarDown. Когда тенденция текущего периода достигает установленной длины, запускается торговый сигнал.
Вычислить рост и падение текущей цены относительно цены предыдущего периода.
Установите диапазон времени обратного тестирования, чтобы ограничить стратегию работы только в течение времени обратного тестирования через time_cond.
Установите время суточной торговли, чтобы ограничить выпуск торговых сигналов только в установленные сроки через timetobuy.
Когда последовательный восходящий цикл достигает установленной длины, выдать длинный сигнал через strategy.long. Когда последовательный падший цикл достигает установленной длины, выдать короткий сигнал через strategy.short.
Можно установить цены стоп-лосса и стоп-прибыли. Установите краткосрочные стопы для длинных позиций и долгосрочные стопы для коротких позиций. Установите долгосрочные доходы для длинных позиций и краткосрочные доходы для коротких позиций.
Сообщения торгового сигнала могут быть настроены во время отправки.
Выпускать длинные или короткие сигналы, когда условия выполнены на основе вышеуказанных параметров и уровней цен.
Эта противоположная стратегия выхода имеет следующие преимущества:
Операции в противоположном направлении, когда цена формирует тенденцию, могут приносить прибыль при переворотах цен.
Гибкие конфигурируемые параметры. Параметры, такие как последовательные периоды, могут быть настроены, уровни стоп-лосса и прибыли могут быть установлены, временные рамки торговли могут быть ограничены. Параметры могут быть оптимизированы в соответствии с условиями рынка.
Установка стоп-лосса и сдачи прибыли заранее помогает контролировать торговые риски после длинного или короткого курса.
Торговые сообщения облегчают автоматическую торговлю.
Добавление параметров временного диапазона обратного тестирования позволяет легко наблюдать за эффективностью стратегии в различных рыночных условиях.
Стратегия также несет в себе некоторые риски:
Избегайте значительных новостей. Ценовые тенденции непредсказуемы во время крупных объявлений, вызывая одновременные длинные и короткие сигналы и потери.
Менее эффективно, когда обратные тенденции неясны. Менее эффективно, когда тенденции неоднозначны, противоположная торговля должна использоваться с осторожностью.
Оптимизация должна избегать чрезмерного использования данных обратного тестирования, которые не отражают будущие тенденции. Параметры должны корректироваться надлежащим образом во время торговли в режиме реального времени.
Высокая частота торгов рискует переоценкой.
Стоп-лосс и стратегии получения прибыли могут быть оптимизированы для снижения рисков.
Стратегия может быть дополнительно оптимизирована в следующих аспектах:
Добавить обнаружение тенденций, чтобы избежать случайных переворотов на рынках, не являющихся трендом, используя волатильность, каналы и т. Д. для измерения тенденций и улавливания переворотов.
Оптимизировать остановки и заимствования для корректировки на основе волатильности рынка, используя методы, основанные на процентах, ATR или другие адаптивные методы.
Добавьте анализ объема, чтобы избежать ложных сигналов только из ценовых моделей.
Диверсификация портфеля по нескольким продуктам для снижения риска одного актива.
Оптимизация параметров и машинное обучение. Собирать больше исторических данных и использовать машинное обучение для автоматической оптимизации параметров для более надежных стратегий.
Контрарианная стратегия прорыва обеспечивает хороший торговый сигнал, захватывая перевороты цен через контрарианные операции. Преимущества включают гибкую конфигурацию, контроль рисков и пригодность для автоматизированной торговли. Но существуют риски, и для долгосрочной стабильной прибыли необходимо постоянное улучшение параметров и логики.
/*backtest start: 2023-10-17 00:00:00 end: 2023-10-24 00:00:00 period: 45m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // Strategy strategy("Up/Down Strategy - Contrarian", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash) consecutiveBarsUp = input(1, title='Consecutive Bars Up') consecutiveBarsDown = input(1, title='Consecutive Bars Down') price = close ups = 0.0 ups := price > price[1] ? nz(ups[1]) + 1 : 0 dns = 0.0 dns := price < price[1] ? nz(dns[1]) + 1 : 0 // Strategy Backtesting startDate = input(timestamp("2021-01-01T00:00:00"), type = input.time, title='Backtesting Start Date') finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time, title='Backtesting End Date') time_cond = true //Time Restriction Settings startendtime = input("", title='Time Frame To Enter Trades') enableclose = input(false, title='Enable Close Trade At End Of Time Frame') timetobuy = true timetoclose = true // Stop Loss & Take Profit Tick Based enablesltp = input(false, title='Enable Take Profit & Stop Loss') stopTick = input(5.0, title='Stop Loss Ticks', type=input.float) / 100 takeTick = input(10.0, title='Take Profit Ticks', type=input.float) / 100 longStop = strategy.position_avg_price - stopTick shortStop = strategy.position_avg_price + stopTick shortTake = strategy.position_avg_price - takeTick longTake = strategy.position_avg_price + takeTick plot(strategy.position_size > 0 and enablesltp ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL") plot(strategy.position_size < 0 and enablesltp ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL") plot(strategy.position_size > 0 and enablesltp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit") plot(strategy.position_size < 0 and enablesltp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit") // Alert messages message_enterlong = input("", title="Long Entry message") message_entershort = input("", title="Short Entry message") message_closelong = input("", title="Close Long message") message_closeshort = input("", title="Close Short message") // Strategy Execution if (dns >= consecutiveBarsDown) and time_cond and timetobuy strategy.entry("Long", strategy.long, stop = high + syminfo.mintick, alert_message = message_enterlong) if (ups >= consecutiveBarsUp) and time_cond and timetobuy strategy.entry("Short", strategy.short, stop = low + syminfo.mintick, alert_message = message_entershort) if strategy.position_size < 0 and timetoclose and enableclose strategy.close_all(alert_message = message_closelong) if strategy.position_size > 0 and timetoclose and enableclose strategy.close_all(alert_message = message_closeshort) if strategy.position_size < 0 and enablesltp and time_cond strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong) if strategy.position_size > 0 and enablesltp and time_cond strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)