Эта стратегия сочетает в себе индикатор MACD и несколько линий EMA для захвата сильных рыночных тенденций из двух временных рамок - еженедельной и внутридневной. Она использует индикатор MACD на еженедельном графике для определения общего направления тренда и три линии EMA (5-дневные, 15-дневные, 30-дневные) на внутридневном графике для подтверждения тренда и совершения сделок в точках прорыва. Основная идея заключается в том, чтобы следовать сильным тенденциям и ездить по большим волнам, вступая в сделки, когда краткосрочная EMA превышает долгосрочную EMA, и выходя, когда EMA возвращаются или срабатывают условия стоп-лосса.
Еженедельный MACD определяет общий тренд: Вычислите еженедельный индикатор MACD и сравните разницу между значениями гистограммы MACD текущей недели и предыдущих недель. Положительная разница указывает на восходящий тренд, а отрицательная разница указывает на нисходящий. Обновляйте направление тренда каждый понедельник на рынке.
Многочисленные линии EMA подтверждают тенденцию: нанесите 5-дневную, 15-дневную и 30-дневную линии EMA на внутридневный график. Когда краткосрочная EMA выходит выше и удаляется от долгосрочной EMA, тенденция растет; наоборот, тенденция снижается.
Торговля в пунктах пересечения ЕМА:
Добавление позиций: на данный момент не установлено никаких дополнительных условий входа.
Объединение двух временных рамок делает определение тренда более надежным. Еженедельный MACD избегает застрять на рынках с диапазоном, в то время как внутридневные кроссоверы EMA захватывают каждую волну в рамках тренда.
Выбор 5/15/30-дневных EMA на внутридневном графике эффективно фильтрует шум и отслеживает явные тенденции.
Установки стоп-лосса разумны, контролируя риск на отдельных сделках.
Модульная конструкция кода, с ключевыми компонентами, такими как расчеты MACD и EMA, является очень многоразовой и расширяемой.
Неправильный выбор порога разницы гистограммы MACD может привести к чрезмерно свободным или строгим критериям тренда, вызывая ошибочные оценки.
Неправильный выбор параметров внутридневного EMA - слишком короткий может привести к переоценке, а слишком длинный может упустить возможности.
Неправильные фиксированные точки остановки потери - слишком узкое установление может привести к частым остановкам, в то время как слишком широкое может привести к чрезмерным потерям на сделку.
В то же время, в долгосрочной перспективе EMA могут эффективно контролировать риски и обеспечивать хорошие результаты.
Подумайте о добавлении других индикаторов, таких как RSI, в верхнюю часть еженедельного MACD, чтобы подтвердить силу тренда и улучшить точность.
Рассмотреть возможность добавления других индикаторов, таких как CCI, в качестве дополнительных фильтров для перекрестных сигналов внутридневного EMA для снижения частоты торговли и риска.
Установите индивидуальные точки остановки потери на основе исторической волатильности каждой акции, чтобы лучше соответствовать ее характеристикам.
Подумайте о добавлении стратегических правил для масштабирования позиций - постепенное добавление сильных тенденций и сокращение ослабевающих тенденций для повышения эффективности капитала.
Стратегия MACD + EMA Multi-Timeframe Breakout - это стратегия, основанная на тенденциях, с научной основой для определения и подтверждения тренда. Она может эффективно улавливать основные рыночные тенденции и генерировать стабильную доходность. Между тем, стратегия довольно полная в управлении рисками, эффективно ограничивая снижение через разумные правила остановки и выхода. Однако есть также некоторые недостатки, такие как отстающие сигналы тренда и отсутствие правил масштабирования, которые могут быть дополнительно оптимизированы и улучшены. В целом, это очень полезная количественная торговая стратегия для изучения и использования.
/*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)