
Эта стратегия объединяет индикатор MACD и несколько линий EMA, чтобы захватить сильные тенденции рынка с двух временных масштабов: круговой и минутной линии. На круговой линии используйте индикатор MACD, чтобы определить направление большой тенденции, на минутной линии используйте три линии EMA на 5, 15 и 30 дней, чтобы подтвердить тенденцию и торговать на прорывах.
Круглый MACD определяет большую тенденцию: рассчитывается круговой MACD, который отличается от MACD-полюса на этой и на прошлой неделе. Различия больше 0 указывают на тенденцию вверх, меньше 0 указывают на тенденцию вниз.
Подтверждение тренда с несколькими линиями EMA: на графике с минутной линией нарисуйте три линии EMA 5, 15 и 30 дней. Когда краткосрочная EMA находится над долгосрочной EMA и движется вверх, она движется вверх; наоборот, она движется вниз.
Торговля в точках пересечения EMA:
Накопление: на данный момент нет условий для набора.
Двойные временные масштабы позволяют более надежно оценивать тренды. Круглый MACD определяет большие тренды, избегая чрезмерного покрытия в волатильных рынках; минутная линия EMA перекрещивает подтверждение тренда, захватывая каждую волну тренда.
Параметры минутной линии EMA выбирают 5, 15, 30 дней, а комбинация трех линий отлично отфильтровывает шум и улавливает четкие тенденции.
Установка стоп-лосса является разумной и позволяет контролировать риски по одной сделке. В сочетании с фиксированным стопом и стопом EMA, можно контролировать потери и следовать тенденции.
Модульный дизайн кода, основные модули, такие как расчет MACD, расчет EMA и т. Д., обладают высокой многофункциональностью и расширяемостью.
Неправильно выбранный порог разрыва на диаграмме MACD может привести к тому, что критерии для определения тенденции будут слишком мягкими или жесткими, что может привести к ошибке. Выбор оптимального порога может быть сделан с помощью обратного измерения и оптимизации параметров.
Неправильно выбранные параметры EMA с часовой линией, слишком короткий цикл приводят к частым сделкам, слишком длинный - к упущенным возможностям. Выбор оптимальной комбинации параметров может быть сделан с помощью обратного измерения и оптимизации параметров.
Неправильно выбрано место для остановки с фиксированным количеством точек, слишком маленькая настройка приводит к частому остановке, слишком большая настройка приводит к слишком большим одноразовым убыткам. Можно настроить индивидуальные остановки в зависимости от особенностей колебаний сорта.
В результате перемены тренда линия EMA может отстать и пропустить оптимальную точку покупки или продажи. Однако, в долгосрочной перспективе, эффективное управление рисками и общая эффективность стратегии остаются хорошими.
Можно рассматривать на основе MACD определение тенденции, а затем наложить RSI и другие показатели, чтобы подтвердить силу тенденции, повысить точность определения тенденции.
На основе пересечения линий EMA можно добавлять такие показатели, как CCI, в качестве фильтрующих условий для торговых сигналов, снижая частоту торговли и риск.
В зависимости от исторических характеристик колебаний акций, можно установить индивидуальные точки остановки, чтобы стратегия была более подходящей для особенностей разновидности.
Можно рассмотреть стратегию увеличения и снижения позиций, постепенно увеличивая позиции при сильных тенденциях и постепенно снижая позиции при слабых тенденциях, чтобы повысить эффективность использования средств.
Стратегия прорыва MACD + EMA с несколькими временными шкалами является стратегией, основанной на тенденциях, которая имеет сравнительно научную основу для определения тенденции и подтверждения тенденции, способна эффективно ухватить основные тенденции рынка и получить стабильную прибыль. В то же время, эта стратегия также достаточно совершенна в области контроля риска, эффективно контролируя стратегию отступления путем разумного установления условий остановки и позиции.
/*backtest
start: 2023-03-16 00:00:00
end: 2024-03-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// 1) 전주와 전전주의 히스토그램의 차이를 계산하여, 매주 월요일에 매매 방향을 표시하고,
// 2) 5일, 15일, 30일 선을 호출하여 평행하게 그리고, 매매 방향에 따라
// 3) 분봉기준의 이동평균선 매매전략
// 4) 수익 실현은 미설정 해둠
//@version=5
strategy('Last week MACD+ 15day, 30day break through, by Ho.J', overlay=true, initial_capital=30000, commission_value = 7.5, commission_type=strategy.commission.cash_per_order, slippage = 0)
// 백테스팅 기간 설정
start_time = input(timestamp("Jan 19 2024 00:00:01"), confirm = true)
end_time = input(timestamp("MAR 19 2024 23:59:59"), confirm = true)
is_in_time = true
stopLoss = input.int(100, title="손절 수준")
// 지난주 값 불러오기 입력 매개변수, 1은 5일, 3은 15일, 6은 30일 이동평균선을 구하는 변수임
emaLength1 = input(1, title="EMA Length")
emaLength2 = input(3, title="EMA Length")
emaLength3 = input(6, title="EMA Length")
timeframePeriod = "W" // 'D'는 일간 데이터를 의미
// 분봉기준 EMA 계산
shortEMA = ta.ema(close, 50)
mediumEMA = ta.ema(close, 60)
longEMA = ta.ema(close, 150)
// 분봉기준 EMA 그리기
plot(shortEMA, color=color.blue, title="5일 EMA")
plot(mediumEMA, color=color.orange, title="15일 EMA")
plot(longEMA, color=color.red, title="30일 EMA")
// 주간 MACD 계산, 전주와 전전주 히스토그램을 계산하여 상대적인 상승, 하락을 계산
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
histogram = macdLine - signalLine
histLastWeek = request.security(syminfo.tickerid, timeframePeriod, histogram[1], lookahead=barmerge.lookahead_on)
histWeekBeforeLast = request.security(syminfo.tickerid, timeframePeriod, histogram[2], lookahead=barmerge.lookahead_on)
histDiff = histLastWeek - histWeekBeforeLast
// 현재 주의 월요일 첫 봉인지 확인
isMondayFirstBar = (dayofweek == dayofweek.monday) and (hour == 09) and (minute == 00) // 여기서 시간은 시장 개장 시간에 따라 조정해야 함
// 월요일 첫봉에, 주간 MACD 히스토그램이 상승하면 '매수', 하락하면 '매도' 표시
var label myLabel = na
if (isMondayFirstBar)
if (histDiff > 0)
myLabel := label.new(bar_index, high, "이번주는 매수만", color=color.green, textcolor=color.white, style=label.style_label_down, size=size.large)
else if (histDiff < 0)
myLabel := label.new(bar_index, low, "이번주는 매도만", color=color.red, textcolor=color.white, style=label.style_label_up, size=size.large)
// 지난주 EMA 값 요청
// 'lookahead'를 사용하여 지난 데이터를 기준으로 계산
lastWeekEMA1 = request.security(syminfo.tickerid, timeframePeriod, ta.ema(close[1], emaLength1), lookahead=barmerge.lookahead_on)
lastWeekEMA2 = request.security(syminfo.tickerid, timeframePeriod, ta.ema(close[1], emaLength2), lookahead=barmerge.lookahead_on)
lastWeekEMA3 = request.security(syminfo.tickerid, timeframePeriod, ta.ema(close[1], emaLength3), lookahead=barmerge.lookahead_on)
// 지난주 EMA 그리기
plot(lastWeekEMA1, color=color.red, title="Last Week EMA1")
plot(lastWeekEMA2, color=color.rgb(157, 126, 126), title="Last Week EMA2")
plot(lastWeekEMA3, color=color.rgb(199, 192, 192), title="Last Week EMA3")
// 매수/매도 조건
buySignal = ta.crossover(close, lastWeekEMA2) and histDiff > 0
// addbuySignal = ta.crossover(close, lastWeekEMA3) and histDiff > 0
sellSignal = ta.crossunder(shortEMA, longEMA) and histDiff < 0
// addSellSignal = ta.crossunder(close, lastWeekEMA3) and histDiff < 0
// 매수 조건
if (buySignal)
strategy.entry('Buy', strategy.long)
alert('Buy Signal', alert.freq_once_per_bar_close)
// if (addbuySignal)
// strategy.entry('Buy', strategy.long)
// alert('add Buy Signal', alert.freq_once_per_bar_close)
if (strategy.position_size > 0 and ((strategy.position_avg_price - close) >= stopLoss) or ta.crossunder(close, mediumEMA))
strategy.close('Buy')
alert('Close Buy Signal', alert.freq_once_per_bar_close)
// 매도 조건
if (sellSignal)
strategy.entry('Sell', strategy.short)
alert('Sell Signal', alert.freq_once_per_bar_close)
//if (addSellSignal)
// strategy.entry('Sell', strategy.short)
// alert('add Sell Signal', alert.freq_once_per_bar_close)
if (strategy.position_size < 0 and ((close - strategy.position_avg_price) >= stopLoss) or ta.crossover(shortEMA, mediumEMA))
strategy.close('Sell')
alert('Close Sell Signal', alert.freq_once_per_bar_close)