Расширенная количественная торговая стратегия: автоматизированная система исполнения, основанная на внутридневном импульсе и управлении рисками

DOJI SL TP ATR momentum
Дата создания: 2025-02-21 14:25:50 Последнее изменение: 2025-02-27 16:57:06
Копировать: 2 Количество просмотров: 446
2
Подписаться
319
Подписчики

Расширенная количественная торговая стратегия: автоматизированная система исполнения, основанная на внутридневном импульсе и управлении рисками Расширенная количественная торговая стратегия: автоматизированная система исполнения, основанная на внутридневном импульсе и управлении рисками

Обзор

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

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

Основная логика стратегии основана на нескольких ключевых компонентах: во-первых, время торговли ограничено Лондонским временем (за исключением 0 и 19 часов), чтобы обеспечить достаточную рыночную ликвидность. Входные сигналы основаны на динамике цен.

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

  1. Комплексный риск-менеджмент: включает фиксированные стоп-стоп, ежедневные стоп-стоп и динамическое управление позициями
  2. Самостоятельная адаптация: размер сделки автоматически корректируется в зависимости от интересов счета и приспосабливается к разным размерам средств
  3. Гарантия ликвидности: строгое ограничение выполнения сделок во время торгов в Лондоне, чтобы избежать риска низкой ликвидности
  4. Фильтрация фальшивых сигналов: уменьшение убытков от фальшивых прорывов путем исключения форм дожи и последовательных сигналов
  5. Ясность логики выполнения: четкие условия входа и выхода, которые можно легко контролировать и оптимизировать

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

  1. Риск рыночной волатильности: фиксированные стоп-лозы могут быть недостаточно гибкими во время высокой волатильности
  2. Риск падения цены: существенный риск падения цены при быстрых рыночных изменениях
  3. Трендозависимость: стратегия может создавать больше ложных сигналов на рынке во время колебаний
  4. Чувствительность параметров: параметры стоп-стоп оказывают большое влияние на эффективность стратегии Решения включают в себя: использование механизма динамического остановки убытков, добавление фильтров рыночной волатильности, введение индикаторов подтверждения тенденции и т. д.

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

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

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

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

Исходный код стратегии
/*backtest
start: 2025-01-21 00:00:00
end: 2025-02-08 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Trading Strategy for XAUUSD (Gold) – Automated Execution Plan", overlay=true, initial_capital=10000, currency=currency.USD)

//────────────────────────────
// 1. RISK MANAGEMENT & POSITION SIZING
//────────────────────────────
// Configurable inputs for Stop Loss and Take Profit
sl = input.float(title="Stop Loss ($)", defval=5, step=0.1)
tp = input.float(title="Take Profit ($)", defval=15, step=0.1)

// Volume: 0.01 lots per $100 of equity → lotSize = equity / 10000
lotSize = strategy.equity / strategy.initial_capital

//────────────────────────────
// 2. TRADING HOURS (London Time)
//────────────────────────────
// Get the current bar's timestamp in London time.
londonTime   = time(timeframe.period, "", "Europe/London")
londonHour   = hour(londonTime)
tradingAllowed = (londonHour != 0) and (londonHour < 19)

//────────────────────────────
// 3. DOJI CANDLE DEFINITION
//────────────────────────────
// A candle is considered a doji if the sum of its upper and lower shadows is greater than its body.
upperShadow = high - math.max(open, close)
lowerShadow = math.min(open, close) - low
bodySize    = math.abs(close - open)
isDoji      = (upperShadow + lowerShadow) > bodySize

//────────────────────────────
// 4. ENTRY CONDITIONS
//────────────────────────────
// Buy Signal:
//   • Current candle’s high > previous candle’s high.
//   • Current candle’s low is not below previous candle’s low.
//   • Bullish candle (close > open) and not a doji.
//   • Skip if previous candle already qualified.
buyRaw    = (high > high[1]) and (low >= low[1]) and (close > open) and (not isDoji)
buySignal = buyRaw and not (buyRaw[1] ? true : false)

// Sell Signal:
//   • Current candle’s low < previous candle’s low.
//   • Current candle’s high is not above previous candle’s high.
//   • Bearish candle (close < open) and not a doji.
//   • Skip if previous candle already qualified.
sellRaw    = (low < low[1]) and (high <= high[1]) and (close < open) and (not isDoji)
sellSignal = sellRaw and not (sellRaw[1] ? true : false)

//────────────────────────────
// 5. DAILY TAKE PROFIT (TP) RULE
//────────────────────────────
// Create a day-string (year-month-day) using London time.
// This flag will block new trades for the rest of the day if a TP is hit.
var string lastDay = ""
currentDay = str.tostring(year(londonTime)) + "-" + str.tostring(month(londonTime)) + "-" + str.tostring(dayofmonth(londonTime))
var bool dailyTPHit = false
if lastDay != currentDay
    dailyTPHit := false
    lastDay := currentDay

//────────────────────────────
// 6. TRACK TRADE ENTRY & EXIT FOR TP DETECTION
//────────────────────────────
// We record the TP target when a new trade is entered.
// Then, when a trade closes, if the bar’s high (for long) or low (for short) reached the TP target,
// we assume the TP was hit and block new trades for the day.
var float currentTP = na
var int currentTradeType = 0   // 1 for long, -1 for short

// Detect a new trade entry (transition from no position to a position).
tradeEntered = (strategy.position_size != 0 and strategy.position_size[1] == 0)
if tradeEntered
    if strategy.position_size > 0
        currentTP := strategy.position_avg_price + tp
        currentTradeType := 1
    else if strategy.position_size < 0
        currentTP := strategy.position_avg_price - tp
        currentTradeType := -1

// Detect trade closure (transition from position to flat).
tradeClosed = (strategy.position_size == 0 and strategy.position_size[1] != 0)
if tradeClosed and not na(currentTP)
    // For a long trade, if the bar's high reached the TP target;
    // for a short trade, if the bar's low reached the TP target,
    // mark the daily TP flag.
    if (currentTradeType == 1 and high >= currentTP) or (currentTradeType == -1 and low <= currentTP)
        dailyTPHit := true
    currentTP := na
    currentTradeType := 0

//────────────────────────────
// 7. ORDER EXECUTION
//────────────────────────────
// Only open a new position if no position is open, trading is allowed, and daily TP rule is not active.
if (strategy.position_size == 0) and tradingAllowed and (not dailyTPHit)
    if buySignal
        strategy.entry("Long", strategy.long, qty=lotSize)
    if sellSignal
        strategy.entry("Short", strategy.short, qty=lotSize)

//────────────────────────────
// 8. EXIT ORDERS (Risk Management)
//────────────────────────────
// For long positions: SL = entry price - Stop Loss, TP = entry price + Take Profit.
// For short positions: SL = entry price + Stop Loss, TP = entry price - Take Profit.
if strategy.position_size > 0
    longSL = strategy.position_avg_price - sl
    longTP = strategy.position_avg_price + tp
    strategy.exit("Exit Long", from_entry="Long", stop=longSL, limit=longTP)
if strategy.position_size < 0
    shortSL = strategy.position_avg_price + sl
    shortTP = strategy.position_avg_price - tp
    strategy.exit("Exit Short", from_entry="Short", stop=shortSL, limit=shortTP)

//────────────────────────────
// 9. VISUALIZATION
//────────────────────────────
plotshape(buySignal and tradingAllowed and (not dailyTPHit) and (strategy.position_size == 0), title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(sellSignal and tradingAllowed and (not dailyTPHit) and (strategy.position_size == 0), title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")