Esta estratégia combina os indicadores Parabolic SAR, MACD e RSI para implementar negociações longas e curtas automatizadas em vários prazos.
O indicador PSAR é usado para determinar a direção dos preços e os pontos de reversão da tendência.
O indicador MACD julga a dinâmica dos preços. A linha MACD cruzando acima da linha SIGNAL para cima é um sinal de alta, enquanto cruzar para baixo é um sinal de baixa.
O indicador RSI avalia as condições de sobrecompra e sobrevenda.
Combinar sinais dos três indicadores acima para formar uma decisão final longa/curta.
Utilize o indicador Chop Index para filtrar mercados em consolidação para evitar problemas.
Utilize o dimensionamento de posições de pirâmide inversa para gerir dinamicamente os objetivos de risco e lucro.
A combinação de múltiplos indicadores que avaliam tendência, impulso e osciladores melhora a precisão.
Adaptado às condições do mercado, filtrando os mercados de consolidação para evitar ser pego em armadilhas.
Gerenciamento dinâmico de riscos e lucros através do dimensionamento de posições de pirâmide inversa com paradas e limites adaptativos.
Muito personalizável com parâmetros ajustáveis para diferentes produtos e ambientes de mercado.
Suporte a múltiplos prazos, flexíveis para negociações de posições intradiárias de curto prazo ou de médio/longo prazo.
As decisões longas/cortas dependem de configurações de parâmetros que podem causar erros se impróprias.
Possibilidade de sinais falsos que levem a decisões contrárias à tendência.
As configurações inadequadas de stop loss e take profit podem aumentar as perdas ou reduzir os lucros.
Requer monitorização frequente e ajustes dos parâmetros, resultando em elevados custos de intervenção humana.
Adicionar um módulo de validação do modelo para avaliar as definições dos parâmetros e a eficácia do sinal.
Aumentar o módulo de aprendizagem de máquina para a otimização automática de parâmetros e modelos.
Ingerir mais fontes de dados para enriquecer o espaço de recursos e melhorar as decisões.
Desenvolver sistemas automatizados de monitorização e manutenção para reduzir a intervenção humana.
Adicionar avaliações de backtesting e simulação para validar o desempenho da estratégia.
Esta estratégia realiza negociação quantitativa automatizada, combinando múltiplos indicadores técnicos sistema baseado em regras. Com grande espaço de otimização e flexibilidade, é adequado para ajuste de parâmetros, expansão de recursos e aprimoramentos de aprendizado de máquina para melhor servir a negociação ao vivo.
/*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 **********