Количественная торговля, основанная на скользящей средней конверте и ATR Trailing Stop

Автор:Чао Чжан, Дата: 2023-12-08 15:53:22
Тэги:

img

Обзор

Стратегия называется MADEFlex, что означает Флексибильная количественная стратегия торговли на основе скользящего среднего конверта и ATR Trailing Stop. Она сочетает в себе индикатор скользящего среднего конверта и механизм ATR trailing stop для реализации гибкого и управляемого количественного решения торговли.

Принципы

Основой этой стратегии является индикатор перемещенного среднего конверта (MADE). MADE формирует верхние и нижние полосы путем умножения процентных факторов с перемещенным экспоненциальным перемещающимся средним (EMA). Сигналы продажи генерируются, когда цены превышают верхний диапазон, а сигналы покупки генерируются, когда цены превышают нижний диапазон. Эта стратегия включает индикатор MADE с механизмом задержки среднего истинного диапазона (ATR).

В частности, индикатор MADE содержит 3 параметра: Период, процент выше perAb и процент ниже perBl. Параметр Период определяет период EMA. Высшее и нижнее полосы расстояние от EMA контролируется процентными факторами. Последовательная стоп-часть ATR в основном устанавливается периодом ATR nATRPeriod и кратными ATR nATRMultip. Когда цена превышает линию стоп-лосса предыдущей панели, линия стоп-лосса корректируется до цены минус фиксированный ATR-потеря. Когда цена падает ниже линии стоп-лосса предыдущей панели, линия стоп-лосса корректируется до цены плюс фиксированный ATR-потеря.

Наконец, сигналы покупки и продажи генерируются путем объединения сигналов индикатора MADE и условий остановки ATR. Обратная торговля может быть достигнута с помощью переключателя обратного ввода.

Анализ преимуществ

Стратегия MADEFlex имеет следующие преимущества:

  1. Более надежные комбинированные сигналы и стоп-потеря.

  2. Богатые регулируемые параметры и гибкое управление.

  3. Поддержка обратной торговли.

  4. Интуитивно визуализируемая стопка.

Анализ рисков

Стратегия MADEFlex также сопряжена со следующими рисками:

  1. Неправильные параметры MADE могут генерировать чрезмерные ложные сигналы. Правильные параметры должны быть тщательно проверены.

  2. Чрезмерно свободная остановка ATR может упустить возможности остановки.

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

  4. В экстремальных рыночных условиях отсутствие защиты от стоп-лосса может привести к более высоким потерям.

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

Стратегия MADEFlex может быть оптимизирована в следующих направлениях:

  1. Оптимизировать параметры MADE для улучшения качества сигнала. Различные периоды и процентные комбинации могут быть протестированы, чтобы найти более надежные наборы параметров.

  2. Оптимизировать параметры остановки ATR для улучшения эффекта остановки.

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

  4. Добавьте механизм получения прибыли, чтобы выйти на определенном уровне прибыли.

  5. Использование методов машинного обучения для динамической оптимизации параметров, например, обучения с усилением.

Заключение

Стратегия MADEFlex успешно сочетает в себе торговые сигналы от индикатора Moving Average Envelope и методологию ATR trailing stop. Благодаря регулируемым параметрам она реализует гибкое и управляемое количественное торговое решение. Стратегия имеет относительно высокую надежность и сильную способность к контролю. Она подходит для пользователей с некоторой количественной основой для использования и оптимизации. С дальнейшей оптимизацией можно ожидать более значительной производительности стратегии.


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 27/09/2022
// Moving Average Displaced Envelope. These envelopes are calculated 
// by multiplying percentage factors with their displaced expotential 
// moving average (EMA) core.
// How To Trade Using:
// Adjust the envelopes percentage factors to control the quantity and 
// quality of the signals. If a previous high goes above the envelope 
// a sell signal is generated. Conversely, if the previous low goes below 
// the envelope a buy signal is given.
//
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort 
// The related article is copyrighted material from Stocks & Commodities Jun 2009 
//
// ATR TS used by filter for MADE signals.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title='Moving Average Displaced Envelope & ATRTS', shorttitle='MADE+ATR', overlay=true)
tradeDirection = input.string('Both', title='Trade Direction', options=['Both', 'Long', 'Short'])
Price = input(title='Source', defval=close)
Period = input.int(defval=9, minval=1)
perAb = input.float(title='Percent above', defval=.5, minval=0.01, step=0.1)
perBl = input.float(title='Percent below', defval=.5, minval=0.01, step=0.1)
disp = input.int(title='Displacement', defval=13, minval=1)

nATRPeriod = input(15)
nATRMultip = input(2)
useATR = input(false, title='ATR Filter')
reverse = input(false, title='Trade reverse')

longAllowed = tradeDirection == 'Long' or tradeDirection == 'Both'
shortAllowed = tradeDirection == 'Short' or tradeDirection == 'Both'
pos = 0
sEMA = ta.ema(Price, Period)
top = sEMA[disp] * ((100 + perAb) / 100)
bott = sEMA[disp] * ((100 - perBl) / 100)

xATR = ta.atr(nATRPeriod)
xHHs =ta.sma(ta.highest(nATRPeriod), nATRPeriod)
xLLs =ta.sma(ta.lowest(nATRPeriod),nATRPeriod)
nSpread = (xHHs - xLLs) / 2
nLoss = nATRMultip * xATR
var xATRTrailingStop = 0.0
xATRTrailingStop := close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), close - nLoss) :
     close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), close + nLoss) : 
     close > nz(xATRTrailingStop[1], 0) ? close - nLoss : close + nLoss

ATRLong = close > xATRTrailingStop ? true : false
ATRShort = close < xATRTrailingStop ? true : false

iff_1 = close > top ? 1 : pos[1]
pos := close < bott ? -1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
clr = strategy.position_size
if possig == 1 
    if longAllowed and ATRLong
        strategy.entry('Long', strategy.long)
    else
        if ATRLong or strategy.position_size > 0
            strategy.close_all()
if possig == -1 
    if shortAllowed and ATRShort
        strategy.entry('Short', strategy.short)
    else    
        if ATRShort or strategy.position_size < 0
            strategy.close_all()
if possig == 0
    strategy.close_all()
    
plot(xATRTrailingStop[1], color=color.blue, title='ATR Trailing Stop')
barcolor(clr < 0 ? #b50404 : clr > 0 ? #079605 : #0536b3)



Больше