Estratégia de negociação quantitativa multi-time frame baseada em PSAR, MACD e RSI


Data de criação: 2023-12-27 16:12:57 última modificação: 2023-12-27 16:12:57
cópia: 0 Cliques: 657
1
focar em
1623
Seguidores

Estratégia de negociação quantitativa multi-time frame baseada em PSAR, MACD e RSI

Visão geral

Esta estratégia permite a negociação multihead automática em vários prazos de tempo, combinando três indicadores: o Parabolic SAR, MACD e RSI. A estratégia é aplicada principalmente para negociação intradiária de ações e variedades de mercadorias.

Princípio da estratégia

  1. O indicador PSAR é usado para determinar a direção dos preços e os pontos de reversão da tendência.

  2. O indicador MACD determina a movimentação dos preços. A linha MACD e a linha SIGNAL se rompem para cima como um sinal múltiplo e para baixo como um sinal de cabeça vazia.

  3. O indicador RSI determina o fenômeno de sobrecompra e sobrevenda. Quando o RSI está acima da depressão, é um sinal de cabeça alta, e quando está abaixo da depressão, é um sinal de cabeça baixa.

  4. A combinação dos três indicadores acima, formou a decisão final.

  5. Adapte-se a usar o indicador Chop Index para filtrar o mercado consolidado e evitar as whipsaws.

  6. A pirâmide inversa de ações permite a gestão dinâmica dos riscos e dos lucros através da definição de um ponto de parada e de um ponto de perda.

Vantagens estratégicas

  1. Uma combinação de indicadores, tendências, impulsos e características de sobrecompra e sobrevenda, para melhorar a precisão da tomada de decisão.

  2. Adapte-se às características do mercado, filtrando os mercados em consolidação através do indicador Chop Index, evitando ser encaixado.

  3. Gerenciamento dinâmico de risco e lucro, através do princípio da pirâmide inversa de acréscimo de risco, para a realização de stop loss ativo.

  4. Os parâmetros podem ser personalizados e otimizados, sendo fácil de ajustar para diferentes variedades e ambientes de mercado.

  5. Suporte para múltiplos períodos de tempo, com flexibilidade para transações diárias de linha curta e média.

Análise de Riscos

  1. A decisão de multi-cabeça depende da configuração de parâmetros, e a configuração inadequada pode levar a erros.

  2. A probabilidade de um indicador emitir um sinal errado, que pode levar a uma decisão contrária à tendência.

  3. O Stop Loss Stop é mal configurado e pode aumentar os prejuízos ou reduzir os lucros.

  4. Os parâmetros necessitam de ser monitorados e ajustados com frequência, e o custo da intervenção humana é elevado.

Direção de otimização

  1. Adicionar módulos de verificação de modelos, para avaliar a configuração de parâmetros e a eficácia do sinal.

  2. Adição de módulos de machine learning para otimização automática de parâmetros e modelos.

  3. Acesso a mais fontes de dados, maior espaço de recursos e melhoria da eficácia da tomada de decisões.

  4. Desenvolvimento de sistemas automatizados de monitoramento e manutenção, reduzindo os custos de intervenção humana.

  5. Aumentar a avaliação de retrospectiva e simulação e a eficácia das estratégias de verificação.

Resumir

Esta estratégia permite a automação de negociação quantitativa baseada em regras através da combinação de vários indicadores técnicos. A estratégia tem um espaço de otimização maior, é escalável e adequada para otimização de ajustes de parâmetros, extensão de funções e aprendizagem de máquina, o que melhor atende às negociações em disco.

Código-fonte da estratégia
/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 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/
// © vikris

//@version=4
strategy("[VJ]Phoenix Force of PSAR +MACD +RSI", overlay=true, calc_on_every_tick = false,pyramiding=0)

// ********** Strategy inputs - Start **********

// Used for intraday handling
// Session value should be from market start to the time you want to square-off 
// your intraday strategy
// Important: The end time should be at least 2 minutes before the intraday
// square-off time set by your broker
var i_marketSession = input(title="Market session", type=input.session, 
     defval="0915-1455", confirm=true)

// Make inputs that set the take profit % (optional)
longProfitPerc = input(title="Long Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=3) * 0.01

shortProfitPerc = input(title="Short Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=3) * 0.01
     
// Set stop loss level with input options (optional)
longLossPerc = input(title="Long Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=3) * 0.01

shortLossPerc = input(title="Short Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=3) * 0.01    


// ********** Strategy inputs - End **********


// ********** Supporting functions - Start **********

// A function to check whether the bar or period is in intraday session
barInSession(sess) => time(timeframe.period, sess) != 0



// Figure out take profit price
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


// ********** Supporting functions - End **********


// ********** Strategy - Start **********
// See if intraday session is active
bool intradaySession = barInSession(i_marketSession)

// Trade only if intraday session is active

//=================Strategy logic goes in here===========================
 
psar = sar(0.02,0.02,0.2)
c1a = close > psar
c1v = close < psar

malen = input(50, title="MA Length")
mm200 = sma(close, malen)
c2a = close > mm200
c2v = close < mm200

fast = input(12, title="MACD Fast EMA Length")
slow = input(26, title="MACD Slow EMA Length")
[macd,signal,hist] = macd(close, fast,slow, 9)
c3a = macd >= 0
c3v = macd <= 0

rsilen = input(7, title="RSI Length")
th = input(50, title="RSI Threshold")
rsi14 = rsi(close, rsilen)
c4a = rsi14 >= th
c4v = rsi14 <= th

chopi = input(7, title="Chop Index lenght")
ci = 100 * log10(sum(atr(1), chopi) / (highest(chopi) - lowest(chopi))) / log10(chopi)

buy = c1a and c2a and c3a and c4a ? 1 : 0
sell = c1v and c2v and c3v and c4v ? -1 : 0


//Final Long/Short Condition
longCondition = buy==1 and ci <50
shortCondition = sell==-1 and ci <50 
 
//Long Strategy - buy condition and exits with Take profit and SL
if (longCondition and intradaySession)
    stop_level = longStopPrice
    profit_level = longExitPrice
    strategy.entry("My Long Entry Id", strategy.long)
    strategy.exit("TP/SL", "My Long Entry Id", stop=stop_level, limit=profit_level)


//Short Strategy - sell condition and exits with Take profit and SL
if (shortCondition and intradaySession)
    stop_level = shortStopPrice
    profit_level = shortExitPrice
    strategy.entry("My Short Entry Id", strategy.short)
    strategy.exit("TP/SL", "My Short Entry Id", stop=stop_level, limit=profit_level)
 
 
// Square-off position (when session is over and position is open)
squareOff = (not intradaySession) and (strategy.position_size != 0)
strategy.close_all(when = squareOff, comment = "Square-off")

// ********** Strategy - End **********