Estratégias de negociação de curto prazo que seguem tendências


Data de criação: 2024-01-04 17:52:21 última modificação: 2024-01-04 17:52:21
cópia: 0 Cliques: 588
1
focar em
1621
Seguidores

Estratégias de negociação de curto prazo que seguem tendências

Visão geral

Esta estratégia baseia-se no indicador de tendências ADX, no índice de tendências médias e na combinação de linhas médias, para permitir o julgamento e o acompanhamento da tendência. Quando o julgamento mostra uma reversão de tendência, a operação de ruptura é usada para negociar em linhas curtas.

Princípio da estratégia

  1. Use o índice de tendência média da ADX para avaliar a tendência. Quando a ADX é maior que 20, indica que está em tendência.
  2. A EMA é um indicador de tendência, o EMA Gold Fork representa uma tendência ascendente, e o EMA Dead Fork representa uma tendência descendente.
  3. VWAP como um preço de referência importante, o preço acima do VWAP é o mercado de muitos cabeças e abaixo é o mercado de cabeças vazias.
  4. De acordo com os vários indicadores acima, julgue a tendência do mercado e a reversão, execute operações de ruptura e siga a tendência para negociar em linha curta.

Análise de vantagens

  1. A combinação de vários indicadores permite avaliar a tendência e ser preciso com as grandes tendências.
  2. O VWAP é um preço de referência importante para evitar a negociação em zonas inválidas.
  3. A ADX decide que a tendência está presente e então opera, reduzindo o número de transações inválidas
  4. A operação de ruptura tem uma alta taxa de sucesso, de acordo com a tendência.

Análise de Riscos

  1. A probabilidade de um fracasso na ruptura levar a um stop loss existe. O risco pode ser reduzido através da otimização da posição de stop loss.
  2. O número de transações é maior e as transações individuais podem ter perdas. Pode-se ajustar adequadamente o número de posições para reduzir a taxa de perda individual.
  3. A escolha do tempo de negociação e do tipo de negociação também afetam o desempenho da estratégia. É possível testar diferentes tempos de negociação e diferentes tipos de negociação.

Direção de otimização

  1. Optimizar os parâmetros do ADX para encontrar melhores tendências de diferenciação e valores de ADX compilados.
  2. Optimizar a combinação de parâmetros da linha média para encontrar uma combinação de linhas médias que melhor represente a tendência.
  3. Optimizar a posição de parada. Abrir adequadamente a faixa de parada para evitar custos de parada excessivos.
  4. Optimizar o tamanho da posição. Reduzir o risco de uma única transação.

Resumir

Esta estratégia utiliza um conjunto de indicadores de linha média, indicadores de julgamento de tendências e preços de referência importantes para julgar com precisão as grandes tendências; e, ao julgar a reversão da tendência, usa operações de ruptura para seguir a tendência e realizar operações de linha curta. Através da otimização de parâmetros, o desempenho da estratégia pode ser melhorado.

Código-fonte da estratégia
/*backtest
start: 2023-12-27 00:00:00
end: 2023-12-29 23:00:00
period: 3m
basePeriod: 1m
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/
// © mariocastel

//@version=5
strategy("Wave Rider", overlay=true, initial_capital = 100000)

session = input(defval = "1400-1500", title = "Session Time")
t = not na(time(timeframe.period,session))
RR = input.float(1.5, "Risk to reward", step=0.5)
var bool movetoBE = input(false, "Move to Break Even")
BE = input.float(1, "Break Even at", step=0.5)

vwap_mult = 0.001 * input(3, "VWAP Multiplier")
aboveVWAP = ta.vwap(close) * (1 + vwap_mult)
belowVWAP = ta.vwap(close) * (1 - vwap_mult)
sym = input("BTC_USDT:swap", "VWAP Source")

QQQaboveVWAP = request.security(sym, "3", aboveVWAP)
QQQbelowVWAP = request.security(sym, "3", belowVWAP)
QQQclose = request.security(sym, "3", close)

ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema60 = ta.ema(close, 60)
ema9 = ta.ema(close, 9)

opentrades = strategy.opentrades > 0

aboveEMA = close > ema60
belowEMA = close < ema60

uptrend = aboveEMA and aboveEMA[1] and aboveEMA[2] and aboveEMA[3] and aboveEMA[4] and aboveEMA[5] and aboveEMA[6] and aboveEMA[7] and aboveEMA[8] and aboveEMA[9] and aboveEMA[10] and aboveEMA[11] and aboveEMA[12] and aboveEMA[13] and aboveEMA[14] and aboveEMA[15] and aboveEMA[16] and aboveEMA[17] and aboveEMA[18] and aboveEMA[19] and aboveEMA[20] and aboveEMA[21] and aboveEMA[22] and aboveEMA[23] and aboveEMA[24] and aboveEMA[25] and aboveEMA[26] and aboveEMA[27] and aboveEMA[28] and aboveEMA[29]
downtrend = belowEMA and belowEMA[1] and belowEMA[2] and belowEMA[3] and belowEMA[4] and belowEMA[5] and belowEMA[6] and belowEMA[7] and belowEMA[8] and belowEMA[9] and belowEMA[10] and belowEMA[11] and belowEMA[12] and belowEMA[13] and belowEMA[14] and belowEMA[15] and belowEMA[16] and belowEMA[17] and belowEMA[18] and belowEMA[19] and belowEMA[20] and belowEMA[21] and belowEMA[22] and belowEMA[23] and belowEMA[24] and belowEMA[25] and belowEMA[26] and belowEMA[27] and belowEMA[28] and belowEMA[29]

buy = (low < ema20 and low > ema50 and close > ema9) and QQQclose > QQQaboveVWAP  or (low[1] < ema20 and low[1] > ema50 and close > ema9) and QQQclose > QQQaboveVWAP and uptrend
sell = (high > ema20 and high < ema50 and close < ema9) and QQQclose < QQQbelowVWAP  or (high[1] > ema20 and high[1] < ema50 and close < ema9) and QQQclose < QQQbelowVWAP and downtrend

var float entry = na
var float sl = na
var float qty = na
var float tp = na
var float be = na

if ema20 > ema50 and ema9 > ema20 
    if buy and not opentrades and t and uptrend
        alert("Wave Rider Setup")
        entry := close
        sl := ema50
        qty := 1000/(close - sl) * 1
        if close - sl > syminfo.mintick*300
            tp := close + ((close - sl)*1)
        else 
            tp := close + ((close - sl)*RR)
        be := close + ((close - sl)*BE)
        strategy.entry("Buy", strategy.long, qty=qty)
        strategy.exit("Close Buy", "Buy",qty=qty, stop=sl, limit=tp)

if ema20 < ema50 and ema9 < ema20 
    if sell and not opentrades and t and downtrend
        alert("Wave Rider Setup")
        entry := close
        sl := ema50
        qty := 1000/(sl - close) * 1
        if sl - close > syminfo.mintick*300
            tp := close - ((sl - close)*1)
        else
            tp := close - ((sl - close)*RR)
        be := close - ((sl - close)*BE)
        strategy.entry("Sell", strategy.short, qty=qty)
        strategy.exit("Close Sell", "Sell", qty=qty, stop=sl, limit=tp)

// Adjust BEs
if movetoBE == true
    if strategy.position_size > 0
        if high >= be
            sl := entry
            strategy.cancel("Close Buy")
            strategy.exit("Close Buy", "Buy", qty=qty, stop=sl, limit=tp)   
    if strategy.position_size < 0
        if low <= be
            sl := entry
            strategy.cancel("Close Sell")  
            strategy.exit("Close Sell", "Sell", qty=qty, stop=sl, limit=tp)  


EoD_time = timestamp(year, month, dayofmonth, 15, 58, 00)
EoD = time == EoD_time
if EoD
    strategy.close_all()

barcolor(color=buy ? color.rgb(191, 255, 131): na)
barcolor(color=sell ? color.rgb(255, 149, 149): na)
ema20plot = plot(ema20, color=color.rgb(168, 131, 131, 55))
ema50plot = plot(ema50, color=color.black)
fill(ema20plot, ema50plot, color=color.rgb(168, 131, 131, 85))
plot(ema9, color=color.red)
plot(ema60, color=color.purple)
plot(QQQaboveVWAP)
plot(QQQbelowVWAP)
plotshape(uptrend, style=shape.triangleup, location=location.belowbar, color=color.black)
plotshape(downtrend, style=shape.triangledown, location=location.abovebar, color=color.black)