
A estratégia utiliza o MACD para construir um sinal de hipoteca, para negociar reversões em condições de boa tendência, e para obter ganhos através da configuração dinâmica de posições fora do campo.
A estratégia é baseada principalmente no indicador MACD, que gera um sinal de forquilhinha de ouro quando a linha MACD atravessa a linha de sinal de baixo para cima; um sinal de forquilhinha de ouro quando a linha MACD atravessa a linha de sinal de cima para baixo.
Quando o sinal de Gold Fork vem, se o preço de fechamento estiver acima da linha média da EMA, faça mais; Quando o sinal de Dead Fork vem, se o preço de fechamento estiver abaixo da linha média da EMA, faça em branco. Isso pode garantir a reversão de negociação sob a grande tendência.
Após a entrada, a estratégia usa o stop loss e o stop loss para fazer um stop loss dinâmico. Concretamente, o stop loss múltipla é definido como o preço de entrada(1-máxima queda); o stop-loss é definido como o preço de entrada(1+TARGET_STOP_RATIO*Máxima queda) ❚ opção em branco opção inversa ❚ onde a máxima queda é calculada dinamicamente, indicando o percentual de queda do espaço entre o swing low e o preço de fechamento; TARGET_STOP_RATIO assume 2, indicando que a taxa de perda é de 2 ❚
A vantagem de definir o ponto de saída desta forma é a capacidade de ajustar dinamicamente a taxa de perda e o ponto de parada de acordo com as flutuações do mercado. Em grandes flutuações, o ponto de saída é rapidamente interrompido, em pequenas flutuações, o ponto de parada é seguido.
O indicador MACD é usado para construir sinais de hipocrisia, que podem ser usados para determinar a hora de uma reversão de preço.
Combinando a linha média EMA como filtro, escolha o estado de tendência ascendente ao entrar na entrada, evitando a negociação de contra-balanço.
O sistema de controle de saída dinâmico, que pode ajustar a taxa de ganho e perda em tempo real, para obter altos lucros e controlar o risco.
A taxa de saída é rápida, reduzindo o tempo de negociação, e é mais adequada para investidores ocupados, devido à volatilidade do mercado.
Os indicadores MACD frequentemente causam falsos sinais em mercados com correção horizontal. A solução é adicionar a linha de equilíbrio como um filtro para evitar negociações adversas.
Em mercados extremamente voláteis, o DYNAMIC STOP pode causar perdas de parada excessivamente suaves, mas funciona melhor na maioria dos cenários. Se houver um cenário extremo, considere a taxa de perda fixa.
O espaço de lucro é limitado, o que requer negociações frequentes em busca de lucro. Isso requer que o investidor tenha uma certa capacidade de tolerância psicológica e tempo de investimento. Se você não tiver tempo para operar, considere o ajuste ao ciclo alto.
Ajustar os parâmetros MACD de acordo com as características específicas da variedade, otimizar o efeito de negociação de forquilhos de ouro.
Testar diferentes médias móveis como indicadores de tendências para encontrar melhores filtros.
Teste o método de cálculo do TARGET_STOP_RATIO e do máximo de queda para otimizar a estratégia de stop-loss.
Adicionar outros critérios, como mudanças no volume de transações, taxa de flutuação, etc., para melhorar a qualidade do sinal.
Tente o algoritmo de aprendizagem de máquina para refinar mais características, criar modelos multifatores dinâmicos e obter um stop-loss mais inteligente.
A estratégia em geral tem uma forte utilidade. Usando o MACD como sinal de negociação central, o aumento do julgamento de tendências e o controle dinâmico dos dois módulos auxiliares pode melhorar significativamente a eficácia da negociação do próprio MACD. A estratégia de stop-loss é uma direção importante para a otimização da estratégia.
/*backtest
start: 2022-12-05 00:00:00
end: 2023-12-11 00:00:00
period: 1d
basePeriod: 1h
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/
// © maxencetajet
//@version=5
strategy("MACD Strategy", overlay=true, initial_capital=1000, slippage=25)
src = input(title="Source", defval=close)
target_stop_ratio = input.float(title='Risk/Reward', defval=2, minval=0.5, maxval=100)
risk = input.float(2, title="Risk per Trade %")
riskt = risk / 100 + 1
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",
group="Backtest Time Period")
backtestStartDate = input(timestamp("5 June 2022"),
title="Start Date", group="Backtest Time Period",
tooltip="This start date is in the time zone of the exchange " +
"where the chart's instrument trades. It doesn't use the time " +
"zone of the chart or of your computer.")
backtestEndDate = input(timestamp("5 July 2022"),
title="End Date", group="Backtest Time Period",
tooltip="This end date is in the time zone of the exchange " +
"where the chart's instrument trades. It doesn't use the time " +
"zone of the chart or of your computer.")
inTradeWindow = true
emaV = input.int(200, title="Length", group="EMA")
swingHighV = input.int(7, title="Swing High", group="number of past candles")
swingLowV = input.int(7, title="Swing Low", group="number of past candles")
ema = ta.ema(src, emaV)
fast_length = input(title="Fast Length", defval=12, group="MACD")
slow_length = input(title="Slow Length", defval=26, group="MACD")
signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9, group="MACD")
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD")
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD")
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
longcondition = close > ema and ta.crossover(macd, signal) and macd < 0
shortcondition = close < ema and ta.crossunder(macd, signal) and macd > 0
float risk_long = na
float risk_short = na
float stopLoss = na
float takeProfit = na
float entry_price = na
risk_long := risk_long[1]
risk_short := risk_short[1]
swingHigh = ta.highest(high, swingHighV)
swingLow = ta.lowest(low, swingLowV)
lotB = (strategy.equity*riskt-strategy.equity)/(close - swingLow)
lotS = (strategy.equity*riskt-strategy.equity)/(swingHigh - close)
if strategy.position_size == 0 and longcondition and inTradeWindow
risk_long := (close - swingLow) / close
strategy.entry("long", strategy.long, qty=lotB)
if strategy.position_size == 0 and shortcondition and inTradeWindow
risk_short := (swingHigh - close) / close
strategy.entry("short", strategy.short, qty=lotS)
if strategy.position_size > 0
stopLoss := strategy.position_avg_price * (1 - risk_long)
takeProfit := strategy.position_avg_price * (1 + target_stop_ratio * risk_long)
entry_price := strategy.position_avg_price
strategy.exit("long exit", "long", stop = stopLoss, limit = takeProfit)
if strategy.position_size < 0
stopLoss := strategy.position_avg_price * (1 + risk_short)
takeProfit := strategy.position_avg_price * (1 - target_stop_ratio * risk_short)
entry_price := strategy.position_avg_price
strategy.exit("short exit", "short", stop = stopLoss, limit = takeProfit)
plot(ema, color=color.white, linewidth=2, title="EMA")
p_ep = plot(entry_price, color=color.new(color.white, 0), linewidth=2, style=plot.style_linebr, title='entry price')
p_sl = plot(stopLoss, color=color.new(color.red, 0), linewidth=2, style=plot.style_linebr, title='stopLoss')
p_tp = plot(takeProfit, color=color.new(color.green, 0), linewidth=2, style=plot.style_linebr, title='takeProfit')
fill(p_sl, p_ep, color.new(color.red, transp=85))
fill(p_tp, p_ep, color.new(color.green, transp=85))