
Esta estratégia combina o uso de médias móveis, indicadores de volume de transação e indicadores de movimento de preços para criar um conjunto de regras de quantificação para identificar o momento em que as ações entram na fase de acumulação. Nessa fase, as ações geralmente estão em um estado de equilíbrio e acúmulo de preços, oferecendo uma boa oportunidade de entrada de preços mais baixos.
A estratégia usa as médias móveis simples de 50, 90 e 200 dias para determinar a tendência dos preços. Um sinal de compra só é gerado quando o preço está acima da linha de 200 dias. Isso pode filtrar a incerteza da queda da grande tendência.
Além de determinar a tendência principal, a estratégia também determina a sequência de médias de curto prazo para confirmar a tendência. Concretamente, é julgar que a linha de 50 dias é maior do que a linha de 90 dias.
A estratégia combina o indicador de volume de transação PVT e o indicador de volume de transação MACD para julgar a característica cumulativa com base na confirmação de grandes tendências e tendências de curto prazo na média móvel. Um sinal de compra é gerado somente quando o PVT se rompe para cima, a linha MACD está acima da linha de sinal e o volume de transação é amplificado.
Em vez de usar apenas a média móvel, esta estratégia, ao mesmo tempo em que confirma a tendência, também examina as características do volume de transações. Isso permite determinar com mais precisão o momento em que as ações entram na fase de acumulação, garantindo a vantagem de preço da entrada.
Através da análise de múltiplos prazos, esta estratégia combina o julgamento de tendências de médio e longo prazo com o julgamento de características de curto prazo, e a correspondência de prazos permite reduzir a incerteza causada por erros de julgamento de um único prazo.
Esta estratégia baseia-se principalmente no julgamento da linha de equilíbrio, que é invalidado quando os preços são fortemente flutuantes. Neste caso, o tamanho da posição deve ser reduzido ou a saída deve ser interrompida diretamente.
Além disso, o julgamento na fase de acumulação pode ser errado, perdendo a oportunidade de reverter. Isso precisa ser confirmado por observação de mais indicadores de características.
Esta estratégia pode introduzir algoritmos de aprendizagem de máquina para realizar julgamentos automáticos de fases de acumulação por meio de extração de características e treinamento de modelos. Isso pode reduzir as limitações causadas por um limite de configuração manual.
Além disso, a estratégia também pode experimentar a função breakpoint, que permite alternar automaticamente entre diferentes parâmetros em diferentes cenários de mercado, o que torna a estratégia mais robusta.
Esta estratégia, em geral, usa uma abordagem que combina preços e volume de transação para determinar a característica da acumulação de ações. Ao mesmo tempo em que confirma a direção geral, explora oportunidades de acumulação de curto prazo.
/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 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/
// © stocktechbot
//@version=5
strategy("Accumulate", overlay = true)
lookback = input(defval = 21, title = 'Lookback')
offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)
//SMA Tredline
out = ta.sma(close, 200)
outf = ta.sma(close, 50)
outn = ta.sma(close, 90)
outt = ta.sma(close, 21)
//sma plot
plot(out, color=color.blue, title="MA200", offset=offset)
plot(outf, color=color.maroon, title="MA50", offset=offset)
plot(outn, color=color.orange, title="MA90", offset=offset)
plot(outt, color=color.olive, title="MA21", offset=offset)
//MarketCap Calculation
//MarketCap = 0.0
//TSO = request.financial(syminfo.tickerid, "TOTAL_SHARES_OUTSTANDING", "FQ", ignore_invalid_symbol = true)
//if str.tostring(TSO) != 'na'
// if ta.barssince(TSO != TSO[1] and TSO > TSO[1])==0
// MarketCap := TSO * close
//
// if barstate.islast and MarketCap == 0
// runtime.error("No MarketCap is provided by the data vendor.")
//
//momlen = 100
//msrc = MarketCap
//mom = msrc - msrc[momlen]
//plotmom = if (mom > mom[1])
// true
//else
// false
//OBV with sma on macd
obv = ta.cum(math.sign(ta.change(close)) * volume)
smoothingLength = 5
smoothingLine = ta.sma(obv,5)
[macdLine, signalLine, histLine] = ta.macd(ta.pvt, 12, 26, 9)
sellvolhigh = macdLine < signalLine
buyvolhigh = macdLine > signalLine
//Buy Signal
mafentry =ta.sma(close, 50) > ta.sma(close, 90)
//matentry = ta.sma(close, 21) > ta.sma(close, 50)
matwohun = close > ta.sma(close, 200)
higheshigh = ta.rising(high, 2)
higheslow = ta.rising(low, 2 )
twohunraise = ta.rising(out, 2)
//highvol = ta.crossover(volume, ta.sma(volume, lookback))
highvol = ta.rising(volume,2)
fourlow = ta.lowest(close, lookback)
fourhig = ta.highest(close, lookback)
change = (((fourhig - fourlow) / fourlow) * 100) <= 30
green = close > open
allup = false
lineabove = ta.cross(close, ta.sma(close, input(defval = 21, title = 'Entry Line')))
if matwohun and mafentry and higheshigh and twohunraise and buyvolhigh
//if higheshigh and higheslow and highvol
allup := true
plotshape(allup, style=shape.arrowup,location=location.belowbar, color=color.green, title = "Buy Signal")
barsSinceLastEntry() =>
strategy.opentrades > 0 ? bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1) : na
//Sell Signal
mafexit =ta.sma(close, 50) < ta.sma(close, 90)
matexit = ta.sma(close, 21) < ta.sma(close, 50)
matwohund = close < ta.sma(close, 200)
linebreak = ta.sma(close, input(defval = 21, title = 'Exit Line')) > close
lowesthigh = ta.falling(high, 3)
lowestlow = ta.falling(low, 2 )
twohunfall = ta.falling(out, 3)
twentyfall = ta.falling(outt, 2)
highvole = ta.crossover(volume, ta.sma(volume, 5))
//fourlow = ta.lowest(close, lookback)
//fourhig = ta.highest(close, lookback)
changed = (((fourhig - close) / close) * 100) >= 10
red = close < open
atr = ta.atr(14)
//atrsmalen = int(bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1) )
atrsmalen = barsSinceLastEntry()
atrsma = false
atrlen = 5
if str.tostring(atrsmalen) != 'NaN' and atrsmalen > 0
atrlen := atrsmalen
atrsma := atr > ta.sma(atr,50)
alldwn = false
if sellvolhigh and lowestlow and (close < close[1] and close < open)
//if higheshigh and higheslow and highvol
alldwn := true
plotshape(alldwn, style=shape.arrowdown,location=location.abovebar, color=color.red, title = "Sell Signal")
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if (allup)
strategy.entry("My Long Entry Id", strategy.long)
shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
if (alldwn)
strategy.entry("My Short Entry Id", strategy.short)