Quantitative Identifizierung von Strategien für die Akkumulationsphase


Erstellungsdatum: 2024-02-20 11:29:57 zuletzt geändert: 2024-02-20 11:29:57
Kopie: 0 Klicks: 589
1
konzentrieren Sie sich auf
1617
Anhänger

Quantitative Identifizierung von Strategien für die Akkumulationsphase

Überblick

Die Strategie kombiniert die Verwendung von Moving Averages, Volumenindikatoren und Preisdynamik-Indikatoren, um eine Reihe von Quantifizierungsregeln zu entwickeln, um zu identifizieren, wann eine Aktie in die Akkumulationsphase eintritt. In dieser Phase sind die Aktien in der Regel in einem Zusammentreffen der Preise und in einer Bewegung, die eine gute Chance für einen niedrigeren Preis bietet.

Strategieprinzip

Die Strategie nutzt einfache bewegliche Durchschnitte über 50, 90 und 200 Tage, um die Preisentwicklung zu bestimmen. Ein Kaufsignal wird nur erzeugt, wenn der Preis über der 200-Tage-Linie liegt. Dies filtert die Unsicherheit über einen großen Trend ab.

Zusätzlich zu den großen Trends beurteilt die Strategie auch die kurzfristige Durchschnittslinie, um Trends zu bestätigen. Insbesondere wird die 50-Tage-Linie als höher als die 90-Tage-Linie beurteilt.

Auf der Grundlage der Beurteilung der Akkumulationsmerkmale durch die Kombination von PVT und MACD wird eine Strategie entwickelt, die auf der Grundlage der Bestätigung des Großtrends und des kurzfristigen Trends durch den Moving Average basiert. Ein Kaufsignal wird nur erzeugt, wenn der PVT nach oben springt, die MACD-Linie über der Signal-Linie liegt und die Transaktionsmenge erhöht wird.

Strategische Vorteile

Die Strategie untersucht die Merkmale des Umsatzes und bestätigt den Trend im Vergleich zum einfachen Einsatz eines Moving Averages. Dies ermöglicht eine genauere Bestimmung der Zeit, zu der eine Aktie in die Akkumulationsphase eintritt, um einen Preisvorteil für den Einstieg zu gewährleisten.

Durch die Analyse von mehreren Zeitrahmen kombiniert diese Strategie die Beurteilung von mittleren und langen Trends mit der Beurteilung von kurzfristigen Merkmalen, wobei die zeitliche Übereinstimmung der Zeitrahmen die Unsicherheit verringert, die durch die Fehleinschätzung eines einzigen Zeitrahmens entsteht.

Risiken und Lösungen

Diese Strategie beruht hauptsächlich auf der Ermittlung der Durchschnittslinie. Die Ermittlung der Durchschnittslinie wird bei starken Preisschwankungen außer Kraft gesetzt. In diesem Fall sollte die Positionsgröße reduziert oder der Ausstieg direkt verhindert werden.

Außerdem kann es zu Fehlentscheidungen in der Akkumulationsphase kommen, wodurch eine Chance auf Umkehr verpasst wird. Dies muss durch die Beobachtung weiterer Merkmale bestätigt werden.

Optimierung

Diese Strategie kann Machine-Learning-Algorithmen einführen, die automatische Beurteilungen über die Akkumulationsphase durch Feature Extraction und Modell-Training ermöglichen. Dies kann die Einschränkungen durch manuelle Einstellungs-Thresholds reduzieren.

Außerdem kann die Strategie die Funktion “breakpoint” ausprobieren, die automatisch verschiedene Parameter in verschiedenen Marktumgebungen wechselt, um die Strategie robuster zu machen.

Zusammenfassen

Die Strategie verwendet im Allgemeinen eine Methode, um die Akkumulationsmerkmale von Aktien zu beurteilen, die mit dem Preis und der Umsatzmenge übereinstimmen. Die Strategie nutzt die Möglichkeit, kurzfristige Akkumulationsmöglichkeiten zu erschließen, während die allgemeine Richtung bestätigt wird. Durch die Einführung von Mitteln wie Parameteroptimierung und Maschinelles Lernen kann die Strategie noch weiter verbessert werden.

Strategiequellcode
/*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)