Пересечение стратегии выхода

Автор:Чао Чжан, Дата: 2023-10-12 16:47:55
Тэги:

Обзор

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

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

Эта стратегия основана на золотом кресте и смертном кресте скользящих средних для определения точек входа и выхода.upOrDownиlongOrShortопределить длинный или короткий;percentInputустанавливать пороговый процент изменения цен;closePositionDaysчтобы установить количество дней, чтобы удержать позицию.

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

После длинного/короткого курса день входа и следующие 4 дня будут отмечены цветами на графике.

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

  • Использование скользящих средних перекресток для определения тенденции является зрелым и надежным методом
  • Простая и понятная логика стратегии, легкая для понимания и реализации
  • Частоту можно контролировать путем регулирования параметров
  • Автоматический механизм стоп-лосса эффективно контролирует риски

Риски

  • Движущиеся средние имеют отстающие эффекты, могут пропустить лучшее время быстрых изменений цен
  • Значительные колебания цен могут произойти в краткосрочной перспективе, создавая ненужные сигналы
  • Неправильные параметры могут повлиять на эффективность стратегии
  • Невозможность эффективно реагировать на последствия неожиданных событий

Управление рисками:

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

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

  • Подумайте об использовании EMA, DMA вместо SMA, чтобы сделать его более чувствительным
  • Добавить механизмы стоп-лосса, например, стоп-лосса при нарушении среднего
  • Добавьте другие технические индикаторы, такие как MACD, KDJ для комбинации, улучшая показатель выигрыша
  • Попробуйте методы машинного обучения для автоматической оптимизации параметров
  • Оптимизировать время входа и выхода, например, выхода и т.д.

Резюме

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


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

//@version=3
//  Created by Leon Ross

strategy(title = "DaysAfterCertainPercentChangev1", shorttitle = "DACPCv1", overlay = true, 
  pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, 
  calc_on_every_tick=true, initial_capital=100000)
  
//Inputs
longOrShort = input(title="Long=Checked Short=Unchecked", type=bool, defval=true) //long=true, down=false
upOrDown = input(title="Direction of Today vs. Previous day: Up=Checked Down=Unchecked", type=bool, defval=true) //up=true, down=false: this is the direction of days vs previous day
percentInput = input(title="Percent", type=float, defval=4.5)
closePositionDays = input(title="How Many Days to Close Position", defval=4)

//Conditions
//percentUpValue = (close / close[1]) - 1
//percentUp = percentUpValue >= (percentInput/100.0)
//upConditions = percentUp
//percentDownValue = 1- (close / close[1])
//percentDown = percentDownValue >= (percentInput/100.0)
//downConditions = percentDown
upValue = (close / close[1]) - 1
downValue = 1 - (close / close[1])
allConditions = if(upOrDown)
    upValue >= (percentInput/100.0)
else
    downValue >= (percentInput/100.0)
    
//Plots
bgcolor(allConditions ? (upOrDown ? green : red) : na, transp=70)
bgcolor(allConditions ? silver : na, transp=70, offset=1)
bgcolor(allConditions ? silver : na, transp=70, offset=2)
bgcolor(allConditions ? silver : na, transp=70, offset=3)
bgcolor(allConditions ? silver : na, transp=70, offset=4)
//bgcolor(downConditions == 1 ? red : na, transp=70)
//bgcolor(downConditions == 1 ? silver : na, transp=70, offset=1)
//bgcolor(downConditions == 1 ? silver : na, transp=70, offset=2)
//bgcolor(downConditions == 1 ? silver : na, transp=70, offset=3)
//bgcolor(downConditions == 1 ? silver : na, transp=70, offset=4)

//Entires
if(longOrShort)
    strategy.entry(id = "Long", long = true, when = allConditions) 
else
    strategy.entry(id = "Short", long = false, when = allConditions)

//Exits
if (barssince(allConditions) == closePositionDays)
    if(longOrShort)
        strategy.close("Long")
    else
        strategy.close("Short")




Больше