Doppelbestätigung Quant Trading Strategie

Schriftsteller:ChaoZhang, Datum: 15.01.2024
Tags:

img

Übersicht

Die Doppel-Bestätigungs-Quant-Handelsstrategie realisiert die Doppel-Bestätigung von Handelssignalen durch die Kombination der Umkehrstrategie 123 und der Teilstrategien des Prozentsatzvolumen-Oszillators (PVO), um das Handelsrisiko zu reduzieren.

Handelsgrundsätze

123 Umkehrstrategie

Die 123 Umkehrstrategie basiert auf K-Linien-Mustern, die vom Stochastik-Indikator implementiert werden. Insbesondere geht sie lang, wenn der Schlusskurs zwei aufeinanderfolgende Tage unter dem Schlusskurs des vorherigen Tages liegt und der 9-tägige langsame Stochastik unter 50 liegt; sie geht kurz, wenn der Schlusskurs zwei aufeinanderfolgende Tage über dem Schlusskurs des vorherigen Tages liegt und der 9-tägige schnelle Stochastik über 50 liegt.

Prozentualer Volumen-Oszillator (PVO)

PVO ist ein auf Volumen basierender Momentumsoszillator. Er misst die Differenz zwischen zwei exponentiellen gleitenden Durchschnitten des Volumens über verschiedene Perioden als Prozentsatz des längeren Periodendurchschnitts. Er ist positiv, wenn die kürzere Periode EMA über der längeren Periode EMA liegt, und negativ, wenn die kürzere Periode EMA darunter liegt. Dieser Indikator spiegelt die Auf- und Abwärtsraten des Handelsvolumens wider.

Analyse der Vorteile

Diese Strategie kombiniert Preis- und Volumenindikatoren, um falsche Breaks effektiv zu filtern, und kann gleichzeitig durch den Einsatz des Dual-Confirmation-Mechanismus die Häufigkeit der Transaktionen reduzieren und die Handelsrisiken senken.

Risikoanalyse

Diese Strategie beruht auf längeren Haltezeiten mit dem Risiko von Drawdowns.

Optimierungsrichtlinien

Die Leistung von Teilstrategien kann durch Anpassung der Parameter von Stochastic und PVO optimiert werden. Stop-Loss-Mechanismen können auch zur Risikokontrolle eingeführt werden. Zusätzlich kann das Filtern von Signalen mit anderen Indikatoren die Stabilität der Strategie weiter verbessern.

Schlussfolgerung

Die Dual-Confirmation Quant Trading Strategie berücksichtigt sowohl Preis- als auch Volumenfaktoren mit guten Backtest-Ergebnissen.


/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 14/04/2021
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// The Percentage Volume Oscillator (PVO) is a momentum oscillator for volume. 
// PVO measures the difference between two volume-based moving averages as a 
// percentage of the larger moving average. As with MACD and the Percentage Price 
// Oscillator (PPO), it is shown with a signal line, a histogram and a centerline. 
// PVO is positive when the shorter volume EMA is above the longer volume EMA and 
// negative when the shorter volume EMA is below. This indicator can be used to define 
// the ups and downs for volume, which can then be use to confirm or refute other signals. 
// Typically, a breakout or support break is validated when PVO is rising or positive. 
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos


PVO(LengthShortEMA,LengthLongEMA,LengthSignalEMA) =>
    pos = 0.0
    xShortEMA = ema(volume , LengthShortEMA)
    xLongEMA = ema(volume , LengthLongEMA)
    xPVO = ((xShortEMA - xLongEMA) / xLongEMA) * 100
    xSignalEMA = ema(xPVO , LengthSignalEMA)
    xPVOHisto = xPVO - xSignalEMA
    pos := iff(xSignalEMA < xPVO, -1,
    	      iff(xSignalEMA > xPVO, 1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Percentage Volume Oscillator (PVO)", shorttitle="Combo", overlay = true)
line1 = input(true, "---- 123 Reversal ----")
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
line2 = input(true, "---- Percentage Volume OscillatorA ----")
LengthShortEMA = input(12, minval=1)
LengthLongEMA = input(26, minval=1)
LengthSignalEMA = input(9, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posPVO = PVO(LengthShortEMA,LengthLongEMA,LengthSignalEMA)
pos = iff(posReversal123 == 1 and posPVO == 1 , 1,
	   iff(posReversal123 == -1 and posPVO == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1 ) 
    strategy.entry("Long", strategy.long)
if (possig == -1 )
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Mehr