Торговая стратегия на основе пересечения двух скользящих средних


Дата создания: 2023-11-27 15:32:57 Последнее изменение: 2023-11-27 15:32:57
Копировать: 1 Количество просмотров: 613
1
Подписаться
1617
Подписчики

Торговая стратегия на основе пересечения двух скользящих средних

Обзор

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

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

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

Кроссовер и кроссундер - функции, которые определяют пересечение двух равноуровневых линий. Когда p1 пробивается через p2 с нижнего направления, подается сигнал покупки; когда p1 пробивается через p2 с верхнего направления, подается сигнал продажи.

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

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

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

  1. Правила четкие, понятные и реализуемые
  2. Средиземнолинейный пересечение - классический и широко известный торговый сигнал
  3. Высоко настраиваемый тип, длина и источник цены средней линии
  4. В то же время, по мнению экспертов, это может привести к снижению частоты транзакций.

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

Однако эта стратегия также несет в себе некоторые риски:

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

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

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

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

  1. Введение средневзвешенной величины объема или типичной цены в качестве источника цены, повышение надежности перекрестного сигнала

  2. Увеличение периода проверки, чтобы избежать кратковременной ошибки

  3. Максимально допустимые потери в зависимости от рыночных колебаний в сочетании с остановкой ATR

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

  5. Необходимо учитывать, что торговые сигналы будут выдаваться только в случае согласованности большого цикла.

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

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

Исходный код стратегии
/*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)