Ein Intraday-Trend nach quantitativer Strategie auf der Grundlage von Multi-Indikator-Filterung

Schriftsteller:ChaoZhang, Datum: 15.12.2023
Tags:

img

Übersicht

Diese Strategie kombiniert PSAR, um Preistrends zu beurteilen, ADX, um die Trendstärke zu beurteilen, RSI, um Überkauf- und Überverkaufszonen zu lokalisieren, und CMF, um Fondsströme zu beurteilen, um eine intraday-trendfolgende quantitative Handelsstrategie über Zyklen hinweg zu konstruieren. Sie kann schnell neue Trendrichtungen lokalisieren, wenn die Preise aus der Konsolidierung ausbrechen und neue Trends bilden, und weiterhin Trends nachverfolgen. Während sichergestellt wird, dass die wichtigsten Trendgewinne erfasst werden, werden auch Filterbedingungen während des Prozesses festgelegt, um das Halterisiko zu reduzieren.

Grundsätze

Die wichtigsten Kriterien für diese Strategie sind:

  1. Der PSAR-Indikator wird verwendet, um zu beurteilen, ob sich die Preise in einem Aufwärtstrend befinden.

  2. Der RSI muss über dem Mittelpunkt von 50 liegen, um falsche Ausbrüche in Überverkaufszonen auszuschließen.

  3. Die ADX muss über der EMA-Linie liegen, was bei der Trendanalyse ein nachhaltiges Signal darstellt.

  4. Die CMF muss größer als 0 sein, wenn der Zuwachs an Geldern beurteilt wird.

Kaufsignale werden erzeugt, wenn alle vier oben genannten Bedingungen erfüllt sind. Verkaufsbedingungen treten auf, wenn PSAR über den Preis steigt, der RSI unter 50 fällt, ADX unter seine EMA fällt und CMF weniger als 0 wird.

Diese Strategie berücksichtigt bei der Festlegung von Handelsregeln umfassend die Kursentwicklungsrichtung, die Trendstärke, den Überkauf-/Überverkaufszustand und die Geldströme.

Vorteile

Zu den Hauptvorteilen dieser Strategie gehören:

  1. Die Kombination mehrerer Indikatoren bei der Festlegung von Handelsregeln kann falsche Ausbrüche wirksam verhindern und die Signalqualität gewährleisten.

  2. Die schnelle Ermittlung und Verfolgung von aufstrebenden Trendrichtungen ermöglicht es, die meisten Trendgewinne zu erzielen.

  3. Die Einrichtung von Prozessfilterbedingungen kann die Risiken wirksam kontrollieren und die Wirksamkeit der Nachverfolgung gewährleisten.

  4. Die Berücksichtigung der Trendstärke hilft, Handelsspanenüberlastungen zu vermeiden.

Risikoanalyse

Zu den wichtigsten Risiken dieser Strategie gehören:

  1. Die Akkumulation einer einzigen Strategie birgt Portfoliorisiko und erfordert eine angemessene Positionsgröße.

  2. Überwachen Sie während der Nachverfolgung die Veränderungen des Filterzustands genau, um Verluste bei der Stornierung zu vermeiden.

  3. Diese mittelfristige und langfristige Strategie kann kurzfristig durch Schwankungen gestört werden und birgt Stop-Loss-Risiken.

Entsprechende Risikomanagementmaßnahmen umfassen: Optimierung der Positionsgrößenregelung, Festlegung von Risikowarnlinien und Erweiterung der Stoppdistanzen usw.

Optimierungsrichtlinien

Zu den Optimierungsbereichen gehören:

  1. Parameteroptimierung durch maschinelles Lernen unter Berücksichtigung aktueller subjektiver Einstellungen.

  2. Hinzufügen eines Positionsgrößenmoduls, das dynamisch auf der Grundlage von Risiken grösst.

  3. Verbesserte Stoppmechanismen, z. B. Trailing Stops, Time Stops oder Breakout Stops.

Schlussfolgerung

Diese Strategie, die Indikatoren kombiniert, erwies sich als wirksam bei der schnellen Lokalisierung und Verfolgung von aufstrebenden Trends und bei der Validierung quantitativen Handels auf der Grundlage mehrerer Dimensionen wie Trends und Fonds. Als Basis kann sie über Zyklen hinweg indexiert werden. Mit Parameter-Tuning und modularen Verbesserungen kann sie auch zu einer stabilen mittelfristigen / langfristigen Strategie werden.


/*backtest
start: 2023-11-14 00:00:00
end: 2023-12-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("psar+ adx + cmf + rsi Strategy", overlay=true,initial_capital = 1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent , commission_value=0.1 )

start = input(1.02)
increment = input(1.02)
maximum = input(1.2)
var bool uptrend = na
var float EP = na
var float SAR = na
var float AF = start
var float nextBarSAR = na
if bar_index > 0
	firstTrendBar = false
	SAR := nextBarSAR
	if bar_index == 1
		float prevSAR = na
		float prevEP = na
		lowPrev = low[1]
		highPrev = high[1]
		closeCur = close
		closePrev = close[1]
		if closeCur > closePrev
			uptrend := true
			EP := high
			prevSAR := lowPrev
			prevEP := high
		else
			uptrend := false
			EP := low
			prevSAR := highPrev
			prevEP := low
		firstTrendBar := true
		SAR := prevSAR + start * (prevEP - prevSAR)
	if uptrend
		if SAR > low
			firstTrendBar := true
			uptrend := false
			SAR := max(EP, high)
			EP := low
			AF := start
	else
		if SAR < high
			firstTrendBar := true
			uptrend := true
			SAR := min(EP, low)
			EP := high
			AF := start
	if not firstTrendBar
		if uptrend
			if high > EP
				EP := high
				AF := min(AF + increment, maximum)
		else
			if low < EP
				EP := low
				AF := min(AF + increment, maximum)
	if uptrend
		SAR := min(SAR, low[1])
		if bar_index > 1
			SAR := min(SAR, low[2])
	else
		SAR := max(SAR, high[1])
		if bar_index > 1
			SAR := max(SAR, high[2])
	nextBarSAR := SAR + AF * (EP - SAR)

//rsi strat
length = input( 50 )
middle_RSI=input(49)
price = close
vrsi = rsi(price, length)

//cmf
lengthCMF = input(20, minval=1)
ad = close==high and close==low or high==low ? 0 : ((2*close-low-high)/(high-low))*volume
mf = sum(ad, lengthCMF) / sum(volume, lengthCMF)

//ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
ema_length=input(10)
ema_sig= ema(sig,ema_length)


long = not uptrend  and vrsi > middle_RSI and sig > ema_sig   and mf>0 
short= uptrend   and vrsi < middle_RSI and sig<ema_sig and mf<0

strategy.entry("long",1,when=long)
strategy.close('long',when=short)

Mehr