Stratégie de négociation quantitative à double facteur

Auteur:ChaoZhang est là., Date: 2023-12-07 15:11:37 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie combine les facteurs 123 d'inversion et d'oscillateur de nombres premiers pour mettre en œuvre un trading quantitatif basé sur des facteurs doubles.

Principaux

La première partie est la stratégie d'inversion 123. Elle utilise la caractéristique de l'inversion des prix sur 2 jours pour déterminer les points d'entrée et de sortie. Lorsque les prix augmentent continuellement sur 2 jours et que le stochastique lent est inférieur à 50, il est considéré comme survendu, ce qui produit un signal d'achat. Lorsque les prix chutent continuellement sur 2 jours et que le stochastique rapide est supérieur à 50, il est considéré comme un rebond suracheté, ce qui produit un signal de vente.

La deuxième partie est la stratégie d'oscillateur de nombres premiers. Cet indicateur calcule le nombre premier le plus proche au-dessus et en dessous du prix actuel sur une plage spécifiée et produit la différence par rapport au prix actuel. Une valeur positive signifie que le prix actuel est proche du plafond des nombres premiers, tandis qu'une valeur négative signifie qu'il est proche du sol des nombres premiers.

La règle de fusion des signaux est la suivante: les signaux de trading réels ne sont générés que lorsque les deux sous-stratégies donnent des signaux dans la même direction, sinon aucune nouvelle position n'est ouverte lorsque les signaux sont en conflit.

Les avantages

En combinant deux facteurs, cette stratégie prend en compte à la fois les effets d'inversion à court terme et les caractéristiques de tendance à long terme pour faire des jugements de marché multi-angles, améliorant la résistance au risque de la stratégie.

Comparée à une stratégie à dynamique unique, cette stratégie permet d'arrêter rapidement les pertes ou d'inverser la position en cas de chute soudaine des prix, en contrôlant efficacement les risques intraday en utilisant le facteur d'inversion.

Comparé à une stratégie unique d'inversion, l'introduction de l'oscillateur à nombres premiers pour la direction de la tendance évite le suréchange lors de transactions fréquentes d'inversion.

Les risques

Le risque le plus important réside dans les conflits de signaux entre les deux facteurs. Si l'inversion 123 montre des signes de surachat/survente et produit des signaux d'inversion, alors que l'oscillateur de nombres premiers montre qu'il est toujours dans une tendance, la prise directe de transactions d'inversion pourrait entraîner des pertes.

Pour contrôler ce risque, une logique supplémentaire est ajoutée - les transactions réelles ne sont générées que lorsque les deux signaux s'alignent dans la direction.

Améliorations

  1. Optimiser les paramètres stochastiques pour trouver de meilleurs ensembles de paramètres d'inversion pour des produits spécifiques

  2. Optimiser le pourcentage de tolérance de l'oscillateur de nombres premiers pour réduire les échanges de bruit

  3. Ajouter des stratégies de stop-loss pour limiter l'expansion des pertes à sens unique

  4. Ajouter un module de dimensionnement des positions pour ajuster les positions pour différents environnements de marché

  5. Ajouter des modèles d'apprentissage automatique pour juger de la crédibilité du signal entre les deux facteurs, réduisant les conflits

Conclusion

Cette stratégie combine avec succès des facteurs d'inversion à court terme et des facteurs de tendance à long terme pour réaliser un trading quantitatif à faible risque. En utilisant efficacement des facteurs doubles pour filtrer le bruit et en définissant une logique supplémentaire pour contrôler les risques, il s'agit d'une stratégie pratique de profit constant. Les paramètres et les fonctions seront continuellement optimisés pour répondre aux caractéristiques réelles du marché.


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

Plus de