Стратегия Золотого Креста Смертного Креста

Автор:Чао Чжан, Дата: 2023-10-11 16:33:18
Тэги:

Обзор

Эта стратегия использует принципы золотого креста и смертного креста простых скользящих средних для реализации длинных и коротких позиций для акций.

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

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

Функция getMAType() вычисляет значения двух МА. fastMA - кратчайший период МА, а slowMA - более длительный период МА.

Основная логика:

  • Когда fastMA пересекает slowMA, запускается длинный сигнал.

  • Когда fastMA переходит ниже slowMA, запускается короткий сигнал.

Наконец, во время обратного тестирования, займите длинную позицию при виде длинного сигнала, и займите короткую позицию при виде короткого сигнала.

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

  • Простая и понятная стратегия, легко понятная и реализуемая.
  • Использует широко применяемые принципы перекрестного использования MA, подходящие для большинства продуктов запаса.
  • Настраиваемые типы и параметры МО, высокая адаптивность.
  • Модульная структура стратегии, четкая функциональность, легко оптимизировать.

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

  • Кроссоверы MA немного отстают, могут упустить некоторые торговые возможности.
  • Не может эффективно отфильтровать рынки, склонные к ловушке.
  • Оптимизация параметров недостаточно полная, требует ручного опыта.
  • Не в состоянии эффективно контролировать риски и потери по сделкам.

Возможные оптимизации в отношении рисков:

  1. Добавить другие технические показатели для определения тенденции.

  2. Добавление стоп-лосса к контрольной сумме по сделке.

  3. Добавьте показатели объема, чтобы избежать рыночных сделок.

  4. Создать механизмы оптимизации параметров для автоматического поиска оптимальных наборов параметров.

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

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

  1. Добавьте стратегии стоп-лосса, такие как фиксированные точки стоп-лосса или отслеживание стоп-лосса для контроля потерь.

  2. Добавьте стратегии размещения позиций, такие как фиксированное или динамическое размещение позиций для контроля рисков торговли.

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

  4. Оптимизируйте параметры такими методами, как поиск сетки и линейная регрессия, чтобы найти оптимальные значения.

  5. Расширяйте стратегии входа, такие как вырыв, масштабирование заказов для обогащения торговых тактик.

  6. Добавьте показатели объема, чтобы избежать рыночных сделок.

  7. Расширить продукцию до фондовых индексов, валюты, криптовалют и т.д.

Резюме

Эта стратегия реализует длинный / короткий выбор акций на основе принципов перекрестного MA. Идея стратегии проста и ясна, широко используется, очень адаптируется и практически ценна. Но у нее также есть некоторые проблемы с отставанием и фильтрацией.


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

//@version=4
//strategy("Golden X BF Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2010, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() =>  true

///////////// MA Params /////////////
source1 = input(title="MA Source 1", defval=close)
maType1 = input(title="MA Type 1", defval="sma", options=["sma", "ema", "swma", "wma"])
length1 = input(title="MA Length 1", defval=50)

source2 = input(title="MA Source 2", defval=close)
maType2 = input(title="MA Type 2", defval="sma", options=["sma", "ema", "swma", "wma"])
length2 = input(title="MA Length 2", defval=200)

///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) => 
    res = sma(close, 1)
    
    if maType == "ema"
        res := ema(sourceType, maLen)
    if maType == "sma"
        res := sma(sourceType, maLen)
    if maType == "swma"
        res := swma(sourceType)
    if maType == "wma"
        res := wma(sourceType, maLen)
    res
    
///////////// MA /////////////
fastMA = getMAType(maType1, source1, length1)
slowMA = getMAType(maType2, source2, length2)

long = crossover(fastMA, slowMA)
short = crossunder(fastMA, slowMA)

/////////////// Plotting /////////////// 
checkColor() => fastMA > slowMA
colCheck = checkColor() ? color.lime : color.red
p1 = plot(fastMA, color = colCheck, linewidth=1)
p2 = plot(slowMA, color = colCheck, linewidth=1)
fill(p1, p2, color = checkColor() ? color.lime : color.red)
bgcolor(long ? color.lime : short ? color.red : na, transp=20)

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("Long", strategy.long, when=long)
    strategy.entry("Short", strategy.short, when=short)

Больше