Diese Strategie kombiniert gleitende Durchschnitte, Volumenindikatoren und Preisdynamikindikatoren, um eine Reihe von quantitativen Regeln zu entwickeln, um den Zeitpunkt der Akkumulationsphase zu bestimmen.
Die Strategie verwendet einfache gleitende Durchschnitte von 50 Tagen, 90 Tagen und 200 Tagen, um die Kursentwicklung zu bestimmen. Kaufsignale werden nur generiert, wenn die Preise über der 200-Tage-Linie liegen. Dies filtert die Unsicherheit großer Abwärtstrends aus.
Neben der Beurteilung des Haupttrends beurteilt die Strategie auch die Reihenfolge der kurzfristigen gleitenden Durchschnitte, um den Trend zu bestätigen.
Auf der Grundlage, dass der gleitende Durchschnitt die wichtigsten und kurzfristigen Trends bestätigt, kombiniert die Strategie den PVT-Volumenindikator und den MACD-Indikator, um die Akkumulationsmerkmale zu beurteilen.
Im Vergleich zur Verwendung von gleitenden Durchschnitten allein überprüft diese Strategie auch die Merkmale des Volumens und bestätigt gleichzeitig den Trend. Dadurch kann der Zeitpunkt, zu dem die Bestände in die Akkumulationsphase eintreten, genauer ermittelt werden und so bessere Einstiegspreise gewährleistet werden.
Durch die Analyse mehrerer Zeitrahmen kombiniert diese Strategie mittelfristige und langfristige Trendurteile mit kurzfristigen Merkmalurteilen, um Zeitrahmen abzugleichen, was die Unsicherheit bei einer falschen Beurteilung eines einzelnen Zeitrahmens reduzieren kann.
Diese Strategie stützt sich hauptsächlich auf gleitende Durchschnittsurteile. Wenn die Preise heftig schwanken, werden gleitende Durchschnittsurteile fehlschlagen. Zu diesem Zeitpunkt sollte die Positionsgröße reduziert oder ein Stop-Loss-Ausgang ausgelöst werden.
Darüber hinaus ist es möglich, dass im Akkumulationsstadium Fehleinschätzungen vorgenommen werden, wodurch Umkehrmöglichkeiten verpasst werden.
Maschinelle Lernalgorithmen können in diese Strategie eingeführt werden, indem Merkmale und Modell-Training extrahiert werden, um ein automatisches Urteil über die Akkumulationsstufe zu erzielen.
Darüber hinaus kann diese Strategie auch die Breakpoint-Funktionalität ausprobieren, um Parameter automatisch unter verschiedenen Marktumgebungen zu wechseln, wodurch die Strategie robuster wird.
Zusammenfassend lässt sich sagen, dass diese Strategie im Allgemeinen die Idee der Abgleichung von Preisen und Volumina anwendet, um die Eigenschaften der Akkumulationsstufen zu beurteilen.
/*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)