Целью этой стратегии является определение точки окончания краткосрочной нисходящей тенденции актива и фиксированное вложение определенной суммы на покупку актива в этой точке. Таким образом, после начала обратного движения актива можно фиксировать инвестиции по более низкой цене.
Стратегия основана на месячных временных рамках. 240 1-часовых K-линий в месяц используются для определения времени, когда тренд изменится.
В частности, стратегия рассчитывает разницу между скоростной и медленной линиями EMA._CD и EMA_Сигнальная линия CD, когда она проходит по сигнальной линии на скоростной линии, определяет, что краткосрочная нисходящая тенденция закончилась, и посылает сигнал покупки.
После того, как сигнал о покупке был выдан, стратегия будет ликвидирована в конце месяца. Затем этот процесс повторяется во второй месяц, регулярно покупая и удерживая в течение месяца.
Это позволяет нам снизить давление в конце краткосрочного падения и фиксировать прибыль.
Самым большим преимуществом этой стратегии является возможность фильтровать шокирующие события, покупая только в то время, когда тренд меняется, и фиксировать инвестиции по более выгодной цене.
Кроме того, использование EMA для определения обратной точки тренда может быть более устойчивым и точным, чем просто по поводу обратной линии K. EMA может сгладить влияние шума на краткосрочный рынок на время покупки.
Наконец, установка стоп-лосса в конце месяца позволяет блокировать инвестиционный результат за каждый месяц, ограничивая максимальные потери за месяц.
Наибольший риск этой стратегии заключается в том, что цена после покупки продолжает падать, что приводит к потере убытков в конце месяца. Это обычно происходит из-за ошибки в реверсии.
Можно оптимизировать суждение путем корректировки параметров цикла EMA или в сочетании с другими показателями, такими как RSI, для подтверждения обратного сигнала.
Еще один риск - установка стоп-стоп. Слишком маленькие стоп-стопы легко могут быть покрыты краткосрочными колебаниями, а слишком большие не ограничивают потери. Необходимо тестировать различные стоп-стопы, чтобы найти оптимальные параметры.
Эта стратегия может быть оптимизирована в следующих аспектах:
Оптимизация циклических параметров EMA, чтобы найти оптимальную комбинацию параметров для определения обратной тенденции
Добавление фильтров на другие индикаторы, такие как RSI, для подтверждения обратного сигнала
Тестирование различных точек остановки, чтобы найти оптимальные места для остановки, которые максимально ограничивают потери и не подвергаются арбитражу
Можно рассмотреть возможность добавления мобильного стопа на основе стоп-лосса, при этом в режиме реального времени корректировать стоп-позицию в зависимости от цены.
Можно тестировать различные временные периоды, например, солнечный, круговорочный, чтобы увидеть, какой из этих периодов будет наиболее эффективным.
Общая идея этой стратегии ясна и проста, она позволяет эффективно отфильтровывать рынок колебаний, чтобы инвестировать в более низкие цены. Общая идея этой стратегии состоит в том, что она является хорошей стратегией для размещения фиксированных активов и заслуживает дальнейшего тестирования.
/*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)