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

SMA MA CROSSOVER momentum
Дата создания: 2025-02-20 11:10:22 Последнее изменение: 2025-02-27 17:48:50
Копировать: 0 Количество просмотров: 263
2
Подписаться
319
Подписчики

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

Обзор

Эта стратегия является системой торговли, которая отслеживает тренды на основе двух равномерных скрещиваний. С помощью сравнения относительно позиционных отношений между краткосрочными и долгосрочными скользящими средними (около 9 и 21 дней, соответственно), она улавливает переходные моменты рыночных тенденций.

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

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

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

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

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

  1. Некоторые эксперты считают, что в условиях нестабильных рынков часто появляются ложные сигналы.
  2. Небольшая задержка во время входа и выхода
  3. отсутствие механизмов для сдерживания убытков, которые могут привести к большим потерям при резких колебаниях
  4. Опирание только на среднелинейные показатели, отсутствие многомерного анализа рынка
  5. Фиксированные параметры, трудно адаптироваться к различным рыночным условиям

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

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

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

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

Исходный код стратегии
/*backtest
start: 2024-05-20 00:00:00
end: 2024-12-13 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("Simple MA Crossover Strategy", overlay=true)

// Input parameters
shortMA = ta.sma(close, 9)
longMA = ta.sma(close, 21)

// Buy/Sell conditions
buyCondition = ta.crossover(shortMA, longMA)
sellCondition = ta.crossunder(shortMA, longMA)

// Plot moving averages
plot(shortMA, color=color.blue, title="Short MA")
plot(longMA, color=color.red, title="Long MA")

// Execute trades
if (buyCondition)
    strategy.entry("Buy", strategy.long)

if (sellCondition)
    strategy.close("Buy")

// Track trades, wins, and losses
var int totalTrades = 0
var int totalWins = 0
var int totalLosses = 0

if (strategy.opentrades > 0)
    totalTrades := totalTrades + 1

if (strategy.opentrades == 0 and strategy.opentrades[1] > 0)
    if (strategy.netprofit > 0)
        totalWins := totalWins + 1
    else
        totalLosses := totalLosses + 1

// Plot trade statistics
var label tradeStats = na
if (not na(tradeStats))
    label.delete(tradeStats)

tradeStats := label.new(bar_index, high, text="Trades: " + str.tostring(totalTrades) + "\nWins: " + str.tostring(totalWins) + "\nLosses: " + str.tostring(totalLosses), style=label.style_label_down, color=color.white, textcolor=color.black)