Интеллектуальная стратегия стоп-лосса на основе скользящей средней и внутридневного паттерна

SMA MA18 ATR
Дата создания: 2025-01-17 16:04:09 Последнее изменение: 2025-01-17 16:04:09
Копировать: 4 Количество просмотров: 361
1
Подписаться
1617
Подписчики

Интеллектуальная стратегия стоп-лосса на основе скользящей средней и внутридневного паттерна

Обзор

Это стратегия, основанная на 18-дневной скользящей средней (SMA18) в сочетании с распознаванием внутридневных торговых моделей и интеллектуальным механизмом трейлинг-стопа. Эта стратегия в основном отслеживает взаимосвязь между ценой и SMA18, объединяет внутридневные максимумы и минимумы и входит в длинную позицию в нужный момент. Стратегия использует гибкий план стоп-лосса, который может использовать либо фиксированную точку стоп-лосса, либо двухдневную минимальную точку в качестве скользящего ориентира стоп-лосса.

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

Основная логика стратегии включает в себя следующие ключевые элементы:

  1. Условия входа основаны на относительном положении цены по отношению к 18-дневной скользящей средней. Вы можете выбрать вход на рынок, когда он пробивает скользящую среднюю или вход выше скользящей средней.
  2. Анализируя внутридневные паттерны K-line, уделяя особое внимание внутреннему паттерну K-line (внутренний бар), повышается точность входа.
  3. На основе характеристик эффективности различных торговых дней недели вы можете выборочно торговать в определенные дни.
  4. Цена входа устанавливается в лимитном ордере с небольшой премией сверх минимальной точки для увеличения вероятности совершения сделки.
  5. Механизм стоп-лосса поддерживает два режима: один — фиксированный стоп-лосс, основанный на цене входа, а другой — скользящий стоп-лосс, основанный на самой низкой точке за два предыдущих торговых дня.

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

  1. Объединяя технические индикаторы и ценовые модели, сигналы входа становятся более надежными
  2. Гибкий механизм выбора времени торговли, который можно оптимизировать в соответствии с различными характеристиками рынка
  3. Интеллектуальное решение стоп-лосса защищает прибыль, оставляя ценам достаточно места для колебаний
  4. Параметры стратегии легко настраиваются и могут адаптироваться к различным рыночным условиям.
  5. Благодаря экранированию внутренних паттернов K-линии ложные сигналы эффективно снижаются.

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

  1. На нестабильных рынках фиксированные стопы могут привести к преждевременным выходам
  2. При быстром развороте скользящий стоп-лосс может зафиксировать меньшую прибыль.
  3. Во время боковой фазы частые внутренние свечи могут привести к чрезмерной торговле. Контрмеры:
  • Динамически корректируйте расстояние стоп-лосса в зависимости от волатильности рынка
  • Добавить индикаторы подтверждения тренда
  • Установите минимальный целевой показатель прибыли, чтобы отфильтровать некачественные сделки.

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

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

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

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

Исходный код стратегии
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=5
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © zweiprozent

strategy('Buy Low over 18 SMA Strategy', overlay=true, default_qty_value=1)
xing = input(false, title='crossing 18 sma?')
sib = input(false, title='trade inside Bars?')
shortinside = input(false, title='trade inside range bars?')
offset = input(title='offset', defval=0.001)
belowlow = input(title='stop below low minus', defval=0.001)
alsobelow = input(false, title='Trade only above 18 sma?')
tradeabove = input(false, title='Trade with stop above order?')
trailingtwo = input(false, title='exit with two days low trailing?')


insideBar() =>  //and high <= high[1] and low >= low[1] ? 1 : 0
    open <= close[1] and close >= open[1] and close <= close[1] or open >= close[1] and open <= open[1] and close <= open[1] and close >= close[1] ? 1 : 0

inside() =>
    high <= high[1] and low >= low[1] ? 1 : 0
enterIndex = 0.0
enterIndex := enterIndex[1]

inPosition = not na(strategy.position_size) and strategy.position_size > 0
if inPosition and na(enterIndex)
    enterIndex := bar_index
    enterIndex



//if strategy.position_size <= 0 

//    strategy.exit("Long", stop=low[0]-stop_loss,comment="stop loss")


//if not na(enterIndex) and bar_index - enterIndex + 0 >= 0 

//    strategy.exit("Long", stop=low[0]-belowlow,comment="exit")

//    enterIndex := na

T_Low = request.security(syminfo.tickerid, 'D', low[0])
D_High = request.security(syminfo.tickerid, 'D', high[1])
D_Low = request.security(syminfo.tickerid, 'D', low[1])
D_Close = request.security(syminfo.tickerid, 'D', close[1])
D_Open = request.security(syminfo.tickerid, 'D', open[1])

W_High2 = request.security(syminfo.tickerid, 'W', high[1])
W_High = request.security(syminfo.tickerid, 'W', high[0])
W_Low = request.security(syminfo.tickerid, 'W', low[0])
W_Low2 = request.security(syminfo.tickerid, 'W', low[1])
W_Close = request.security(syminfo.tickerid, 'W', close[1])
W_Open = request.security(syminfo.tickerid, 'W', open[1])

//longStopPrice  = strategy.position_avg_price * (1 - stopl)
// Go Long - if prev day low is broken and stop loss prev day low
entryprice = ta.sma(close, 18)

//(high[0]<=high[1]or close[0]<open[0]) and low[0]>vwma(close,30) and time>timestamp(2020,12,0,0,0)

showMon = input(true, title='trade tuesdays?')
showTue = input(true, title='trade wednesdayy?')
showWed = input(true, title='trade thursday?')
showThu = input(true, title='trade friday?')
showFri = input(true, title='trade saturday?')
showSat = input(true, title='trade sunday?')
showSun = input(true, title='trade monday?')

isMon() =>
    dayofweek(time('D')) == dayofweek.monday and showMon
isTue() =>
    dayofweek(time('D')) == dayofweek.tuesday and showTue
isWed() =>
    dayofweek(time('D')) == dayofweek.wednesday and showWed
isThu() =>
    dayofweek(time('D')) == dayofweek.thursday and showThu
isFri() =>
    dayofweek(time('D')) == dayofweek.friday and showFri
isSat() =>
    dayofweek(time('D')) == dayofweek.saturday and showSat
isSun() =>
    dayofweek(time('D')) == dayofweek.sunday and showSun


clprior = close[0]
entryline = ta.sma(close, 18)[1]
//(isMon() or isTue()or isTue()or  isWed() 
noathigh = high < high[1] or high[2] < high[3] or high[1] < high[2] or low[1] < ta.sma(close, 18)[0] and close > ta.sma(close, 18)[0]

if noathigh and time > timestamp(2020, 12, 0, 0, 0) and (alsobelow == false or high >= ta.sma(close, 18)[0]) and (isMon() or isTue() or isWed() or isThu() or isFri() or isSat() or isSun()) and (high >= high[1] or sib or low <= low[1])  //((sib == false and inside()==true) or inside()==false) and (insideBar()==true or shortinside==false)
    if tradeabove == false
        strategy.entry('Long', strategy.long, limit=low + offset * syminfo.mintick, comment='long')
    if tradeabove == true and (xing == false or clprior < entryline)  // and high<high[1] 
        strategy.entry('Long', strategy.long, stop=high + offset * syminfo.mintick, comment='long')


//if time>timestamp(2020,12,0,0,0) and isSat()  
//    strategy.entry("Long", strategy.long, limit=0, comment="long")


//strategy.exit("Long", stop=low-400*syminfo.mintick)

//strategy.exit("Long", stop=strategy.position_avg_price-10*syminfo.mintick,comment="exit")
//strategy.exit("Long", stop=low[1]-belowlow*syminfo.mintick, comment="stop")

if strategy.position_avg_price > 0 and trailingtwo == false and close > strategy.position_avg_price
    strategy.exit('Long', stop=strategy.position_avg_price, comment='stop')

if strategy.position_avg_price > 0 and trailingtwo == false and (low > strategy.position_avg_price or close < strategy.position_avg_price)
    strategy.exit('Long', stop=low[0] - belowlow * syminfo.mintick, comment='stop')

if strategy.position_avg_price > 0 and trailingtwo
    strategy.exit('Long', stop=ta.lowest(low, 2)[0] - belowlow * syminfo.mintick, comment='stop')