A estratégia baseia-se em rupturas de volume de movimentos para gerar sinais de negociação. A ideia principal é observar a movimentação dos preços em um período de tempo especificado para determinar a mudança de tendência dos preços com base nas rupturas de volume de movimentos.
A estratégia é baseada na determinação do movimento dos preços através da contagem dos preços mais altos e mais baixos de um determinado período de tempo, os pivot highs e os pivot lows.
Especificamente, a estratégia calcula o preço mais alto da linha K da raiz N como um alto de pivô e o preço mais baixo da linha K da raiz M como um baixo de pivô. Quando o ponto mais alto da linha K atual supera o alto de pivô, um sinal de quebra é gerado. Quando o ponto mais baixo da linha K atual cai abaixo do baixo de pivô, um sinal de quebra é gerado.
Depois de fazer o over e o short, a estratégia usa o ATR para estabelecer um stop loss e um stop loss por etapas durante o dia. Ao mesmo tempo, a estratégia também elimina todas as posições em um determinado período de tempo (por exemplo, 14:55).
A estratégia simples e eficaz de usar o preço de ruptura em um determinado período de tempo para capturar a tendência, é muito adequado para a negociação de curto prazo dentro do dia. O cálculo é claro e fácil de implementar.
O tempo de entrada pode ser ajustado de acordo com o período de tempo, ou combinado com outros indicadores
Pode-se ajustar os parâmetros adequadamente, ou adicionar condições de filtragem, como indicadores de tendência, volume de transação, etc.
Pode ajustar o tamanho da posição ou prolongar a sua duração de forma apropriada
Parâmetros devem ser ajustados de acordo com diferentes condições do mercado, ou métodos de aprendizado de máquina devem ser otimizados automaticamente
Tente outros dados de preços, como preços típicos, preços médios, etc.
Condições de filtragem, como aumento de volume de transação ou de volatilidade
Tente diferentes combinações de parâmetros
Combinando indicadores de tendência para determinar a direção da tendência
Parâmetros de otimização automática usando métodos de aprendizagem de máquina
Expansão para vários períodos de tempo e mudança de hora de entrada
O conceito geral da estratégia é claro e conciso, capta a tendência de curto prazo através do uso efetivo de rupturas móveis no preço, alcança um maior fator de lucro. Os parâmetros da estratégia são menores, fáceis de testar e otimizar, adequados para operações de linha curta no dia.
/*backtest
start: 2022-10-27 00:00:00
end: 2023-11-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// ____________ _________ _____________
// |____________| ||________| ||__________|
// || || || ||
// || ||________|| ||
// || H E ||________ U L L || H A R T I S T
// || || || ||
// || ||________|| ||__________
// || ||________| ||__________|
//@version=5
// strategy("PIVOT STRATEGY [5MIN TF]",overlay=true ,commission_type = strategy.cash, commission_value = 30 , slippage = 2, default_qty_value = 60, currency = currency.NONE, pyramiding = 0)
leftbars = input(defval = 10)
rightbars = input(defval = 15)
// ═══════════════════════════ //
// ——————————> INPUTS <——————— //
// ═══════════════════════════ //
EMA1 = input.int(title='PRICE CROSS EMA', defval = 150, minval = 10 ,maxval = 400)
factor1 = input.float(title='_ATR LONG',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL LONG")
factor2 = input.float(title='_ATR SHORT',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL SHORT")
risk = input.float(title='RISK',defval = 200 , minval = 1 , maxval = 5000 , step = 50, tooltip = "RISK PER TRADE")
var initialCapital = strategy.equity
t = time(timeframe.period, '0935-1400:1234567')
time_cond = true
// ══════════════════════════════════ //
// ———————————> EMA DATA <——————————— //
// ══════════════════════════════════ //
ema1 = ta.ema(close, EMA1)
plot(ema1, color=color.new(color.yellow, 0), style=plot.style_linebr, title='ema1')
// ══════════════════════════════════ //
// ————————> TRAIL DATA <———————————— //
// ══════════════════════════════════ //
// *******Calculate LONG TRAIL data*****
ATR_LO = ta.atr(14)*factor1
// *******Calculate SHORT TRAIL data*****
ATR_SH = ta.atr(14)*factor2
longStop = close - ATR_LO
shortStop = close + ATR_SH
// Plot atr data
//plot(longStop, color=color.new(color.green, 0), style=plot.style_linebr, title='Long Trailing Stop')
//plot(shortStop , color=color.new(color.red, 0), style=plot.style_linebr, title='Short Trailing Stop')
// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //
// ————————————————————————————————————————————————————————> PIVOT DATA <———————————————————————————————————————————————————————————————————————————————————————————————————— //
// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //
ph = ta.pivothigh(close,leftbars, rightbars)
pl = ta.pivotlow(close,leftbars, rightbars)
pvt_condition1 = not na(ph)
upper_price = 0.0
upper_price := pvt_condition1 ? ph : upper_price[1]
pvt_condition2 = not na(pl)
lower_price = 0.0
lower_price := pvt_condition2 ? pl : lower_price[1]
// Signals
long = ta.crossover(high, upper_price + syminfo.mintick)
short = ta.crossunder(low, lower_price - syminfo.mintick)
plot(upper_price, color= close > ema1 ? color.green : na, style=plot.style_line, title='PH')
plot(lower_price, color= close < ema1 ? color.red : na, style=plot.style_line, title='PL')
// ══════════════════════════════════//
// ————————> LONG POSITIONS <————————//
// ══════════════════════════════════//
//******barinstate.isconfirmed used to avoid repaint in real time*******
if ( long and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close >= ema1 )
strategy.entry(id= "Long" ,direction = strategy.long, comment = "B")
//plot(longStop , color=color.new(color.blue, 0), style=plot.style_linebr, title='long Stop')
if strategy.position_size > 0
strategy.exit("long tsl", "Long" , stop = longStop ,comment='S')
// ═════════════════════════════════════//
// ————————> SHORT POSITIONS <————————— //
// ═════════════════════════════════════//
if ( short and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close <= ema1 )
strategy.entry(id = "Short" ,direction = strategy.short, comment = "S")
if strategy.position_size < 0
strategy.exit("short tsl", "Short" , stop = shortStop ,comment='B')
// ════════════════════════════════════════════════//
// ————————> CLOSE ALL POSITIONS BY 3PM <————————— //
// ════════════════════════════════════════════════//
strategy.close_all(when = hour == 14 and minute == 55)
// ════════════════════════════════════════//
// ————————> MAX INTRADAY LOSS <————————— //
// ════════════════════════════════════════//
// strategy.risk.max_intraday_loss(type = strategy.cash, value = risk)