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

Автор:Чао Чжан, Дата: 2023-10-07 16:39:01
Тэги:

Обзор

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

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

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

  1. Вычислить значение осциллятора цены в процентной форме. Значение осциллятора - это процент цены минус медианное значение. Медианное значение рассчитывается как среднее значение 20-дневных наивысших и самых низких цен.

  2. Вычислить скользящую среднюю стоимость осциллятора, например, 20-дневную скользящую среднюю стоимость Халла.

  3. Вычислить значение отставания скользящей средней, например, отставание на 12 дней.

  4. Определить, пересекает ли скользящая средняя выше или ниже отстающей скользящей средней, генерируя сигналы "золотой крест" или "смертельный крест".

  5. Выпускать сигналы покупки и продажи.

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

Когда скользящая средняя колебания осциллятора пересекает отстающую скользящую среднюю, генерируется сигнал золотого креста для длинного хода.

Определяется направление торговли, оценивая перекрестность двойных скользящих средних.

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

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

  1. Использование двойных скользящих средних фильтрует ложные сигналы и улучшает надежность сигнала.

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

  3. Осиллятор выделяет точки прорыва и генерирует более четкие торговые сигналы.

  4. Настраиваемые алгоритмы и параметры MA подходят для различных рыночных условий.

  5. Простая и понятная логика стратегии, легкая для понимания и реализации, удобная для начинающих.

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

Риски этой стратегии включают:

  1. У кроссоверов с двойным MA есть отстающие сигналы, потенциально отсутствующие лучшие точки входа.

  2. Склонность к ошибочным сигналам на рынках с ограниченным диапазоном.

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

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

  5. Нет механизма стоп-лосса, не в состоянии контролировать потерю на одной сделке.

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

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

  1. Оптимизировать типы и параметры MA, тестировать стабильность на разных рынках.

  2. Добавьте индикаторы, определяющие тренд, такие как ADX, чтобы избежать ненужных сделок из-за неправильных сигналов.

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

  4. Включите другие показатели, такие как объем, RSI, чтобы улучшить качество сигнала.

  5. Используйте машинное обучение для автоматической оптимизации параметров для более надежных настроек.

  6. Подумайте о небольшом смягчении условий входа, чтобы уменьшить упущенные сделки.

Резюме

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


/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 4h
basePeriod: 15m
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/
// © EvoCrypto

//@version=4
strategy("Distance Oscillator Strategy- evo", shorttitle="Distance Oscillator Strategy")

// INPUTS {
na_1                =   input(false,    title="────────────{ Oscillator }──────────────")

// Osc_Src             =   input(close,    title="Oscillator Source                                ")

Example_Length      =   input(20,       title="Example Length", minval=1)
Osc_Src             =   (highest(Example_Length) + lowest(Example_Length)) / 2

// Strategy can not let you choose a Moving Average to connect with like the study version, so I use the MA above as example

Osc_Format          =   input("Percent",title="Oscillator Format",              options=["Percent", "Currency"]) 

na_2                =   input(false,    title="─────────────{ Average }──────────────")
Average_Type        =   input("Hull",   title="Average Type",                   options=["Hull", "Sma", "Ema", "Wma"])
Length              =   input(50,       title="Average Length", minval=1)
Lagg                =   input(12,       title="Average Lagg",   minval=1)
Display_MA          =   input(true,     title="Display Average")
// }

// SETTINGS {
Osc_Sum             =   
 Osc_Format == "Percent"  ? (close - Osc_Src) / close * 100 :
 Osc_Format == "Currency" ? (close - Osc_Src)               : na

Osc_MA              =   Display_MA == false ? na:
 Average_Type == "Hull"? hma(Osc_Sum, Length)   :
 Average_Type == "Sma" ? sma(Osc_Sum, Length)   :
 Average_Type == "Ema" ? ema(Osc_Sum, Length)   :
 Average_Type == "Wma" ? wma(Osc_Sum, Length)   : na
Osc_MA_1            =   Osc_MA[Lagg]

Cross_Up            =   crossover( Osc_MA, Osc_MA_1)
Cross_Down          =   crossunder(Osc_MA, Osc_MA_1)

Osc_Color           =   Osc_Sum > 0         ? color.new(#bbdefb, 70)  : Osc_Sum < 0          ? color.new(#000000, 70)  : na
Average_Color       =   Osc_MA  > Osc_MA_1  ? color.new(#311b92, 100) : Osc_MA  < Osc_MA_1   ? color.new(#b71c1c, 100) : na
// }

// PLOT {
plot(Osc_Sum,                           title="Oscillator", color=Osc_Color, style=plot.style_histogram, linewidth=2)

Plot_0              =   plot(Osc_MA,    title="Osc Average",color=#b71c1c, linewidth=2)
Plot_1              =   plot(Osc_MA_1,  title="Osc Average",color=#311b92, linewidth=2)
fill(Plot_0, Plot_1,                    title="Average",    color=Average_Color)

plotshape(Cross_Up   ? Osc_MA_1 : na,   title="Cross Up",   color=#bbdefb, location=location.absolute, size=size.tiny, style=shape.circle)
plotshape(Cross_Down ? Osc_MA_1 : na,   title="Cross Down", color=#000000, location=location.absolute, size=size.tiny, style=shape.circle)
// }

// STRATEGY {
if (Cross_Up)
    strategy.entry("Long", strategy.long)
if (Cross_Down)
    strategy.entry("Short", strategy.short)
// }

Больше