
Esta estratégia utiliza principalmente o cruzamento do indicador Stoch em áreas de sobrecompra e sobrevenda como sinal de entrada, e, em combinação com o indicador EMA para avaliar a direção da tendência atual, faz uma operação múltipla somente em uma tendência de EMA ascendente contínua, fazendo uma operação de shorting em uma tendência de EMA descendente contínua, e é uma estratégia típica de acompanhamento de tendência.
A estratégia consiste em três partes principais:
Usando dois EMAs diferentes, rápido e lento, quando o EMA está acima do EMA lento, é considerado uma tendência ascendente, e quando o EMA está abaixo do EMA lento, é considerado uma tendência descendente.
O indicador de Stoch é composto por linhas %K e %D, que produzem um sinal de compra quando o ouro se cruza com a linha %D acima da zona de superaquecimento e um sinal de venda quando a linha %K se cruza com a linha %D abaixo da zona de superaquecimento. A estratégia só emite um sinal de negociação quando o cruzamento do indicador de Stoch ocorre na zona de superaquecimento.
A estratégia estabelece simultaneamente um mecanismo de stop loss e de stop-loss. Ao manter várias posições, se o preço for abaixo do stop loss definido, a posição de equilíbrio será interrompida; se o preço for acima do stop stop definido, a posição de equilíbrio será encerrada.
Em geral, a estratégia é uma estratégia de negociação quantitativa mais típica, que usa um conjunto de indicadores para determinar a direção da tendência e os sinais de negociação, além de ser complementada por regras rigorosas de gerenciamento de risco, o que reduz efetivamente o risco de negociação.
A estratégia tem as seguintes vantagens:
A EMA utiliza a tendência dos principais subníveis para evitar que os mercados se envolvam em turbulências desconhecidas.
A característica do indicador Stoch é que ele é capaz de refletir muito bem se está atualmente em uma área de sobrecompra ou sobrevenda, portanto, a geração de sinais cruzados pode ser usada para negociação em uma área de sobrecompra ou sobrevenda.
A estratégia define o ambiente em que o excesso e o excesso podem ocorrer, permitindo que a geração de sinais seja mais filtrada, reduzindo a probabilidade de sinais errados e evitando posições cegas em mercados complexos.
O rigoroso mecanismo de gerenciamento de risco ajuda a controlar as perdas de uma única transação, tanto para controlar a retirada máxima do total, como para deixar espaço suficiente para negociações lucrativas.
A estratégia também traz alguns riscos:
Os indicadores EMA, Stoch e outros apresentam um certo atraso, o que dificulta a estratégia e a oportunidade de aproveitar o momento de uma reversão do mercado.
A mera dependência de indicadores pode levar a uma tomada de posição preconceituosa sobre o mercado, o que pode fazer com que se perca as oportunidades de negociação que o mercado realmente oferece.
O mecanismo de gestão de risco em si também pode ser um limite para a estratégia de ganho de espaço. A configuração de parada de perda e parada de posição em grandes tendências precisa ser especialmente cuidadosa.
A estratégia também apresenta riscos na seleção de parâmetros, pois o impacto de diferentes parâmetros sobre os resultados requer uma grande quantidade de feedback e otimização para obter o melhor conjunto de parâmetros.
A estratégia pode ser melhorada em vários aspectos:
Tente diferentes tipos de EMAs, como a média móvel ponderada, a MA de Hull e outros indicadores para avaliar tendências e fazer análises comparativas.
Tente combinar outros indicadores para gerar sinais de negociação, como MACD, KDJ, etc., construindo um sistema de negociação de vários indicadores.
Optimizar as configurações de stop loss e stop-loss para que sejam mais adaptadas às situações reais de flutuação do mercado. Pode-se definir um stop loss mais flexível e um stop stop mais rigoroso.
Teste a variabilidade de desempenho da estratégia em diferentes variedades e períodos, procurando a melhor combinação de variedades e períodos.
Considere a inclusão de modelos de aprendizado de máquina ou de redes neurais para auxiliar na determinação da direção da tendência e dos sinais de negociação, para a inteligência da estratégia.
Em geral, a estratégia usa indicadores comuns para combinar e construir um conjunto de estratégias de negociação de tendências mais maduras. Ela considera tanto o julgamento de tendências quanto a geração de sinais de negociação específicos, além de estabelecer mecanismos de gerenciamento de risco.
/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
//by Wugamlo
//Strategy combining Stochastic Crosses in the Overbought/Oversold Area with a trend determined by two EMAs
//Default setup seems to work best on 4HR timeframe for BTC
strategy(title = "Strategy Stoch/EMA Cross", shorttitle = "Strategy Stoch/EMA Cross", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD, commission_value=0.01,commission_type=strategy.commission.percent, initial_capital=1000)
// === GENERAL INPUTS ===
SectionInd = input(defval = true ,title = "════════════ INDICATORS ════════════")
maFastLength = input(defval = 55, title = "Fast MA Period", minval = 1)
maSlowLength = input(defval = 89, title = "Slow MA Period", minval = 1)
StochLength = input(defval = 14, title = "Stochastic Length", minval=1)
smoothK = input(defval = 6, title = "%K Smooth", minval=1)
smoothD = input(defval = 3, title = "%D Smooth", minval=1)
overbought = 80
oversold = 20
HighlightOBOS = input(defval = true, title = "Highlight Stoch Cross?")
HighlightTrend = input(defval = true, title = "Highlight Trend?")
//DATE AND TIME
SectionFrom = input(defval = true ,title = "═══════════════ FROM ═══════════════")
fromDay = input(defval = 01, title = "From day", minval=1)
fromMonth = input(defval = 1, title = "From month", minval=1)
fromYear = input(defval = 2019, title = "From year", minval=2014)
SectionTo = input(defval = true, title = "════════════════ TO ════════════════")
toDay = input(defval = 31, title = "To day", minval=1)
toMonth = input(defval = 12, title = "To month", minval=1)
toYear = input(defval = 2020, title = "To year", minval=2014)
// === STRATEGY RELATED INPUTS ===
SectionStra = input(defval = true ,title = "═════════════ STRATEGY ═════════════")
// Include Shorts or only trade Long Positions?
includeShorts = input(defval = true, title = "Include Short Positions?")
// Risk Management inputs
useTakeProfit = input(defval = true, title = "User Take Profit?")
inpTakeProfit = input(defval = 8, title = "Take Profit (%)", minval = 0)
useStopLoss = input(defval = false, title = "User Stop Loss?")
inpStopLoss = input(defval = 2, title = "Stop Loss (%)", minval = 0)
StopLossPerc = inpStopLoss * 0.01
TakeProfitPerc = inpTakeProfit * 0.01
// === EMA SERIES SETUP ===
maFast = ema(close, maFastLength)
maSlow = ema(close, maSlowLength)
diff = maFast - maSlow
// === STOCHASTIC SETUP ===
k = sma(stoch(close, high, low, StochLength), smoothK)
d = sma(k, smoothD)
// Stochastic Long/Short Entry determination
stochLong = crossover(k,d) and (k < oversold)
stochShort = crossunder(k,d) and (k > overbought)
// Stochastic Long/Short Exit determination
stochLongEx = crossover (k, overbought)
stochShortEx = crossunder(k, oversold)
// === PLOTTING EMAs ===
fast = plot(maFast, title = "Fast MA", color = yellow, linewidth = 1, style = line, transp = 10)
slow = plot(maSlow, title = "Slow MA", color = white, linewidth = 1, style = line, transp = 10)
// === Vertical Coloring for Crosses in Overbought/Oversold zone and for MA Trend Zones ===
b_color = stochLong ? green : stochShort ? red : na
bgcolor(HighlightOBOS ? b_color : na, title="Overbought / Oversold", transp=65) //Highlight the Overbought/Oversold Stoch Crossings
t_color = diff>=0 ? green : diff<0 ? red : na
bgcolor(HighlightTrend ? t_color : na, title="Trend up / Trend down", transp=75) //Highlight the EMA Trend
// === STRATEGY LOGIC ===
// Time Restriction
timeInRange = true
// === STRATEGY - LONG POSITION EXECUTION ===
if stochLong and (diff >=0) and timeInRange //Open Long when Stoch crossing in Oversold area and EMATrend is up
strategy.entry(id = "Long", long = true)
if stochLong and (diff <0) and timeInRange //Close Long when another Long Stoch cross signal is given after Trend has changed to down (avoid fake signals)
strategy.close(id = "Long")
if stochLongEx and timeInRange //Close Long when Stoch is getting Overbought
strategy.close(id = "Long")
// === STRATEGY - SHORT POSITION EXECUTION ===
if stochShort and (diff <0) and timeInRange and includeShorts //Open Short when Stoch crossing in Overbought area and EMA Trend is down
strategy.entry(id = "Short", long = false)
if stochShort and (diff >=0) and timeInRange //Close Short when another Short Stoch cross signal is given after Trend has changed to up (avoid fake signals)
strategy.close(id = "Short")
if stochShortEx and timeInRange //Close Short when Stoch is getting Oversold
strategy.close(id = "Short")
// === STRATEGY RISK MANAGEMENT EXECUTION ===
//Stop Loss
if useStopLoss //Exit when Stop Loss is hit
strategy.exit("Exit Long SL", from_entry = "Long", loss = close * StopLossPerc / syminfo.mintick )
strategy.exit("Exit Short SL", from_entry = "Short", loss = close * StopLossPerc / syminfo.mintick )
//Take Profit
if useTakeProfit //Exit when Take Profit Limit is hit
strategy.exit("Exit Long TP", from_entry = "Long", profit = close * TakeProfitPerc / syminfo.mintick)
strategy.exit("Exit Short TP", from_entry = "Short", profit = close * TakeProfitPerc / syminfo.mintick)