В процессе загрузки ресурсов... загрузка...

Интеллектуальная стратегия сбалансированной торговли на основе долгосрочной и краткосрочной ротации

Автор:Чао Чжан, Дата: 2024-11-12 16:33:43
Тэги:ATRSMAРСИББМ.А.

img

Обзор

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

Принцип стратегии

Стратегия в первую очередь контролирует торговлю через временные периоды и статус позиции. Во-первых, функция inActivePeriod() определяет, находится ли торговля в пределах эффективного торгового интервала последних 500 бар. В пределах эффективного интервала стратегия решает торговые действия на основе переменных, таких как статус позиции (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)

Связанные

Больше