Торговая стратегия отслеживания импульса

Автор:Чао Чжан, Дата: 2023-12-20 16:06:26
Тэги:

img

Обзор стратегии

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

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

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

Судебное решение по основной власти

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

Когда волатильность ослабевает, это означает, что накопление или распределение основной силы завершено, и стратегия снова войдет на рынок, чтобы определить конкретное направление основной силы. Метод суждения заключается в расчете позиций поддержки и давления на рынке, чтобы увидеть, есть ли признаки прорыва. Если есть ясный прорыв, это докажет, что основные фонды выбрали это направление.

Судебное решение

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

Только когда направление основных фондов и вспомогательных индикаторов дают сигналы в одном направлении, стратегия будет открывать позиции.

Выход с остановкой потери

После открытия позиций стратегия отслеживания импульса будет отслеживать изменения цен в режиме реального времени и использовать расширение значений ATR в качестве сигнала остановки потери.

Кроме того, если движение цены превышает определенный диапазон, а затем снижается, также произойдет стоп-лосс.

Преимущества стратегии

Высокая системность

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

Это делает эту стратегию очень эффективной, и пользователи могут применять ее для длительного использования после настройки без ручного вмешательства.

Зрелый контроль рисков

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

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

Относительно устойчивые доходы

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

Кроме того, стратегия отслеживает среднесрочные и долгосрочные тенденции, которые могут полностью отразить волатильность тенденций.

Предупреждения о риске

Трудная оптимизация параметров

Стратегия отслеживания импульса включает в себя несколько параметров, таких как параметры ATR, параметры проникновения, параметры остановки потерь и т. Д. Существует определенная корреляция между этими параметрами, что требует повторного тестирования для поиска оптимальной комбинации параметров.

Неправильная конфигурация параметров может легко привести к чрезмерной частоте торговли или недостаточному контролю рисков.

Ловушка для побега

Когда стратегия определяет основные сигналы мощности и индикатора, она опирается на прорыв цен для подтверждения.

Если ключевой прорыв не удастся, это может привести к большим потерям.

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

Внедрение машинного обучения

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

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

Увеличить фильтры

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

Но слишком много фильтров также может привести к упущенным возможностям. Интенсивность фильтра должна быть сбалансирована. Кроме того, сами фильтры также должны избегать корреляции.

Стратегия слияния

Комбинировать стратегию отслеживания импульса с другими стратегиями, чтобы использовать преимущества различных стратегий для достижения ортогональности и улучшения общей стабильности.

Например, внедрение краткосрочных стратегий обратной торговли и открытие обратных сделок после прорыва может обеспечить большую прибыль.

Резюме

В целом, стратегия трейдинга с отслеживанием тренда является систематизированной стратегией отслеживания тренда, которую стоит рекомендовать.

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


/*backtest
start: 2023-12-12 00:00:00
end: 2023-12-15 01:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Created by frasmac2k Strategy credit to Alex Morris

//@version=5
strategy("Mechanical", shorttitle="MECH", overlay=true)

// Get the current date and time
currentYear = year
currentMonth = month
currentDay = dayofmonth

// Create a timestamp for the present date and time
currentTimestamp = timestamp(currentYear, currentMonth, currentDay)

// Define time interval for backtesting
dStart = input(timestamp('2023-07-01'), title='Set Start date', tooltip='Select a start date to run the script from')

// Define direction of strategy
direction = input.string('Forward',title='Direction', tooltip='Forward will go LONG on a Green anchor candle. Inverse will go short on a Green anchor candle and vice versa for Red candle', options=['Forward', 'Inverse'])

// Define the anchor hour as user input with a range of 0 to 23
anchorHour = input.int(11, title="Anchor Hour", tooltip='Set the hour to trade', minval=0, maxval=23)

// Define the take profit and stop loss in pips
takeProfitPips = input.int(10, title='Define TP Pips', tooltip='How many pips do you want to set TP. Choose a sensible value related to the instrument', minval=5)
stopLossPips = input.int(10,'Define SL Pips', tooltip='How many pips do you want to set SL. Choose a sensible value related to the instrument', minval=5)

// Define Tick size
tick10p = input.int(100, title='tick size', tooltip='Choose how many ticks equal 10 pips. This can vary by broker so measure 10 pips on the chart and select how many ticks that equates to. Forex is typically 100. Some instruments such as indices can be 1000', options=[100,1000])

// Declare TP/SL variables
var float takeProfit = na
var float stopLoss = na

// Calculate take profit and stop loss levels in ticks
if tick10p == 100
    takeProfit := takeProfitPips * 10
    stopLoss := stopLossPips * 10
if tick10p == 1000
    takeProfit := takeProfitPips * 100
    stopLoss := stopLossPips * 100

// Declare offset time
var int offset = na

if currentTimestamp > timestamp('2023-10-29')
    offset := 4
else
    offset := 5

//adjust for exchange time
anchorHour := anchorHour - offset

// Define the anchor hour as user input with a range of 0 to 23
tradeHour = anchorHour

// Define logical check for strategy date range
isStratTime = true

// Calculate the time condition for placing the order at the user-defined hour (start of the next hour)
isTradeTime = true

// Logic condition for forwards or inverse
isForward = direction == 'Forward'
isInverse = direction == 'Inverse'

// Declare entry condition variables
var bool longCondition = na
var bool shortCondition = na

// Declare and initialize variables for anchorCandle open and close prices
var float anchorOpen = na
var float anchorClose = na
var float tradeOpen = na
var float tradeClose = na

// Set logic by direction

if isForward
    // Strategy logic
    if isTradeTime and isStratTime
        //Obtain candle open/close
        anchorOpen := open
        anchorClose := close
        // Define entry conditions
        longCondition := anchorClose > anchorOpen
        shortCondition := anchorClose < anchorOpen
        
        // Entry logic
        if longCondition
            strategy.entry("Long", strategy.long)
            strategy.exit("Exit Long", from_entry="Long", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')
        if shortCondition
            strategy.entry("Short", strategy.short)
            strategy.exit("Exit Short", from_entry="Short", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')

if isInverse
    // Strategy logic
    if isTradeTime and isStratTime
        //Obtain candle open/close
        anchorOpen := open
        anchorClose := close
        // Define entry conditions
        shortCondition := anchorClose > anchorOpen
        longCondition := anchorClose < anchorOpen
        
        // Entry logic
        if longCondition
            strategy.entry("Long", strategy.long)
            strategy.exit("Exit Long", from_entry="Long", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')
        if shortCondition
            strategy.entry("Short", strategy.short)
            strategy.exit("Exit Short", from_entry="Short", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')

// Define the time range for the background shade
startHour = anchorHour
startMinute = 0
endHour = anchorHour
endMinute = 0

// Check if the current time is within the specified range
isInTimeRange = (hour == startHour and minute >= startMinute) or (hour == endHour and minute <= endMinute) or (hour > startHour and hour < endHour)

// Define the background color for the shade
backgroundColor = color.new(color.red, 90)

// Apply the background shade
bgcolor(isInTimeRange ? backgroundColor : na)



Больше