Stratégie de trading quantitative croisée à double moyenne mobile exponentielle


Date de création: 2024-01-25 14:04:23 Dernière modification: 2024-01-25 14:04:23
Copier: 0 Nombre de clics: 659
1
Suivre
1617
Abonnés

Stratégie de trading quantitative croisée à double moyenne mobile exponentielle

Aperçu

Cette stratégie est connue sous le nom de stratégie de trading quantifiée croisée de la moyenne bi-indicielle. La stratégie permet de négocier automatiquement en calculant la moyenne mobile exponentielle (EMA) et en effectuant des jugements de points de vente et d’achat croisés, combinés au principe d’ouverture de position des transactions quantifiées.

Principe de stratégie

La logique centrale de cette stratégie est basée sur une moyenne mobile à deux indices. L’indicateur 1 est une EMA à court terme de 20 jours et l’indicateur 2 est une EMA à long terme de 50 jours.

En outre, la stratégie utilise également l’indicateur quantitatif Vortex pour aider à déterminer la tendance et à générer des signaux de négociation. L’indicateur Vortex détermine la trajectoire de hausse et de baisse en calculant le prix le plus élevé par rapport au prix de clôture d’hier et le prix le plus bas par rapport au prix de clôture d’hier.

Lors de la génération d’un signal de trading, la gestion des risques est effectuée en fonction du module de gestion des fonds intégré à la stratégie, en combinaison avec le principe du ratio profit / perte. La stratégie permet de définir des points de perte et de stop pour bloquer les bénéfices, afin de contrôler les risques.

Analyse des avantages

  • 1. Stratégie d’intégration des indicateurs quantifiés de double croisement EMA et Vortex pour tirer le meilleur parti de l’indicateur et améliorer l’exactitude du signal
  • 2. Système de négociation automatisé, sans intervention humaine, réduisant la probabilité d’erreur humaine
  • 3. La fonction Stop Loss automatique intégrée limite la perte maximale sur une seule transaction
  • 4. Le module de gestion de fonds contrôle le pourcentage de capital investi pour chaque transaction, contrôlant ainsi le risque de transaction global

Analyse des risques

  • 1. Les signaux croisés EMA peuvent être fausses, et les indicateurs quantifiés Vortex ne peuvent pas filtrer complètement les faux signaux, il y a donc une certaine probabilité de perte
  • 2. La crise des Black Swans pourrait entraîner des pertes de transactions individuelles.
  • 3. Retourner le contrôle dépendant de la fonction d’arrêt de perte, ce qui entraînerait des pertes plus importantes si la fonction d’arrêt de perte était dépassée

Les directions d’optimisation

  • 1. Il est possible de tester et d’ajuster les paramètres EMA pour optimiser les signaux croisés.
  • 2. Les signaux de filtrage peuvent être combinés avec d’autres indicateurs
  • 3. Les paramètres peuvent être automatiquement optimisés par des algorithmes d’apprentissage automatique

Résumer

Cette stratégie est généralement une stratégie typique de croisement de deux EMA, utilisant le croisement entre les différents paramètres de l’EMA pour juger du moment où le marché peut être acheté ou vendu, et appartient à la stratégie de négociation à courte et moyenne ligne. Le plus grand avantage de la stratégie réside dans l’utilisation d’indicateurs quantifiés pour filtrer les signaux et dans la réalisation d’une surveillance sans personne par le système de négociation automatisé, tout en intégrant un stop loss stop pour contrôler les risques, la performance est relativement stable.

Code source de la stratégie
/*backtest
start: 2023-01-18 00:00:00
end: 2024-01-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © smottybugger 

//@version= 5
strategy("The  Averages Moving_X_Vortex", shorttitle="2.5billion BTC lol" , calc_on_order_fills=true, calc_on_every_tick=true, commission_type=strategy.commission.percent, commission_value=0.02, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, margin_long=0, margin_short=0,overlay=true)
// Dual Vortex
period_1 = input(15, "short Time")
period_2 = input(25, "long time")
VMP = math.sum(math.abs(high - low[3]), period_1)
VMM = math.sum(math.abs(low - high[1]), period_2)
STR = math.sum(ta.atr(1), period_1)
STR2 = math.sum(ta.atr(1), period_2)
VXpower= (input(5,"Vortex Power")/10000)*close
shorterV =(VMP / STR)*VXpower
longerV = (VMM / STR2)*VXpower

// MACross
shortlen = input(20, "ShortMa")
longlen = input(29, "LongMA")
shorterMA = ta.sma(close, shortlen)
longerMA = ta.sma(close, longlen)

// Vortex "MACross Stabilized"
Varance = input(1, "Vortex Stabilize")
Vpercent = (Varance / 100)
shortV= ((((shorterMA-close)* Vpercent)+shorterV)/2)+close
longV = ((((longerMA -close )*Vpercent)+longerV)/2)+close

//MAcross vortex stabilized
Marance = input(1, "MACross Stabilize")
MApercent = Marance / 100
shortMA = ((((shorterMA-close)*MApercent)+shorterV)/2)+close
longMA = ((((longerMA-close)*MApercent)+longerV)/2)+close

//VMXadveraged Moving cross adveraged
VMXL=(longV+longMA)/2
VMXS=(shortV+shortMA)/2
VXcross= ta.cross(VMXS,VMXL) ? VMXS : na
VMXcross= ta.cross(VMXS,VMXL)

//plot
plot(VMXS,"BUY",color=#42D420)
plot(VMXL,"SELL",color=#e20420)
crossV= ta.cross(shortV, longV) ? shortV : na
plot(shortV ,"shortV", color=#42D420)
plot(longV,"longV", color=#e20420)
plot(crossV,"crossV", color=#2962FF, style=plot.style_cross, linewidth=4)
crossMA = ta.cross(shortMA, longMA) ? shortMA : na
plot(shortMA,"shortMA", color=#42D420)
plot(longMA,"longMA", color=#e20420)
plot(crossMA,"crossMA", color=#2962FF, style=plot.style_cross, linewidth=4)
plot(VXcross,"VMXcross",color=#2962FF, style= plot.style_cross,linewidth=4)
plot(close,color=#999999)

// Vortex Condistyle
is_Vlong =shortV< longV
is_Vshort =shortV>longV


// Vortex commands
Vlong =  ta.crossunder(longV, shortV)
Vshort =ta.crossover(shortV,longV)
VorteX = ta.cross(longV, shortV)

// MACross Conditions
is_MAlong = shortMA < longV
is_MAshort = shortMA > shortV


//VMX Conditions
is_VMXlong=VMXS<VMXL
is_VMXshort=VMXS>VMXL

// MA commands
MAlong = ta.crossunder(shortMA, longV)
MAshort =ta.crossover(shortMA, shortV)
MAcross =  ta.cross(shortMA, longMA)
 
//VMX COMMANss
VMXBUY=ta.crossover( VMXS,VMXL)
VMXSELL=ta.crossunder(VMXS,VMXL)

// Close Crossing PositionLMXs

CS=is_MAshort or is_VMXshort
CL= is_MAlong or is_VMXlong
OS=MAshort or VMXSELL
OL=MAlong or VMXBUY


if VMXcross
    strategy.close_all ("closed")

//if CS and  OL
    strategy.close("Short",comment="Short Closed")


//if CL and  OS
    strategy.close("Long",comment="Long Closed" ) 

//CA1= is_MAcross and is_VorteX
//if CA1
   // strategy.close_all(comment="X2X")

// Defalongyntry qty

if is_VMXlong and VMXSELL
    strategy.entry("sell",strategy.short)


if is_VMXshort and VMXBUY
    strategy.entry("buy",strategy.long)



// Stop Losses & Taking Profit
sllp = input(0, "Stop Loss Long")
sll = (1 - sllp / 100) * strategy.position_avg_price
is_sll = input(true, "Stop Long")

tplp = input(0, "Take Profit Long")
tpl = (1 + tplp / 100) * strategy.position_avg_price
is_tpl = input(true, "Take Long")

slsp = input(0, "Stop Loss Short")
sls = (1 + slsp / 100) * strategy.position_avg_price
is_sls = input(true, "Stop Short")

tpsp = input(0, "Take Profit Short")
tps = (1 - tpsp / 100) * strategy.position_avg_price
is_tps = input(true, "Take Short")

if (is_sll or is_sls) 
    strategy.close("Stop Losses", qty_percent=100)

if (is_tpl or is_tps) 
    strategy.close("Take Profits", qty_percent=100)


 //Strategy Backtest
//plot(strategy.equity, "Equity", color=color.red, linewidth=2, style=plot.style_areabr)