Estratégia de fuga em escala multitemporal MACD+EMA


Data de criação: 2024-03-22 11:13:12 última modificação: 2024-03-22 11:13:12
cópia: 0 Cliques: 685
1
focar em
1617
Seguidores

Estratégia de fuga em escala multitemporal MACD+EMA

Visão geral

A estratégia combina o indicador MACD e várias linhas EMA para capturar a tendência forte do mercado a partir de duas escalas de tempo, a linha horária e a linha do minuto. Na linha horária, o indicador MACD é usado para determinar a direção da grande tendência, na linha do minuto, três linhas EMA de 5, 15 e 30 dias são usadas para confirmar a tendência e negociar em pontos de ruptura.

Princípio da estratégia

  1. O MACD Circular determina a tendência geral: o MACD Circular é calculado comparando o diferencial do MACD da semana atual com o da semana anterior. O diferencial maior que 0 indica uma tendência ascendente e menor que 0 indica uma tendência descendente.

  2. Confirmação de tendência de várias linhas de EMA: Desenhe três linhas de EMA de 5, 15 e 30 dias no gráfico de linhas de minutos. Quando o EMA de curto prazo funciona acima e para cima do EMA de longo prazo, a tendência é para cima; o contrário é a tendência para baixo.

  3. EMA: Transações em pontos de cruzamento:

    • Faça mais: Faça mais quando o MACD circular está em alta e o preço de fechamento da linha de minutos atravessa a EMA de 15 dias. O stop loss é definido como um número fixo de pontos abaixo do preço médio da posição, ou seja, quando o EMA de 5 dias atravessa a EMA de 15 dias.
    • Cancelar: Cancelar quando o MACD circular tende para baixo e a EMA de 5 dias atravessa a EMA de 30 dias. O ponto de parada é fixado em pontos fixos sobre o preço médio da posição, ou se a EMA de 5 dias atravessa a EMA de 15 dias.
  4. Aceleração: não há condições de aceleração.

Análise de vantagens

  1. A combinação de duas escalas de tempo, o julgamento da tendência é mais confiável. A linha circular MACD julgar a tendência maior, evitando fazer mais cobertura no mercado de turbulência; A linha de minutos EMA cruzar a confirmação da tendência, capturando cada onda da tendência.

  2. A combinação de três linhas é capaz de filtrar o ruído e capturar uma tendência clara.

  3. A configuração do Stop Loss é razoável e controla o risco de uma única negociação. O Stop Loss em pontos fixos e o Stop Loss em EMA são combinados para controlar perdas e acompanhar a tendência.

  4. O código é projetado em módulos, com módulos principais como o cálculo MACD, o cálculo EMA, entre outros, com uma grande versatilidade e extensibilidade.

Análise de Riscos

  1. A escolha inadequada de um limite de diferença no gráfico MACD pode levar a padrões de julgamento de tendências muito relaxados ou rigorosos, tornando o julgamento inadequado. O limite ideal pode ser selecionado por meio de retrocesso e otimização de parâmetros.

  2. A escolha incorreta dos parâmetros do EMA da linha de minutos, o período muito curto pode levar a negociações frequentes, e o período muito longo pode perder oportunidades. Pode-se escolher a melhor combinação de parâmetros por meio de retrocesso e otimização de parâmetros.

  3. A escolha inadequada da posição de parada de pontos fixos, a configuração exagerada pode levar a perdas frequentes, a configuração exagerada de convenções pode levar a perdas excessivas. Pode-se definir um stop-loss personalizado de acordo com as características de flutuação da variedade.

  4. A linha de EMA de um ponto de viragem de tendência pode ficar atrasada e pode perder o melhor ponto de compra ou venda. Mas, a longo prazo, a estratégia de controlar o risco de forma eficaz e o desempenho geral ainda é bom.

Direção de otimização

  1. Pode-se considerar basear-se no MACD para determinar a tendência e sobrepor-se a indicadores como o RSI para confirmar a força da tendência e melhorar a precisão do julgamento da tendência.

  2. Pode-se basear em EMA cruzando linhas, adicionando indicadores como CCI como condições de filtragem de sinais de negociação, reduzindo a frequência de negociação e risco.

  3. Pode-se definir um número de pontos de parada personalizado de acordo com as características de flutuação histórica de cada ação, para que a estratégia seja mais adequada às características da variedade.

  4. Pode-se considerar estratégias de aumento e diminuição da posição, aumentando gradualmente a posição quando a tendência é forte e diminuindo gradualmente a posição quando a tendência é fraca, aumentando a eficiência do uso do capital.

Resumir

A estratégia de ruptura de várias escalas de tempo do MACD + EMA é uma estratégia de acompanhamento de tendências, com base científica para julgar tendências e confirmar tendências, capaz de capturar efetivamente as principais tendências do mercado e obter ganhos estáveis. Ao mesmo tempo, a estratégia também é bastante perfeita em termos de controle de risco, controlando efetivamente a retirada da estratégia por meio de um paragem razoável e condições de posição pacíficas.

Código-fonte da estratégia
/*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)