Цель этой стратегии заключается в выявлении точек переворота краткосрочных нисходящих тенденций активов и инвестировании фиксированной суммы денег в эти точки. Это позволяет фиксировать средние стоимости долларов (DCA) по относительно более низким ценам после начала восходящих тенденций.
Эта стратегия действует в месячный график. В каждом месяце есть 240 часовых бар, которые используются для определения сроков изменения тренда.
В частности, стратегия рассчитывает разницу между быстрой EMA и медленной EMA (EMA_CD), а также линию сигнала EMA_CD. Когда быстрая линия пересекает линию сигнала, она определяет конец краткосрочного нисходящего тренда и запускает сигнал покупки.
После сигнала покупки стратегия закрывает все позиции в конце месяца. Затем процесс повторяется в следующем месяце, с фиксированными периодическими покупками и удержаниями в течение одного месяца.
Это позволяет нам вычислить дно в конце краткосрочных спадов, и среднюю стоимость доллара в фиксированные интервалы.
Самое большое преимущество этой стратегии заключается в том, что она может отфильтровывать рынки, ограниченные диапазоном, и покупать только в моменты перелома тренда, таким образом, средняя стоимость доллара по относительно лучшим ценам.
Кроме того, использование EMA для определения точек переворота может быть более стабильным и точным по сравнению с только взглядом на перевороты свечей. EMA может сгладить краткосрочный рыночный шум, который влияет на время входа.
Наконец, ежемесячный стоп-лосс блокирует производительность для каждой инвестиции в месяц, ограничивая максимальную потерю в месяц.
Наибольший риск этой стратегии заключается в том, что цены продолжают снижаться после покупки, что приводит к остановке потерь в конце месяца.
Мы можем оптимизировать параметры EMA для улучшения идентификации, или комбинировать другие индикаторы, такие как RSI, чтобы подтвердить сигналы отмены.
Другим риском является уровень стоп-лосса. Стоп-лосс, который слишком тесный, может быть легко остановлен краткосрочными колебаниями. Стоп-лосс, который слишком широк, не может ограничить потери. Оптимальный параметр должен быть найден путем тестирования различных уровней стоп-лосса.
Стратегия может быть улучшена в следующих областях:
Оптимизировать периоды EMA для поиска оптимальной комбинации параметров для выявления отклонений.
Добавьте другие фильтры, такие как RSI, чтобы подтвердить сигналы обратного движения.
Испытайте разные уровни остановки потери, чтобы найти оптимальную точку, которая максимально предотвращает потери, не получая випса.
Подумайте о добавлении последующей остановки поверх остановки потери для динамической корректировки уровня остановки на основе цены.
Проверьте разные временные рамки, например, ежедневные или еженедельные, чтобы увидеть, какой из них лучше всего подходит для этой стратегии.
Общая идея этой стратегии проста и ясна - использование EMA для выявления краткосрочных обратных тенденций и средней стоимости доллара в точках обратного движения ежемесячно. Она может эффективно отфильтровывать нестабильные рынки и инвестировать по относительно низким ценам. Пространство оптимизации заключается в основном в настройке параметров и методах остановки потерь. В целом это отличная концепция стратегии для распределения основных активов, которая стоит дальнейшего тестирования и улучшения.
/*backtest start: 2023-09-07 00:00:00 end: 2023-10-07 00:00:00 period: 1h 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/ // © BHD_Trade_Bot // @version=5 // strategy( // shorttitle = 'DCA After Downtrend', // title = 'DCA After Downtrend (by BHD_Trade_Bot)', // overlay = true, // calc_on_every_tick = true, // calc_on_order_fills = true, // use_bar_magnifier = true, // pyramiding = 100, // initial_capital = 0, // default_qty_type = strategy.cash, // default_qty_value = 1000, // commission_type = strategy.commission.percent, // commission_value = 0.1) // Backtest Time Period start_year = input(title='Start year' ,defval=2017) start_month = input(title='Start month' ,defval=1) start_day = input(title='Start day' ,defval=1) start_time = timestamp(start_year, start_month, start_day, 00, 00) end_year = input(title='end year' ,defval=2050) end_month = input(title='end month' ,defval=1) end_day = input(title='end day' ,defval=1) end_time = timestamp(end_year, end_month, end_day, 23, 59) window() => true // EMA ema50 = ta.ema(close, 50) ema200 = ta.ema(close, 200) // EMA_CD emacd = ema50 - ema200 emacd_signal = ta.ema(emacd, 20) hist = emacd - emacd_signal // Count n candles after x long entries var int nPastCandles = 0 var int entryNumber = 0 nPastCandles := nPastCandles + 1 // ENTRY CONDITIONS // 8 hours per day => 240 hours per month entry_condition1 = nPastCandles > entryNumber * 240 // End of downtrend entry_condition2 = ta.crossover(emacd, emacd_signal) ENTRY_CONDITIONS = entry_condition1 and entry_condition2 if ENTRY_CONDITIONS and window() entryNumber := entryNumber + 1 entryId = 'Long ' + str.tostring(entryNumber) strategy.entry(entryId, strategy.long) // CLOSE CONDITIONS // Last bar CLOSE_CONDITIONS = barstate.islast if CLOSE_CONDITIONS strategy.close_all() // Draw plot(ema50, color=color.orange, linewidth=3) plot(ema200, color=entry_condition1 ? color.green : color.red, linewidth=3)