
A ideia central desta estratégia é combinar o indicador de tendência super e o indicador de tendência média ((ADX), para permitir o julgamento e o acompanhamento da tendência. O indicador de tendência super é usado para identificar a direção da tendência de preços atual, o ADX é usado para determinar a força da tendência e só é negociado sob uma tendência forte. Além disso, a estratégia também usa a cor da entidade de linha K, o indicador de volume de transação, etc. para confirmar, formando uma regra de negociação mais completa.
Em geral, a estratégia é uma estratégia de rastreamento de tendências, que visa capturar tendências claras de linha média e longa, evitando a interferência de correlações e oscilações.
O indicador de supertrend é usado para determinar a direção da tendência dos preços. Quando o preço está em supertrend, é um sinal de múltiplos e quando está em supertrend, é um sinal de cabeça vazia.
Usar o ADX para determinar a força da tendência. O sinal de negociação é gerado somente quando o ADX é maior do que o limiar definido, o que permite filtrar os períodos de equilíbrio obscuro.
A linha K determina a cor da entidade atual como um padrão ascendente ou descendente, combinado com um indicador de tendência super, formando uma confirmação.
O aumento do volume de transações é um sinal de confirmação. A posição é criada apenas quando o volume de transações aumenta.
Estabeleça um limite de perda e um limite de parada para bloquear o lucro e controlar o risco
Elimine todas as posições antes do tempo de espera no disco definido.
Seguir uma tendência clara, evitar oscilações e obter uma taxa de ganho mais alta.
Os parâmetros da estratégia são menores e mais fáceis de entender e implementar.
Controle de risco em ação, configuração de stop loss e stop loss.
A utilização de vários indicadores de confirmação pode reduzir os sinais falsos.
A correção de profundidade do banco central pode levar a grandes perdas.
A mudança de desempenho de uma ação pode causar uma reversão drástica.
O evento Black Swan, que marcou uma grande mudança de política.
A solução para o risco:
Ajustar adequadamente os parâmetros do ADX para garantir que só seja negociado em tendências fortes.
Aumentar o nível de stop loss e controlar as perdas individuais.
Acompanhar de perto a política e os eventos importantes, e, se necessário, tomar a iniciativa de parar os danos.
É possível testar diferentes combinações de parâmetros de super-tendência, escolhendo os parâmetros que produzem um sinal mais estável.
Os diferentes parâmetros do ADX podem ser testados para determinar a melhor combinação de parâmetros.
Pode-se adicionar outros indicadores de confirmação, como a taxa de flutuação, a faixa de Bryn, etc., para reduzir ainda mais os falsos sinais.
Pode ser combinado com estratégias como breakouts, para parar a perda quando a tendência se rompe.
Esta estratégia tem uma visão geral clara, julga a direção da tendência de preços com a tendência super, julga a força da tendência com o ADX, faz o acompanhamento da tendência em uma tendência forte. Ao mesmo tempo, configura um stop loss para controlar o risco. Os parâmetros da estratégia são menos e são fáceis de otimizar.
/*backtest
start: 2023-02-15 00:00:00
end: 2024-02-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Intraday Strategy Template
// 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]Hulk Smash Intra", overlay=true, calc_on_every_tick = false, pyramiding=0,default_qty_type=strategy.percent_of_equity, default_qty_value=100,initial_capital=2000)
// ********** 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=1) * 0.01
shortProfitPerc = input(title="Short Take Profit (%)",
type=input.float, minval=0.0, step=0.1, defval=1) * 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=0.5) * 0.01
shortLossPerc = input(title="Short Stop Loss (%)",
type=input.float, minval=0.0, step=0.1, defval=0.5) * 0.01
var float i_multiplier = input(title = "ST Multiplier", type = input.float,
defval = 2, step = 0.1, confirm=true)
var int i_atrPeriod = input(title = "ST ATR Period", type = input.integer,
defval = 10, confirm=true)
len = input(title="ADX Length", type=input.integer, defval=14)
th = input(title="ADX Threshold", type=input.integer, defval=20)
adxval = input(title="ADX Momemtum Value", type=input.integer, defval=25)
// ********** 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
// ********** Supporting functions - End **********
// ********** Strategy - Start **********
[superTrend, dir] = supertrend(i_multiplier, i_atrPeriod)
colResistance = dir == 1 and dir == dir[1] ? color.new(color.red, 0) : color.new(color.red, 100)
colSupport = dir == -1 and dir == dir[1] ? color.new(color.green, 0) : color.new(color.green, 100)
// Super Trend Long/short condition
stlong = close > superTrend
stshort = close < superTrend
// 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)
//Vol Confirmation
vol = volume > volume[1]
//Candles colors
greenCandle = (close > open)
redCandle = (close < open)
// See if intraday session is active
bool intradaySession = barInSession(i_marketSession)
// Trade only if intraday session is active
TrueRange = max(max(high - low, abs(high - nz(close[1]))), abs(low - nz(close[1])))
DirectionalMovementPlus = high - nz(high[1]) > nz(low[1]) - low ? max(high - nz(high[1]), 0) : 0
DirectionalMovementMinus = nz(low[1]) - low > high - nz(high[1]) ? max(nz(low[1]) - low, 0) : 0
SmoothedTrueRange = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - nz(SmoothedTrueRange[1]) / len + TrueRange
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) -
nz(SmoothedDirectionalMovementPlus[1]) / len + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = 0.0
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) -
nz(SmoothedDirectionalMovementMinus[1]) / len + DirectionalMovementMinus
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus - DIMinus) / (DIPlus + DIMinus) * 100
ADX = sma(DX, len)
// a = plot(DIPlus, color=color.green, title="DI+", transp=100)
// b = plot(DIMinus, color=color.red, title="DI-", transp=100)
//Final Long/Short Condition
longCondition = stlong and redCandle and vol and ADX>adxval
shortCondition = stshort and greenCandle and vol and ADX >adxval
//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 **********