Склейка ширины полосы Боллинджера Двойная скользящая средняя Стратегия фильтрации тренда

Автор:Чао Чжан, Дата: 2023-10-25 15:00:20
Тэги:

img

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

Логика стратегии

  1. Используйте верхние, средние и нижние полосы Болинджеровского диапазона для генерации длинного / короткого сигнала. Продайте, когда цена касается верхней полосы, покупайте, когда касается нижней полосы.

  2. Для определения направления тренда используйте 20-периодные среднесрочные и 60-периодные долгосрочные скользящие средние.

  3. Динамически настраивайте позицию стоп-лосса на основе ширины полосы Боллинджера. Когда ширина больше 0,5%, остановите потерю на нижней полосе. Когда меньше 0,5%, уменьшите стоп-лосс до половины нижнего диапазона полосы.

  4. Условия входа: нарушение нижней полосы в качестве сигнала покупки во время восходящего тренда.

  5. Условия выхода: получение прибыли при достижении верхней полосы или короткой MA на длинных.

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

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

  1. Использование двойных МА для определения тренда помогает отфильтровать шум от рынков, не связанных с трендом или диапазоном.

  2. Средняя полоса BB обеспечивает поддержку/сопротивление, верхняя/нижняя полоса служит динамическим уровнем стоп-лосса для контроля риска.

  3. Регулирование диапазона остановки по размеру BB снижает вероятность остановки, сохраняя при этом разумную остановку.

  4. Торговля в направлении тренда приводит к более высокому уровню выигрыша.

Риски

  1. Двойные МА могут часто приводить к ложным прорывам, упуская поворотные моменты тренда.

  2. ББ могут быть обескуражены на нестабильных рынках, могут уменьшить частоту торговли.

  3. Стоп-лосс вблизи уровня поддержки/сопротивления, склонный к выводу.

  4. Не в состоянии эффективно использовать краткосрочные отзывы, может сократить период хранения.

Возможности для расширения

  1. Оптимизировать периоды MA, чтобы найти наиболее подходящие условия на рынке.

  2. Оптимизируйте параметр мультипликатора BB, чтобы сбалансировать стоп-лосс.

  3. Добавить другие показатели для многофакторного подтверждения для улучшения качества сигнала.

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

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

  6. Управление ценовым шоком, например, большие пробелы за одну ночь.

Резюме

Это общая надежная стратегия, использующая двойные MAs для направления тренда и BB для поддержки / сопротивления и динамических остановок. Существуют ограничения, такие как ложные сигналы тренда и остановки слишком близко. Дальнейшие оптимизации могут быть сделаны по системе MA, стратегии остановки потери, управлению деньгами и т. Д., Чтобы увеличить надежность в различных рыночных условиях. В целом отличная стратегия для начинающих с ее высоким показателем выигрыша, хорошим профилем риска-вознаграждения и простой, но эффективной логикой.


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

//@version=2
strategy(title="yuthavithi BB Scalper 2 strategy", overlay=true)

len = input(20, minval=1, title="Length")
multiplier = input(4, minval=1, title="multiplier")
trendTimeFrame = input(60, minval=1, title="Trend Time Frame")
useTrendFilter = input(true, type=bool, title = "Use Trend Filter")

src = input(close, title="Source")
out = sma(src, len)
//plot(out, title="SMA", color=blue)

stdOut = stdev(close, len)
bbUpper = out + stdOut * multiplier
bbLower = out - stdOut * multiplier
bbUpper2 = out + stdOut * (multiplier / 2)
bbLower2 = out - stdOut * (multiplier / 2)
bbUpperX2 = out + stdOut * multiplier * 2
bbLowerX2 = out - stdOut * multiplier * 2
bbWidth = (bbUpper - bbLower) / out


closeLongTerm = request.security(syminfo.tickerid, tostring(trendTimeFrame), close)
smaLongTerm = request.security(syminfo.tickerid, tostring(trendTimeFrame), sma(close,20))

//plot(smaLongTerm, color=red)

trendUp = useTrendFilter ? (closeLongTerm > smaLongTerm) : true
trendDown = useTrendFilter? (closeLongTerm < smaLongTerm) : true

bearish = ((cross(close,bbUpper2) == 1) or (cross(close,out) == 1)) and (close[1] > close) and trendDown
bullish = ((cross(close,bbLower2) == 1) or (cross(close,out) == 1)) and (close[1] < close) and trendUp


closeBuy = (high[1] > bbUpper[1]) and (close < bbUpper) and (close < open) and trendUp 
closeSell = (((low[1] < bbLower[1]) and (close > bbLower)) or ((low[2] < bbLower[2]) and (close[1] > bbLower[1]))) and (close > open) and trendDown


cutLossBuy = iff(bbWidth > 0.005, (low < bbLower) and (low[1] > bbLower[1]) and trendUp, (low < bbLowerX2) and (low[1] > bbLowerX2[1]) and trendUp)
cutLossSell = iff(bbWidth > 0.005, (high > bbUpper) and (high[1] < bbUpper[1]) and trendDown, (high > bbUpperX2) and (high[1] < bbUpperX2[1]) and trendDown)


if (bullish)
    strategy.entry("Buy", strategy.long, comment="Buy")

if (bearish)
    strategy.entry("Sell", strategy.short, comment="Sell")
    

strategy.close("Buy", closeBuy or cutLossBuy)
   
strategy.close("Sell", closeSell or cutLossSell)


Больше