Akkumulationsstadium und Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2024-02-20 11:29:57
Tags:

img

Übersicht

Diese Strategie kombiniert gleitende Durchschnitte, Volumenindikatoren und Preisdynamikindikatoren, um eine Reihe von quantitativen Regeln zu entwickeln, um den Zeitpunkt der Akkumulationsphase zu bestimmen.

Strategieprinzip

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.

Vorteile

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.

Risiken und Lösungen

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.

Optimierungsideen

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.

Zusammenfassung

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)


Mehr