Количественная торговая стратегия, основанная на скользящей средней и среднем истинном диапазоне трейлинг-стоп-лосс


Дата создания: 2023-12-08 15:53:22 Последнее изменение: 2023-12-08 15:53:22
Копировать: 1 Количество просмотров: 696
1
Подписаться
1621
Подписчики

Количественная торговая стратегия, основанная на скользящей средней и среднем истинном диапазоне трейлинг-стоп-лосс

Обзор

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

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

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

В частности, индикатор MADE содержит 3 параметра: период, процент на верхней линии Ab и процент на нижней линии Bl. Период определяет длину цикла EMA. Диапазон расстояния от EMA на верхней и нижней линии контролируется с помощью процентного фактора.

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

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

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

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

  2. Настраиваемые параметры, гибкий контроль. Можно настроить параметры показателя MADE и параметры ATR, контролировать количество и качество сигнала.

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

  4. Визуализация стоппера интуитивно. Нарисуйте стоп-линию, чтобы интуитивно оценить эффект стоп-потери.

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

Также существуют риски, связанные со стратегией MADEFlex:

  1. Неправильные параметры MADE-индексатора могут привести к большому количеству ошибочных сигналов. Требуется тщательное тестирование для определения правильных параметров.

  2. ATR-остановка слишком мягкая, может пропустить возможность остановки. Рекомендуется тестирование для определения подходящего ATR-множителя.

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

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

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

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

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

  2. Оптимизация параметров ATR-остановки для достижения лучших эффектов. Можно проверить циклы ATR и кратность ATR, чтобы определить более подходящую комбинацию.

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

  4. Добавление стратегии хранения прибыли, вывод прибыли после достижения определенного уровня. Можно блокировать прибыль, контролировать риск.

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

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

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

Исходный код стратегии
/*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)