Стратегия двойного прорыва перемещающейся средней цены

Автор:Чао Чжан, Дата: 2023-11-21 15:33:52
Тэги:

img

Обзор

Эта стратегия использует две скользящие средние для определения тенденций цен и прорывов. Идите коротко, когда цена проходит через верхний рельс, и идите долго, когда цена проходит через нижний рельс. Установите выходные стоп-лосс для контроля рисков.

Принципы

  1. Используйте функцию sma() для расчета двух краткосрочных и долгосрочных скользящих средних в качестве верхнего и нижнего рельсов торговой стратегии.
  2. Вычислить цену покупки и цену продажи: покупная цена - это нижний рельс умноженный на коэффициент меньше 1, а продажная цена - это верхний рельс умноженный на коэффициент больше 1.
  3. Когда цена проходит через верхний рельс, открыть короткую позицию с рыночным ордером; когда цена проходит через нижний рельс, открыть длинную позицию с лимитовым ордером.
  4. Установите диапазон года, месяца и даты для управления торговым циклом стратегии.
  5. Закрыть все позиции после окончания обратного теста или превышения диапазона дат.

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

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

  1. Использование двойной рельсовой системы позволяет отфильтровать рыночный шум и выявить тенденции.
  2. Использование ценового прорыва для определения времени входа может уменьшить ложные сигналы.
  3. Использование лимитных ордеров снижает затраты на влияние на рынок.
  4. Торговый цикл может быть легко скорректирован для контроля стратегических рисков.

Риски

Эта стратегия также сопряжена с некоторыми рисками:

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

Оптимизация

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

  1. Испытайте различные комбинации скользящих средних длин, чтобы найти лучшие параметры.
  2. Увеличить показатель объемов для определения прорывов в объеме транзакций.
  3. Увеличить адаптивный механизм стоп-лосса для корректировки цены стоп-лосса в реальном времени.
  4. Увеличьте модели машинного обучения для определения направления тренда.

Резюме

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


/*backtest
start: 2023-11-13 00:00:00
end: 2023-11-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's Shift MA Strategy v1.0", shorttitle = "Shift MA str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
per = input(3, defval = 1, minval = 1, maxval = 1000, title = "Length")
src = input(ohlc4, title = "Source")
buylevel = input(-5.0, defval = -5.0, minval = -100, maxval = 0, title = "Buy line (lime)")
selllevel = input(0.0, defval = 0.0, minval = -100, maxval = 100, title = "Sell line (red)")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//SMAs
sma = sma(src, per) 
buy = sma * ((100 + buylevel) / 100)
sell = sma * ((100 + selllevel) / 100)
plot(buy, linewidth = 2, color = lime, title = "Buy line")
plot(sell, linewidth = 2, color = red, title = "Sell line")

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[per])) and size == 0
    strategy.entry("L", strategy.long, lot, limit = buy)
    
if (not na(close[per]))    
    strategy.entry("Close", strategy.short, 0, limit = sell)

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Больше