Средняя стоимость доллара после стратегии нисходящего тренда

Автор:Чао Чжан, Дата: 2024-01-17 17:57:58
Тэги:

img

Обзор

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

Принцип стратегии

  1. Определение регулярного сигнала отслеживания: после 24*30 K-линий (которые представляют один месяц) определяется, что нормальная точка отслеживания достигнута, и выводится первый сигнал.

  2. Конец краткосрочного падения: используйте индикатор MACD для определения тренда. Когда происходит дивергенция MACD и MACD опускается ниже линии сигнала, определяется, что краткосрочное падение закончилось.

  3. Правила входа: когда одновременно запускается регулярный сигнал отслеживания и конец краткосрочного сигнала снижения, выпускается сигнал отслеживания и открываются длинные позиции.

  4. Правила выхода: когда последняя линия К. закрывается, освободите все позиции.

Следует отметить, что стратегия по умолчанию отслеживает 1000 долларов в месяц в бэктестах, которые будут расширены до 33 месяцев, то есть общий объем инвестиций составит 33 000 долларов.

Анализ преимуществ

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

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

Риски и решения

Основной риск стратегии заключается в невозможности точно определить конец краткосрочного спада. Суждение индикатора MACD о конце спада может задержаться, что приведет к невозможности выхода в оптимальную точку. Кроме того, рассредоточенное инвестирование средств также увеличивает эксплуатационные затраты.

Подумайте о добавлении дополнительных индикаторов для определения тенденций, таких как полосы Боллинджера, KDJ и т. Д. Эти индикаторы могут заранее предвидеть время обращения. В то же время сумму средств, инвестируемых каждый месяц, можно оптимизировать для снижения влияния операционных затрат на доходность.

Руководство по оптимизации

Стратегия может быть дополнительно оптимизирована в следующих направлениях:

  1. Оптимизировать регулярный цикл отслеживания, например, один раз в два месяца, чтобы уменьшить проблему чрезмерной частоты торговли.

  2. Включите больше показателей, чтобы определить конец краткосрочного спада, приблизив точку входа к самой низкой точке.

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

  4. Постарайтесь использовать стратегии стоп-лосса, чтобы избежать чрезмерных потерь, когда цены падают слишком низко.

  5. Проверить влияние различных периодов хранения на доходы, чтобы найти оптимальные дни хранения.

Резюме

Общая идея этой средней стоимости доллара после стратегии нисходящего тренда ясна и легко понятна. Объединив регулярное пополнение и краткосрочное суждение, можно получить более доступную среднюю стоимость. Средне- и долгосрочное владение этой стратегией может генерировать стабильные доходы и подходит для инвесторов, преследующих долгосрочную инвестиционную ценность. В то же время есть некоторые направления, которые можно оптимизировать для дальнейшего улучшения стратегии, чтобы ее производительность могла подняться на один уровень.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
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 v2',
 title                 = 'DCA After Downtrend v2 (by BHD_Trade_Bot)',
 overlay               = true,
 calc_on_every_tick    = false,
 calc_on_order_fills   = false,
 use_bar_magnifier     = false,
 pyramiding            = 1000,
 initial_capital       = 0,
 default_qty_type      = strategy.cash,
 default_qty_value     = 1000,
 commission_type       = strategy.commission.percent,
 commission_value      = 1.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() => time >= start_time and time <= end_time ? true : false
h1_last_bar = (math.min(end_time, timenow) - time)/1000/60/60 < 2



// 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

// BHD Unit
bhd_unit = ta.rma(high - low, 200) * 2
bhd_upper = ema200 + bhd_unit
bhd_upper2 = ema200 + bhd_unit * 2
bhd_upper3 = ema200 + bhd_unit * 3
bhd_upper4 = ema200 + bhd_unit * 4
bhd_upper5 = ema200 + bhd_unit * 5

bhd_lower = ema200 - bhd_unit
bhd_lower2 = ema200 - bhd_unit * 2
bhd_lower3 = ema200 - bhd_unit * 3
bhd_lower4 = ema200 - bhd_unit * 4
bhd_lower5 = ema200 - bhd_unit * 5

// Count n candles after x long entries
var int nPastCandles = 0
var int entryNumber = 0
if window()
    nPastCandles := nPastCandles + 1



// ENTRY CONDITIONS

// 24 * 30 per month
entry_condition1 = nPastCandles > entryNumber * 24 * 30

// End of downtrend
entry_condition2 = emacd < 0 and hist < 0 and hist > hist[2]

ENTRY_CONDITIONS = entry_condition1 and entry_condition2


if ENTRY_CONDITIONS
    entryNumber := entryNumber + 1
    entryId = 'Long ' + str.tostring(entryNumber)
    strategy.entry(entryId, strategy.long)
    
    

// CLOSE CONDITIONS

// Last bar
CLOSE_CONDITIONS = barstate.islast or h1_last_bar

if CLOSE_CONDITIONS
    strategy.close_all()



// Draw
colorRange(src) =>
    if src > bhd_upper5
        color.rgb(255,0,0)
    else if src > bhd_upper4
        color.rgb(255,150,0)
    else if src > bhd_upper3
        color.rgb(255,200,0)
    else if src > bhd_upper2
        color.rgb(100,255,0)
    else if src > bhd_upper
        color.rgb(0,255,100)
    else if src > ema200
        color.rgb(0,255,150)
    else if src > bhd_lower
        color.rgb(0,200,255)
    else if src > bhd_lower2
        color.rgb(0,150,255)
    else if src > bhd_lower3
        color.rgb(0,100,255)
    else if src > bhd_lower4
        color.rgb(0,50,255)
    else
        color.rgb(0,0,255)
        
bhd_upper_line = plot(bhd_upper, color=color.new(color.teal, 90))
bhd_upper_line2 = plot(bhd_upper2, color=color.new(color.teal, 90))
bhd_upper_line3 = plot(bhd_upper3, color=color.new(color.teal, 90))
bhd_upper_line4 = plot(bhd_upper4, color=color.new(color.teal, 90))
bhd_upper_line5 = plot(bhd_upper5, color=color.new(color.teal, 90))

bhd_lower_line = plot(bhd_lower, color=color.new(color.teal, 90))
bhd_lower_line2 = plot(bhd_lower2, color=color.new(color.teal, 90))
bhd_lower_line3 = plot(bhd_lower3, color=color.new(color.teal, 90))
bhd_lower_line4 = plot(bhd_lower4, color=color.new(color.teal, 90))
bhd_lower_line5 = plot(bhd_lower5, color=color.new(color.teal, 90))
// fill(bhd_upper_line5, bhd_lower_line5, color=color.new(color.teal, 95))

plot(ema50, color=color.orange, linewidth=3)
plot(ema200, color=color.teal, linewidth=3)
plot(close, color=color.teal, linewidth=1)
plot(close, color=colorRange(close), linewidth=3, style=plot.style_circles)


Больше