Эта стратегия генерирует торговые сигналы, основанные на перекрестке между быстрыми и медленными скользящими средними, относящимися к следующей стратегии тренда.
Вычислите средние скоростные и медленные движущиеся.
Когда быстрый MA пересекает медленный MA, он указывает на восходящий тренд и генерирует сигнал покупки.
Когда быстрый MA переходит ниже медленного MA, он указывает на нисходящий тренд и генерирует сигнал продажи.
Автоматически корректируя длину скользящих средних, стратегия динамически адаптируется к тенденции рынка для отслеживания прибыли.
Стратегия проста и понятна, легко понять и реализовать.
Он может эффективно отслеживать рыночные тенденции с большим потенциалом прибыли.
Динамическая корректировка параметров адаптируется к изменениям рыночных условий.
Настраиваемые алгоритмы MA увеличивают гибкость стратегии.
Гибкая логика покупки и продажи.
Частая торговля приводит к более высоким затратам на транзакции.
Задержки с применением МА могут пропустить лучшие точки входа и выхода на волатильных рынках.
Неправильный параметр MA и оптимизация частоты регулировки вызывают неудачу стратегии.
Строгий стоп-лосс необходим для ограничения потерь.
Обратный тренд может привести к огромным плавающим потерям.
Оптимизировать параметры MA для лучшего обнаружения изменений тренда.
Добавьте логику стоп-лосса для контроля одиночных потерь.
Добавить индикаторы оценки тренда, чтобы избежать потерь от изменения тренда.
Улучшить стратегию корректировки МО для более интеллектуального и автоматизированного использования.
Добавить модуль оптимизации параметров с использованием машинного обучения.
Логика стратегии проста и ясна, генерируя сделки на основе быстрого и медленного перекрестного действия МА. Она эффективно улавливает тенденции, но имеет риски. Непрерывная оптимизация параметров, логика остановки потерь необходима, чтобы сделать стратегию более надежной. В целом стратегия имеет большой потенциал для улучшения и стоит исследовать и применить.
/*backtest start: 2022-10-03 00:00:00 end: 2023-10-09 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // // @version=4 // © Ehsan Haghpanah, (ehsanha) // Algorithmic Trading Research // // eha Moving Averages Strategy, // A simple strategy based on crossing Moving Averages of // different lengths (a fast moving average and slow one) // strategy(title = "eha Moving Averages Strategy", shorttitle = "eha MA Strategy", overlay = true) // // -- strategy parameter(s) // moving averages parameter(s) var _fastMA_len = input(title = "Fast MA Length", defval = 21, type = input.integer, minval = 1, step = 1) var _slowMA_len = input(title = "Slow MA Length", defval = 34, type = input.integer, minval = 1, step = 1) var _ma_algo_id = input(title = "MA Algorithm", defval = "SMA", options = ["SMA", "EMA", "WMA"]) // backtesting date and time range parameter(s) var _startYear = input(defval = 2020, title = "Start Year", type = input.integer, minval = 1976) var _startMonth = input(defval = 1, title = "Start Month", type = input.integer, minval = 1, maxval = 12) var _startDay = input(defval = 1, title = "Start Day", type = input.integer, minval = 1, maxval = 31) var _closeYear = input(defval = 2020, title = "Close Year", type = input.integer, minval = 1984) var _closeMonth = input(defval = 9, title = "Close Month", type = input.integer, minval = 1, maxval = 12) var _closeDay = input(defval = 1, title = "Close Day", type = input.integer, minval = 1, maxval = 31) // // -- function(s) and calculation(s) // checks whether current time is in backtesting time range start_t = timestamp(_startYear, _startMonth, _startDay, 00, 00) // backtesting range start time, (00, 00); (hour, minute) close_t = timestamp(_closeYear, _closeMonth, _closeDay, 23, 59) // backtesting range close time, (23, 59); (hour, minute) isInRange() => true // // calculates moving average based on provided algorithm, source and length // alg : moving average algorithm // len : length // ser : series calcMA(alg, len, ser) => (len == 0) ? ser : ((alg == "SMA") ? sma(ser, len) : ((alg == "EMA") ? ema(ser, len) : (alg == "WMA" ? wma(ser, len) : na))) // // -- strategy logic and calculation(s) ma_fast = calcMA(_ma_algo_id, _fastMA_len, close) ma_slow = calcMA(_ma_algo_id, _slowMA_len, close) cross_ov = crossover (ma_fast, ma_slow) // returns true if fastMA crosses over slowMA cross_un = crossunder(ma_fast, ma_slow) // returns true if slowMA crosses over fastMA // // -- strategy execution logic // opens a long position whenever the time is in range and crosses over strategy.entry("ID", comment = "-", long = strategy.long, when = isInRange() and cross_ov) // closes the position whenever the time is in range and crosses under strategy.close("ID", comment = "-", when = isInRange() and cross_un) // // -- drawing and visualization co_fast = color.new(color.gray, 25) co_slow = color.new(color.gray, 75) // drawing moving average(s) plot(ma_fast, color = co_fast, linewidth = 2, style = plot.style_line) plot(ma_slow, color = co_slow, linewidth = 3, style = plot.style_line)