Стратегия пересечения ежемесячной цены закрытия и скользящей средней


Дата создания: 2023-11-23 17:09:01 Последнее изменение: 2023-11-23 17:09:01
Копировать: 0 Количество просмотров: 570
1
Подписаться
1617
Подписчики

Стратегия пересечения ежемесячной цены закрытия и скользящей средней

Обзор

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

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

Основная логика этой стратегии заключается в следующем:

  1. Введите периодические параметры для скользящей середины, выберите SMA или EMA
  2. Вы можете выбрать отображение движущейся средней линии
  3. В качестве сигнала можно выбрать закрытие другой акции.
  4. Торговые сигналы, основанные на взаимосвязи между ценой закрытия месячной линии и движущейся средней
    • В конце концов, мы должны сделать больше, чем мы думаем.
    • Прямые позиции в нижней части скользящей средней линии

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

Стратегические преимущества

Основные преимущества этой стратегии:

  1. Используя данные лунных линий, можно эффективно отфильтровывать ночные шумы и улавливать средне- и долгосрочные тенденции цен на акции.
  2. Настраиваемый цикл движущейся средней, оптимизированный параметр для различных акций
  3. Выбор другой акции в качестве источника сигнала, способствующего повышению стабильности
  4. Использование технологии “Advanced anti-repainting” для эффективного предотвращения возврата
  5. Вводящийся произвольный период времени отсчета для удобства тестирования и оптимизации

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

Стратегический риск

В этой стратегии есть определенные риски, которые сосредоточены на следующих аспектах:

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

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

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

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

В этой стратегии есть много возможностей для оптимизации, в частности, в следующих областях:

  1. Добавление стратегий по сдерживанию убытков для блокировки прибыли и контроля риска
  2. В сочетании с другими показателями, такими как KD, MACD и т. Д., повышает точность торговых сигналов
  3. Динамическая оптимизация перемещаемых средних параметров с использованием машинного обучения
  4. Добавление модуля управления позициями, позволяющего изменять размер позиций в зависимости от тенденции
  5. Дополнительная функция многополосного преобразования, которая может быть гибко адаптирована к рыночным условиям
  6. Соединение с K-линией в более короткие временные рамки для более чувствительных сделок

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

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

Исходный код стратегии
/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 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/
// © universique

//@version=4
strategy("Monthly MA Close ", shorttitle="MMAC", overlay=true, default_qty_type =  strategy.percent_of_equity, default_qty_value = 100)
//MAY 6 2020 18:00

// No repaint function 
// Function to securely and simply call `security()` so that it never repaints and never looks ahead.
f_secureSecurity(_symbol, _res, _src) => security(_symbol, _res, _src[1], lookahead = barmerge.lookahead_on)
//sec10 = f_secureSecurity(syminfo.tickerid, higherTf, data)

// ————— Converts current chart resolution into a float minutes value.
f_resInMinutes() => 
    _resInMinutes = timeframe.multiplier * (
      timeframe.isseconds ? 1. / 60             :
      timeframe.isminutes ? 1.                  :
      timeframe.isdaily   ? 60. * 24            :
      timeframe.isweekly  ? 60. * 24 * 7        :
      timeframe.ismonthly ? 60. * 24 * 30.4375  : na)
// ————— Returns the float minutes value of the string _res.
f_tfResInMinutes(_res) =>
    // _res: resolution of any TF (in "timeframe.period" string format).
    // Dependency: f_resInMinutes().
    security(syminfo.tickerid, _res, f_resInMinutes())

// —————————— Determine if current timeframe is smaller that higher timeframe selected in Inputs.
// Get higher timeframe in minutes.
//higherTfInMinutes = f_tfResInMinutes(higherTf)
// Get current timeframe in minutes.
currentTfInMinutes = f_resInMinutes()
// Compare current TF to higher TF to make sure it is smaller, otherwise our plots don't make sense.
//chartOnLowerTf = currentTfInMinutes < higherTfInMinutes

// Input
switch1=input(true, title="Show MA")
exponential = input(true, title="Exponential MA")
ticker = input(false, title="Other ticker MA")

tic_ma = input(title="Ticker MA", type=input.symbol, defval="BTC_USDT:swap")
res_ma = input(title="Time MA (W, D, [min])", type=input.string, defval="M")
len_ma = input(8, minval=1, title="Period MA")

ma_cus = exponential?f_secureSecurity(tic_ma, res_ma, ema(close,len_ma)) : f_secureSecurity(tic_ma, res_ma, sma(close,len_ma))
ma_long = exponential?f_secureSecurity(syminfo.tickerid, res_ma, ema(close,len_ma)) : f_secureSecurity(syminfo.tickerid, res_ma, sma(close,len_ma))

cl1 = f_secureSecurity(syminfo.tickerid, 'M', close)
cl2 = f_secureSecurity(tic_ma, 'M', close)

// Input Backtest Range
showDate  = input(defval = false, title = "Show Date Range", type = input.bool)
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 1995, title = "From Year",       type = input.integer, minval = 1850)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1850)

// Funcion Example
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

// Calculation
bullish_cross = ticker?cl2>ma_cus : cl1>ma_long
bearish_cross = ticker?cl2<ma_cus : cl1<ma_long

MAColor = bullish_cross ? color.green : bearish_cross ? color.red : color.orange

// Strategy
strategy.entry("long", strategy.long, when = window() and bullish_cross)
strategy.close("long", when = window() and bearish_cross)

// Output
plot(switch1?ma_long:na,color = MAColor,linewidth=4)

// Alerts
alertcondition(bullish_cross, title='Bullish', message='Bullish')
alertcondition(bearish_cross, title='Bearish', message='Bearish')