
Эта стратегия использует в сочетании с использованием движущихся средних, показателей объема торговли и показателей динамики цен, чтобы разработать набор количественных правил, используемых для определения времени, когда акции входят в стадию накопления. На этом этапе акции обычно находятся в состоянии свертывания цены и накопления, что дает хорошие шансы на более низкую цену.
Стратегия использует 50-дневную, 90-дневную и 200-дневную простые движущиеся средние для определения ценовых тенденций. Только когда цена выше 200-дневной линии, создается сигнал покупки. Это может отфильтровать неопределенность падения большой тенденции.
В дополнение к определению основных тенденций, стратегия также определяет последовательность краткосрочных средних линий для подтверждения тенденции. В частности, определяется линия 50-дневная выше линии 90-дневных.
На основе подтверждения больших тенденций и краткосрочных тенденций в движущихся средних, стратегия объединяет показатели PVT и MACD для оценки накопительной характеристики. Сигнал на покупку будет создаваться только тогда, когда PVT прорывается вверх, линия MACD выше линии Signal и увеличивается объем сделки.
По сравнению с использованием только движущихся средних, эта стратегия, подтверждая тенденцию, также проверяет характеристики объема сделок. Это позволяет более точно определить, когда акции входят в стадию накопления, что обеспечивает ценовое преимущество при входе на рынок.
С помощью анализа в нескольких временных рамках, эта стратегия сочетает в себе суждение о среднесрочных и долгосрочных тенденциях и суждение о краткосрочных характеристиках, и сопоставление временных рамок позволяет уменьшить неопределенность, вызванную ошибками в суждении в одном временном периоде.
Эта стратегия основывается на среднелинейном суждении, которое отменяется при резких колебаниях цены. В этом случае следует уменьшить размер позиции или прекратить прямой убыточный выход.
Кроме того, на стадии накопления суждения могут быть ошибочными, что приводит к упущению возможности для обращения вспять. Это требует подтверждения суждений путем наблюдения за дополнительными показателями характеристики.
Эта стратегия позволяет внедрять алгоритмы машинного обучения для автоматического суждения о стадии накопления с помощью извлечения признаков и обучения моделей. Это может уменьшить ограничения, вызванные искусственным установлением порога.
Кроме того, в этой стратегии можно попробовать функцию breakpoint, которая автоматически переключает различные параметры в различных рыночных условиях, чтобы сделать стратегию более грубой.
Эта стратегия в целом использует методы, которые сопоставляют цены и объемы продаж, чтобы определить характеристики накопления акций. При подтверждении основного направления, выявление краткосрочных возможностей накопления.
/*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)