Estratégia de movimentação de volume ao longo de períodos de tempo


Data de criação: 2023-11-03 16:35:15 última modificação: 2023-11-03 16:35:15
cópia: 0 Cliques: 361
1
focar em
1166
Seguidores

Estratégia de movimentação de volume ao longo de períodos de tempo

Visão geral

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.

Princípio da estratégia

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.

Vantagens estratégicas

  • A utilização de uma brecha na quantidade de movimentos de preços para capturar mudanças de tendência, sinal mais confiável
  • A solução é simples, com apenas dados básicos de linha K.
  • Paradas razoáveis, paradas por etapas no dia, controlo eficaz do risco
  • Adequado para rotas curtas durante o dia, para evitar perigos de pernoite
  • Menos parâmetros, mais fácil de otimizar

Riscos estratégicos e soluções

  • Há um certo atraso e pode ter perdido a oportunidade de começar a tendência

O tempo de entrada pode ser ajustado de acordo com o período de tempo, ou combinado com outros indicadores

  • Quando as tendências não são claras, há mais falsos sinais

Pode-se ajustar os parâmetros adequadamente, ou adicionar condições de filtragem, como indicadores de tendência, volume de transação, etc.

  • A transação de uma linha curta durante o dia requer um custo de capital mais elevado

Pode ajustar o tamanho da posição ou prolongar a sua duração de forma apropriada

  • Dependendo dos parâmetros de otimização, a eficácia pode variar de acordo com a situação do mercado.

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

Direção de otimização da estratégia

  • 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

Resumir

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.

Código-fonte da estratégia
/*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)