Интеллектуальная стратегия торговли балансом с коротким и длинным циклом вращения

ATR SMA RSI BB MA
Дата создания: 2024-11-12 16:33:43 Последнее изменение: 2024-11-12 16:33:43
Копировать: 1 Количество просмотров: 506
1
Подписаться
1617
Подписчики

Интеллектуальная стратегия торговли балансом с коротким и длинным циклом вращения

Обзор

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

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

Стратегия в основном контролирует торговлю с помощью временных циклов и состояния позиции. Во-первых, с помощью функции inActivePeriod () определяется, находится ли он в пределах эффективного диапазона торговли на ближайших 500 K-линий. В пределах эффективного диапазона стратегия определяет поведение торговли в зависимости от таких переменных, как состояние позиции (positionHeld), время позиции (barsHeld) и время приостановки (barsPaused).

Стратегические преимущества

  1. Гибкость: поддержка двухсторонних торговых моделей с чистым многоголовым, чистым пустым или многоголовым
  2. Контролируемый риск: избегайте риска длительного хранения позиций, ограничивая время хранения позиций неделями
  3. Хорошо адаптируемый: способен автоматически корректировать направление торговли в зависимости от рыночной ситуации
  4. Простая работа: логика транзакций ясна, легко понятна и выполняется
  5. Высокая эффективность: повышение эффективности использования капитала с помощью частых ротаций
  6. Настраиваемость параметров: ключевые параметры могут быть гибко изменены в соответствии с реальными потребностями

Стратегический риск

  1. Частые сделки могут привести к более высоким расходам на комиссионные
  2. Некоторые эксперты считают, что в этом случае можно избежать риска.
  3. Фиксированный цикл хранения позиций может пропустить важные рыночные возможности
  4. Не учитывая рыночные тенденции, возможно, это будет противоположно основной тенденции.
  5. Отсутствие механизма сдерживания убытков, которые могут привести к большим убыткам в экстремальных случаях

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

  1. Введение показателей волатильности (например, ATR) для динамического регулирования времени удержания позиции
  2. Повышение показателей для определения тенденций, повышение точности направления торговли
  3. Добавление механизмов сдерживания убытков и повышение возможности управления рисками
  4. Оптимизируйте время входа, избегайте торговли в неблагоприятное время
  5. Внедрение системы управления капиталом и оптимизация размеров позиций
  6. Добавление индикатора настроения рынка для повышения точности торгов

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

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

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

//@version=5
strategy("Tickerly Test Strategy", overlay=true)

// Inputs
longEnabled = input.bool(true, "Enable Long Trades")
shortEnabled = input.bool(true, "Enable Short Trades")
swingEnabled = input.bool(false, "Enable Swing Trading")

// Variables
var positionHeld = 0
var barsHeld = 0
var barsPaused = 0
var lastAction = "none"

// Function to determine if we're in the last 500 bars
inActivePeriod() => 
    barIndex = bar_index
    lastBarIndex = last_bar_index
    barIndex >= (lastBarIndex - 499)

// Main strategy logic
if inActivePeriod()
    if swingEnabled
        if positionHeld == 0 and barstate.isconfirmed
            if lastAction != "long"
                strategy.entry("Long", strategy.long)
                positionHeld := 1
                barsHeld := 0
                lastAction := "long"
            else
                strategy.entry("Short", strategy.short)
                positionHeld := -1
                barsHeld := 0
                lastAction := "short"
        
        if positionHeld != 0
            barsHeld += 1
            if barsHeld >= 2
                if positionHeld == 1
                    strategy.entry("Short", strategy.short)
                    positionHeld := -1
                    barsHeld := 0
                    lastAction := "short"
                else
                    strategy.entry("Long", strategy.long)
                    positionHeld := 1
                    barsHeld := 0
                    lastAction := "long"
    else
        if positionHeld == 0 and barsPaused >= 1 and barstate.isconfirmed
            if longEnabled and shortEnabled
                if lastAction != "long"
                    strategy.entry("Long", strategy.long)
                    positionHeld := 1
                    barsHeld := 0
                    barsPaused := 0
                    lastAction := "long"
                else
                    strategy.entry("Short", strategy.short)
                    positionHeld := -1
                    barsHeld := 0
                    barsPaused := 0
                    lastAction := "short"
            else if longEnabled
                strategy.entry("Long", strategy.long)
                positionHeld := 1
                barsHeld := 0
                barsPaused := 0
                lastAction := "long"
            else if shortEnabled
                strategy.entry("Short", strategy.short)
                positionHeld := -1
                barsHeld := 0
                barsPaused := 0
                lastAction := "short"
        
        if positionHeld != 0
            barsHeld += 1
            if barsHeld >= 3
                strategy.close_all()
                positionHeld := 0
                barsHeld := 0
                barsPaused := 0  // Reset pause counter when exiting a position
        else
            barsPaused += 1

// Plotting active period for visual confirmation
plot(inActivePeriod() ? 1 : 0, "Active Period", color=color.new(color.blue, 80), style=plot.style_areabr)