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

Автор:Чао Чжан, Дата: 2023-11-27 15:32:57
Тэги:

img

Обзор

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

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

Стратегия написана с помощью шрифта Pine. Она сначала определяет две скользящие средние, названные p1 и p2, с настраиваемым типом, длиной и источником цены через вход. Здесь p1 представляет собой более короткий период MA, а p2 представляет собой более длительный период MA.

Функции кроссовера и кроссендера используются для обнаружения кроссовера между двумя МА. Когда p1 пересекает p2 снизу, генерируется сигнал покупки. Когда p1 пересекает под p2 сверху, генерируется сигнал продажи.

Для выполнения сделок, стратегия входит в длинные или короткие позиции с помощью strategy.entry, когда сигналы запускаются. Если ввод shortOnly включен, будут торговаться только сигналы продажи.

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

Преимущества этой стратегии включают:

  1. Ясные правила, которые легко понять и применить
  2. Кроссовер MA - классический и широко известный торговый сигнал.
  3. Наиболее настраиваемые типы, длины и источники цен на МО
  4. Могут торговать только сигналами с более низкой частотой торговли

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

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

  1. Во время нестабильных рынков может произойти множество недействительных перекрестков, что приводит к перепродаже.
  2. Параметры требуют оптимизации для различных продуктов и временных рамок.
  3. Не в состоянии определить направление тренда, может торговать против тренда.

Риски могут быть снижены путем корректировки длин MA, добавления условий фильтрации и т. д. Также могут быть добавлены индикаторы тенденции для определения предвзятости рынка.

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

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

  1. Использовать VWAP или типичную цену в качестве источника цены, чтобы сделать сигналы перекрестного перекрестного сообщения более надежными.

  2. Добавьте период валидации, чтобы избежать краткосрочных ошибочных перекресток.

  3. Включить остановки ATR на основе максимально допустимых потерь в соответствии с волатильностью рынка.

  4. Оптимизация параметров с помощью настройки кривой для поиска оптимальных комбинаций.

  5. Рассмотрим только сигналы в направлении более высоких временных трендов.

Резюме

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


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © RafaelPiccolo

//@version=4
strategy("Double MA Cross", overlay=true)

type1 = input("SMA", "MA Type 1", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len1 = input(10, minval=1, title="Length 1")
src1 = input(close, "Source 1", type=input.source)

type2 = input("SMA", "MA Type 2", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len2 = input(50, minval=2, title="Length 2")
src2 = input(close, "Source 2", type=input.source)

shortOnly = input(false, "Short only")

tema(src, len)=>
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    ema3 = ema(ema2, len)
    return = 3 * (ema1 - ema2) + ema3

getPoint(type, len, src)=>
    return = type == "SMA" ? sma(src, len) : type == "EMA" ? ema(src, len) : type == "WMA" ? wma(src, len) : type == "HMA" ? hma(src, len) : type == "VWMA" ? vwma(src, len) : type == "RMA" ? rma(src, len) : tema(src, len)

p1 = getPoint(type1, len1, src1)
p2 = getPoint(type2, len2, src2)

shortCondition = crossunder(p1, p2)
longCondition = crossover(p1, p2)

if (shortCondition)
    strategy.entry("Short", strategy.short)

if (longCondition)
    if (shortOnly)
        strategy.close("Short")
    else
        strategy.entry("Long", strategy.long)

plot(p1, "MA 1", p1 < p2 ? color.red : color.green)
plot(p2, "MA 2", color.blue)


Больше