
Esta estratégia baseia-se em sinais de desvio oculto da linha média EMA e do indicador RSI para abrir posições de múltiplos cabeçalhos, identificando os pontos característicos de formação de desvio oculto de múltiplos cabeçalhos e julgando o início da atual tendência ascendente como sinal de abertura de posição. Ao mesmo tempo, o cruzamento de ouro com a linha média EMA e o preço de encerramento da linha K acima da linha média EMA garantem uma tendência ascendente.
EMA estratégia de linha média: usar o 50 ciclo e 250 ciclo EMA linha média para o ouro de julgamento de tendência cruzada, o preço é considerado um sinal múltiplo quando atravessado 50 EMA.
A estratégia de desvio oculto do RSI: O indicador RSI apresenta um baixo e um baixo, enquanto o preço apresenta um sinal de desvio oculto de mais de um ponto alto, indicando o início da reversão. Com o número limitado de pontos de desvio, os falsos sinais podem ser filtrados.
A estratégia de fechamento da linha K é abrir mais posições quando o preço de fechamento da linha K for superior a 50 EMA.
A análise das três estratégias acima mostra que a tendência começou a subir, abrindo posições em mais de uma posição.
Usando a linha média EMA para determinar a direção da tendência, em combinação com o sinal de inversão do indicador RSI, pode-se abrir posições no início da tendência.
O mecanismo de dupla confirmação, que usa a combinação de EMA, RSI e K para avaliar os preços de fechamento, é eficaz para filtrar falsos sinais.
A seguir a tendência de linha média e longa, é apropriado para julgar o início de uma nova tendência ascendente após a liquidação.
Quando a EMA produz uma forca morta, é necessário um equilíbrio oportuno.
O RSI oculta o desvio de um sinal de discernimento requer uma certa experiência, e a configuração inadequada dos parâmetros pode perder um sinal ou um erro de discernimento.
Parâmetros para variedades de transação precisam de ajustes de otimização.
Ajuste dinâmico dos parâmetros da linha média da EMA para otimizar a precisão do julgamento de tendências.
Ajustar os parâmetros do RSI para otimizar a precisão do julgamento de desvios ocultos.
Adotar um mecanismo de stop loss para controlar o risco usando stop loss ATR ou stop loss percentual.
Desenvolver estratégias de negociação em branco que permitam abrir posições em branco em uma tendência de queda.
Esta estratégia utiliza a linha média EMA para determinar a tendência, em conjunto com o indicador RSI para aumentar a precisão de julgamento, após a conclusão da liquidação para julgar a nova tendência ascendente, é uma estratégia de acompanhamento de tendência mais conservadora. Através de configuração de parâmetros de otimização e adição de meios de parada, pode obter melhores resultados. Comparado com a estratégia de média móvel simples, a precisão de julgamento de tendências ascendentes é maior, a probabilidade de vitória é maior e é uma estratégia prática.
/*backtest
start: 2024-01-25 00:00:00
end: 2024-02-01 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="EMA RSI ATR Hidden Div Strat", shorttitle="Hidden Div Strat", overlay = true, pyramiding = 0, max_bars_back=3000, calc_on_order_fills = false, commission_type = strategy.commission.percent, commission_value = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, initial_capital=5000, currency=currency.USD)
// Time Range
FromMonth=input(defval=1,title="FromMonth",minval=1,maxval=12)
FromDay=input(defval=1,title="FromDay",minval=1,maxval=31)
FromYear=input(defval=2020,title="FromYear",minval=2016)
ToMonth=input(defval=1,title="ToMonth",minval=1,maxval=12)
ToDay=input(defval=1,title="ToDay",minval=1,maxval=31)
ToYear=input(defval=9999,title="ToYear",minval=2017)
start=timestamp(FromYear,FromMonth,FromDay,00,00)
finish=timestamp(ToYear,ToMonth,ToDay,23,59)
window()=>true
// Bar's time happened on/after start date?
afterStartDate = time >= start and time<=finish?true:false
//EMA'S
emasrc = close
len1 = input(50, minval=1, title="EMA1")
ema1 = ema(emasrc, len1)
col1 = color.white
len2 = input(250, minval=1, title="EMA2")
ema2 = ema(emasrc, len2)
col2 = color.yellow
//Plots
plot(ema1, title="EMA1", linewidth=1, color=col1)
plot(ema2, title="EMA2", linewidth=1, color=col2)
//Stoch
periodK = input(4, title="K", minval=1)
periodD = input(4, title="D", minval=1)
smoothK = input(3, title="Smooth", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)
//Hidden Divergence Indikator
len = input(title="RSI Period", minval=1, defval=14)
src = input(title="RSI Source", defval=close)
lbR = input(title="Pivot Lookback Right", defval=1)
lbL = input(title="Pivot Lookback Left", defval=19)
rangeUpper = input(title="Max of Lookback Range", defval=20)
rangeLower = input(title="Min of Lookback Range", defval=4)
hiddenBullColor = color.new(color.green, 80)
textColor = color.white
noneColor = color.new(color.white, 100)
osc = rsi(src, len)
plFound = na(pivotlow(osc, lbL, lbR)) ? false : true
phFound = na(pivothigh(osc, lbL, lbR)) ? false : true
_inRange(cond) =>
bars = barssince(cond == true)
rangeLower <= bars and bars <= rangeUpper
//------------------------------------------------------------------------------
// Hidden Bullish
// Osc: Lower Low
oscLL = osc[lbR] < valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])
// Price: Higher Low
priceHL = low[lbR] > valuewhen(plFound, low[lbR], 1)
hiddenBullCond = priceHL and oscLL and plFound
//buy Conditions
buyhiddenbull = hiddenBullCond[1] or hiddenBullCond[2] or hiddenBullCond[3] or hiddenBullCond[4] or hiddenBullCond[5] or hiddenBullCond[6] or hiddenBullCond[7] or hiddenBullCond[8] or hiddenBullCond[9] or hiddenBullCond[10]
emacondition = ema1 > ema2
upcondition = close[1] > ema1[1] and ema2[1] and close[2] > ema1[2] and ema2[2] and close[3] > ema1[3] and ema2[3]
crossup = k[0] >= d[0] and k[1] <= d[1]
longcondition = emacondition and upcondition and crossup and buyhiddenbull
if (afterStartDate)
strategy.entry("Long", strategy.long, when = longcondition)
//TakeProfit, StopLoss lowest low
profitfactor = input(title="Profitfactor", type=input.float, step=0.1, defval=1.6)
loLen = input(title="Lowest Low Lookback", type=input.integer,
defval=38, minval=2)
stop_level = lowest(low, loLen)[1]
bought = strategy.position_size[1] < strategy.position_size
barsbought = barssince(bought)
if strategy.position_size>0
profit_level = strategy.position_avg_price + ((strategy.position_avg_price - stop_level[barsbought])*profitfactor)
strategy.exit(id="TP/ SL", stop=stop_level[barsbought], limit=profit_level)