Cette stratégie utilise les principes de la croix d’or et de la fourche morte des moyennes mobiles simples pour réaliser des positions longues et courtes sur les actions. Faites plus lorsque la ligne rapide franchit la ligne lente du côté inférieur; faites moins lorsque la ligne rapide franchit la ligne lente du côté supérieur.
La stratégie définit d’abord le début et la fin du repérage, puis définit les paramètres de calcul des deux moyennes, y compris le type de moyenne et la longueur de la période.
Calculez les valeurs de deux moyennes avec la fonction getMAType (). La fastMA est la moyenne à court terme et la slowMA est la moyenne à long terme.
La logique centrale de la stratégie est la suivante:
Le signal long est émis lorsque le fastMA est porté sur le slowMA.
Le signal short est émis lorsque le fastMA passe sous le slowMA.
Enfin, pendant la période de retracement, la stratégie de position longue est utilisée en cas de signal de plus; la stratégie de position vide est utilisée en cas de signal de moins.
L’optimisation des risques peut être améliorée par:
Ajouter des filtres sur d’autres indicateurs techniques pour identifier les tendances.
Augmenter les stratégies de stop-loss et contrôler les pertes ponctuelles.
L’introduction d’indicateurs quantitatifs, etc., pour éviter le arbitrage sur les marchés en crise.
Créer un mécanisme d’optimisation des paramètres pour trouver automatiquement la meilleure combinaison de paramètres.
Cette stratégie peut être optimisée dans les domaines suivants:
Augmentation des stratégies de stop loss, telles que la définition d’un point de stop fixe ou le suivi des stops et de la maîtrise des pertes.
Augmentation des stratégies de gestion de position, telles que les positions fixes, les positions dynamiques et le contrôle des risques de transaction.
Ajout de filtres, combinés à d’autres indicateurs techniques pour identifier les tendances et améliorer le taux de réussite.
Optimiser les paramètres, rechercher les paramètres optimaux par des méthodes telles que la recherche de grille ou la régression linéaire.
Étendre les stratégies de trading enrichissantes en utilisant plus de stratégies de couverture, telles que le revirement de rupture de position, la construction de positions par lots, etc.
Le nombre de personnes qui ont été touchées par les tremblements de terre a augmenté de façon spectaculaire.
Enrichissement de la variété des transactions, avec l’extension à d’autres variétés telles que les futures d’indices boursiers, les devises étrangères et les monnaies numériques
Cette stratégie est basée sur le principe croisé des moyennes mobiles pour réaliser une sélection de positions longues et courtes d’actions. L’idée de la stratégie est simple, claire, largement utilisée, très adaptable et a une certaine valeur pratique. Mais la stratégie présente également un certain retard et une incapacité à filtrer efficacement les chocs. À l’avenir, il est possible d’optimiser la stratégie en améliorant le stop loss, en optimisant les paramètres et en ajoutant des filtres.
/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//strategy("Golden X BF Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)
/////////////// Time Frame ///////////////
testStartYear = input(2010, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)
testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)
testPeriod() => true
///////////// MA Params /////////////
source1 = input(title="MA Source 1", defval=close)
maType1 = input(title="MA Type 1", defval="sma", options=["sma", "ema", "swma", "wma"])
length1 = input(title="MA Length 1", defval=50)
source2 = input(title="MA Source 2", defval=close)
maType2 = input(title="MA Type 2", defval="sma", options=["sma", "ema", "swma", "wma"])
length2 = input(title="MA Length 2", defval=200)
///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) =>
res = sma(close, 1)
if maType == "ema"
res := ema(sourceType, maLen)
if maType == "sma"
res := sma(sourceType, maLen)
if maType == "swma"
res := swma(sourceType)
if maType == "wma"
res := wma(sourceType, maLen)
res
///////////// MA /////////////
fastMA = getMAType(maType1, source1, length1)
slowMA = getMAType(maType2, source2, length2)
long = crossover(fastMA, slowMA)
short = crossunder(fastMA, slowMA)
/////////////// Plotting ///////////////
checkColor() => fastMA > slowMA
colCheck = checkColor() ? color.lime : color.red
p1 = plot(fastMA, color = colCheck, linewidth=1)
p2 = plot(slowMA, color = colCheck, linewidth=1)
fill(p1, p2, color = checkColor() ? color.lime : color.red)
bgcolor(long ? color.lime : short ? color.red : na, transp=20)
/////////////// Execution ///////////////
if testPeriod()
strategy.entry("Long", strategy.long, when=long)
strategy.entry("Short", strategy.short, when=short)