Юпитер и Сатурн Импульс MA Кроссовер Фильтрованная стратегия

Автор:Чао Чжан, Дата: 2023-11-03 16:13:20
Тэги:

img

Обзор

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

Принципы

  1. Используйте 50-периодную EMA и 200-периодную SMA для формирования золотого креста и смертного креста.

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

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

  4. Индикатор импульса настраивается на основе исторических максимумов и минимумов.

  5. Индикатор импульса отражает относительную волатильность цен, фильтрация порога помогает уменьшить ложные перекрестки.

Преимущества

  1. Использовать сильные стороны EMA и SMA для определения средне-долгосрочных тенденций.

  2. Увеличение фильтрации с индикатором импульса повышает надежность и уменьшает ложные сигналы.

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

  4. Настраиваемые периоды EMA, SMA и порог импульса, адаптируемые к различным рыночным условиям.

  5. Простая логика с гибкостью оптимизации, сильная практичность.

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

  1. EMA и SMA имеют отстающий эффект, могут упустить краткосрочные возможности.

  2. Тенденция не подходит для рынков с ограниченным диапазоном.

  3. Порог импульса требует итеративного обратного тестирования для оптимального параметра, риски перенастройки.

  4. Долгосрочные системы предлагают стабильную, но потенциально ограниченную абсолютную доходность.

  5. Может сократить периоды MA или добавить дополнительные показатели для улучшения адаптивности.

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

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

  2. Добавьте дополнительные индикаторы, такие как MACD, KD для дополнительной проверки.

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

  4. Включить стоп-лосс для контроля рисков.

  5. Настройка для символов-специфических параметров с использованием машинного обучения функции извлечения.

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

Заключение

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


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

//@version=4
strategy(title="EMA Difference Mapping with Trades", shorttitle="EMA Diff Map", overlay=false)

// Inputs
emaLength = input(20, "EMA Length")
stdDevLength = input(2, "Standard Deviation Length")
priceSource = close
takeProfitPoints = input(1000, title="Take Profit (in Points)")
stopLossPoints = input(2500, title="Stop Loss (in Points)")

// Calculate EMA
ema = ema(priceSource, emaLength)

// Calculate Standard Deviation
stdDev = stdev(priceSource, stdDevLength)

// Calculate differences
diff1 = (ema + stdDev) - ema
diff2 = ema - (ema - stdDev)

// Calculate min and max differences from last year
lookbackPeriod = 504 // Number of trading days in a year
minDiff1 = lowest(diff1, lookbackPeriod)
maxDiff1 = highest(diff1, lookbackPeriod)
minDiff2 = lowest(diff2, lookbackPeriod)
maxDiff2 = highest(diff2, lookbackPeriod)

// Map differences based on requirements
mappedDiff1 = 50 + 50 * ((diff1 - minDiff1) / (maxDiff1 - minDiff1))
mappedDiff2 = 50 - 50 * ((diff2 - minDiff2) / (maxDiff2 - minDiff2))

// Combine mapped differences into a single line
mappedLine = if close > ema
    mappedDiff1
else
    mappedDiff2

// Plot 'mappedLine' in the main chart area conditionally
plot(mappedLine, title="EMA Difference Mapping", color=(close > ema ? color.blue : na), style=plot.style_line, linewidth=2)

// Calculate the 50EMA and 200SMA
ema50 = ema(close, 50)
sma200 = sma(close, 200)

// Plot the 50EMA and 200SMA on the main chart
plot(ema50, color=color.blue, title="50 SMA", linewidth=2)
plot(sma200, color=color.red, title="200 SMA", linewidth=2)

// Initialize trade variables
var bool waitingForBuy = na
var bool waitingForSell = na
var bool buyConditionMet = false
var bool sellConditionMet = false

if not sellConditionMet and crossunder(ema50, sma200)
    sellConditionMet := true
    waitingForBuy := false

if sellConditionMet 
    waitingForSell := true
    sellConditionMet := false

if waitingForSell and close < sma200 and mappedLine > 75
    strategy.entry("Sell", strategy.short)
    strategy.exit("Sell Exit", "Sell", profit=takeProfitPoints, loss=stopLossPoints)
    waitingForSell := false

// Define the strategy conditions and execute trades
if not buyConditionMet  and crossover(ema50, sma200)
    buyConditionMet := true
    waitingForSell := false

if buyConditionMet 
    waitingForBuy := true
    buyConditionMet := false

if waitingForBuy and close > sma200 and mappedLine < 25
    strategy.entry("Buy", strategy.long)
    strategy.exit("Buy Exit", "Buy", profit=takeProfitPoints, loss=stopLossPoints)
    waitingForBuy := false


Больше