
Стратегия Moving Average Crossover - это количественная торговая стратегия, основанная на простых движущихся средних. Эта стратегия производит сигналы покупки и продажи, когда они пересекаются, путем вычисления простых движущихся средних разных периодов.
В частности, эта стратегия рассчитывает простые движущиеся средние для 9-й и 45-й линий. Когда цена пересекает 9-ю и 45-ю линию вверх, она создает сигнал покупки; когда цена пересекает 9-ю и 45-ю линию вниз, она создает сигнал продажи.
Основная логика этой стратегии основана на принципе гибкого отсека от металлического отсека от движущихся средних. Движущаяся средняя эффективно фильтрует рыночный шум и указывает на изменение большого тренда. Когда краткосрочные средние пересекают долгосрочные средние, это означает, что цена начинает входить в восходящую тенденцию; когда краткосрочные средние пересекают долгосрочные средние, это означает, что цена начинает входить в нисходящую тенденцию.
В частности, эта стратегия использует простые движущиеся средние линии 9 и 45 дней. Линия 9 представляет собой краткосрочную тенденцию, а линия 45 представляет собой долгосрочную тенденцию. Когда цены пересекают линию 9 и 45 дней, это означает, что цена акции находится в восходящем канале в краткосрочной и долгосрочной перспективе, поэтому создает сигнал покупки; когда цены пересекают линию 9 и 45 дней, это означает, что восходящий тренд цены акций постепенно ослабевает, поэтому создает сигнал продажи.
С точки зрения логики кода, стратегия сначала вычисляет простые движущиеся средние для 9-й и 45-й линий, а затем определяет золотые и мертвые форки равной линии с помощью функций ta.crossover и ta.crossunder. При создании сигналов покупки и продажи, используйте функцию plotshape, чтобы нанести на K-линейный график сигналы треугольника и перевернутого треугольника.
Кроме того, в этой стратегии предусмотрена логика стоп-ложа для длинных и коротких позиций. В частности, после открытия позиции, максимальная и минимальная цены предыдущей K-линии будут использоваться в качестве стоп-ложа. Это позволит зафиксировать прибыль и избежать чрезмерных потерь.
Ответ:
В этой стратегии есть место для дальнейшей оптимизации:
Использование адаптивных или индексированных скользящих средних позволяет лучше улавливать изменения в тренде.
Увеличение фильтрующих сигналов, таких как показатели волатильности, чтобы избежать ошибочного сигнала в условиях потрясения.
Используйте метод оптимизации параметров для поиска оптимальной комбинации параметров.
В логике стоп-стоп добавляется механизм отслеживания трендов, что позволяет стоп-линии гибко отслеживать цены.
Повышение оценки поддержки и сопротивления на больших уровнях, чтобы избежать ошибочных сигналов в ключевых ценовых зонах.
Вместе с моделью машинного обучения мы можем дополнительно отфильтровывать качество сигнала.
Стратегия равнолинейного пересечения - это простая и практическая стратегия отслеживания тенденций. Она может эффективно фильтровать шум и улавливать изменения среднесрочных и долгосрочных тенденций цен.
/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("SMA Crossover Strategy", overlay=true)
// Input parameters
fast_length = input(9, title="Fast SMA Length")
slow_length = input(45, title="Slow SMA Length")
// Calculate moving averages
fast_sma = ta.sma(close, fast_length)
slow_sma = ta.sma(close, slow_length)
// Buy condition
buy_condition = ta.crossover(close, fast_sma) and ta.crossover(close, slow_sma)
// Sell condition
sell_condition = ta.crossunder(close, fast_sma) and ta.crossunder(close, slow_sma)
// Calculate stop loss levels
prev_low = request.security(syminfo.tickerid, "1D", low[1], lookahead=barmerge.lookahead_on)
prev_high = request.security(syminfo.tickerid, "1D", high[1], lookahead=barmerge.lookahead_on)
// Plot signals on the chart
plotshape(buy_condition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(sell_condition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)
// Strategy exit conditions
long_stop_loss = sell_condition ? prev_low : na
short_stop_loss = buy_condition ? prev_high : na
strategy.exit("Long Exit", from_entry="Long", when=sell_condition, stop=long_stop_loss)
strategy.exit("Short Exit", from_entry="Short", when=buy_condition, stop=short_stop_loss)
strategy.entry("Long", strategy.long, when=buy_condition)
strategy.entry("Short", strategy.short, when=sell_condition)