Doppelfaktor Quant Trading Strategie

Schriftsteller:ChaoZhang, Datum: 2023-12-07 15:11:37
Tags:

img

Übersicht

Diese Strategie kombiniert die 123 Umkehrungs- und Primzahlen-Oszillatorfaktoren, um einen durch zwei Faktoren getriebenen quantitativen Handel umzusetzen.

Grundsätze

Der erste Teil ist die 123 Umkehrstrategie. Es verwendet die Funktion der Preisumkehr über 2 Tage, um Ein- und Ausstiegspunkte zu bestimmen. Wenn die Preise über 2 Tage kontinuierlich steigen und der langsame Stochastisch unter 50 liegt, gilt es als überverkauft und erzeugt ein Kaufsignal. Wenn die Preise über 2 Tage kontinuierlich fallen und der schnelle Stochastisch über 50 liegt, gilt es als überkaufter Sprung und erzeugt ein Verkaufssignal.

Der zweite Teil ist die Primzahlen-Oszillator-Strategie. Dieser Indikator berechnet die nächstgelegene Primzahl über und unter dem aktuellen Preis über einen bestimmten Bereich und liefert die Differenz vom aktuellen Preis. Ein positiver Wert bedeutet, dass der aktuelle Preis in der Nähe der Primzahlenobergrenze liegt, während ein negativer Wert bedeutet, dass er in der Nähe des Primzahlenbodens liegt. Die Trendrichtung wird durch den Differenzwert beurteilt, der mit 123 Umkehrsignalen kombiniert wird, um das endgültige Handelssignal zu generieren.

Die Signalverschmelzungsregel lautet: tatsächliche Handelssignale werden nur generiert, wenn die beiden Teilstrategien Signale in die gleiche Richtung geben, andernfalls wird keine neue Position eröffnet, wenn die Signale kollidieren.

Vorteile

Durch die Kombination zweier Faktoren berücksichtigt diese Strategie sowohl kurzfristige Umkehrwirkungen als auch langfristige Trendmerkmale, um marktbezogene Beurteilungen aus mehreren Gesichtspunkten zu treffen und so die Risikobereitschaft der Strategie zu verbessern.

Im Vergleich zu einer Single-Momentum-Strategie kann diese Strategie bei plötzlichen Kursstürzen rechtzeitig einen Stop-Loss oder eine Position umkehren und die Intraday-Risiken durch den Umkehrfaktor effektiv kontrollieren.

Im Vergleich zu einer einzigen Umkehrstrategie vermeidet die Einführung des Primzahl-Oszillators für die Trendrichtung einen Überhandel bei häufigen Umkehrgeschäften.

Risiken

Das größte Risiko besteht in Signalkonflikten zwischen den beiden Faktoren. Wenn die Umkehrung von 123 Zeichen von Überkauf/Überverkauf zeigt und Umkehrsignale erzeugt, während der Primzahlen-Oszillator zeigt, dass es sich immer noch um einen Trend handelt, könnte die direkte Durchführung von Umkehrtrades zu Verlusten führen.

Um dieses Risiko zu kontrollieren, wird zusätzliche Logik hinzugefügt - tatsächliche Trades werden nur generiert, wenn die beiden Signale in Richtung ausgerichtet sind.

Verbesserungen

  1. Optimieren von Stochastischen Parametern, um bessere Umkehrparameter für bestimmte Produkte zu finden

  2. Optimierung des Toleranzprozentsatzes des Primzahl-Oszillators zur Verringerung des Lärmhandels

  3. Hinzufügen von Stop-Loss-Strategien zur Begrenzung der Einwegverlust-Expansion

  4. Hinzufügen eines Positionsgrößenmoduls zur Anpassung von Positionen an verschiedene Marktumgebungen

  5. Hinzufügen von Modellen für maschinelles Lernen zur Beurteilung der Glaubwürdigkeit von Signalen zwischen den beiden Faktoren und Verringerung von Konflikten

Schlussfolgerung

Diese Strategie kombiniert erfolgreich kurzfristige Umkehrfaktoren und langfristige Trendfaktoren, um einen risikoarmen quantitativen Handel zu erzielen.


/*backtest
start: 2023-11-29 00:00:00
end: 2023-12-06 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 28/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
// Determining market trends has become a science even though a high number or people 
// still believe it’s a gambling game. Mathematicians, technicians, brokers and investors 
// have worked together in developing quite several indicators to help them better understand 
// and forecast market movements.
//
// Developed by Modulus Financial Engineering Inc., the prime number oscillator indicates the 
// nearest prime number, be it at the top or the bottom of the series, and outlines the 
// difference between that prime number and the respective series.
//
// 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

PrimeNumberOscillator(price, percent) =>
    res = 0.0
    res1 = 0.0
    res2 = 0.0
    for j = price to price + (price * percent / 100)
        res1 := j
	    for i = 2 to sqrt(price)
        	res1 := iff(j % i == 0 , 0, j)
            if res1 == 0 
                break
		if res1 > 0 
		    break
    for j = price to price - (price * percent / 100)
        res2 := j
	    for i = 2 to sqrt(price)
        	res2 := iff(j % i == 0 , 0, j)
            if res2 == 0 
                break
		if res2 > 0 
		    break
    res := iff(res1 - price < price - res2,  res1 - price, res2 - price)
    res := iff(res == 0, res[1], res)
    res
    
PNO(percent) =>
    pos = 0.0
    xPNO = PrimeNumberOscillator(close, percent)
    pos:= iff(xPNO > 0, 1,
           iff(xPNO < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Prime Number Oscillator", 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, "---- Prime Number Oscillator ----")
percent = input(5, minval=0.01, step = 0.01, title="Tolerance Percentage")
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posPNO = PNO(percent)
pos = iff(posReversal123 == 1 and posPNO == 1 , 1,
	   iff(posReversal123 == -1 and posPNO == -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