Stratégie de négociation algorithmique croisée de moyenne mobile à double exponentiel

Auteur:ChaoZhang est là., Date: 2024-01-25 14:04:23 Je vous en prie.
Les étiquettes:

img

Résumé

La stratégie est appelée Dual Exponential Moving Average Crossover Algorithmic Trading Strategy. Elle calcule les moyennes mobiles exponentielles doubles (EMA) et génère des signaux de trading lorsque les EMA se croisent. Combinée aux principes de trading algorithmique pour l'entrée d'ordres, elle automatise l'ensemble du processus de trading.

La logique de la stratégie

En outre, l'indicateur Vortex est utilisé pour aider à identifier la tendance et à générer des signaux de trading. L'indicateur Vortex détermine la dynamique haussière ou baissière en comparant la différence entre le prix le plus élevé et la clôture d'hier, et le prix le plus bas et l'ouverture d'hier, sur une période de 1 jour et de 3 jours. L'utilisation du Vortex peut aider à filtrer certains signaux moins importants des croisements de l'EMA.

Lorsqu'un signal de trading est généré, le module de gestion de l'argent intégré aide à gérer les risques en contrôlant la taille des positions en fonction de ratios de perte de profit prédéfinis.

Analyse des avantages

  1. La stratégie intègre deux croisements EMA et l'indicateur Vortex pour tirer parti des deux, améliorant ainsi la précision du signal

  2. Le système de trading automatisé élimine les erreurs humaines émotionnelles et minimise les risques

  3. Les fonctions d'arrêt automatique des pertes/prise de profit limitent la perte maximale pour chaque transaction

  4. Le module de gestion de l'argent contrôle l'allocation de capital pour chaque transaction, gérant ainsi les risques globaux

Analyse des risques

  1. Les croisements EMA peuvent générer de faux signaux et l'indicateur Vortex ne peut pas non plus filtrer complètement les faux signaux.

  2. Les événements du cygne noir peuvent entraîner d'énormes pertes sur les positions ouvertes.

Possibilités d'amélioration:

  1. Les paramètres EMA peuvent être optimisés davantage pour améliorer la qualité du signal

  2. Plus d'indicateurs peuvent être ajoutés à de meilleurs signaux filtrants

  3. Les algorithmes d'apprentissage automatique peuvent aider à optimiser automatiquement les paramètres

Conclusion

Dans l'ensemble, il s'agit d'une stratégie de double EMA croisée typique pour le trading à moyen terme. Elle identifie les opportunités de trading des croisements EMA. Le plus grand avantage réside dans l'utilisation d'indicateurs tels que le Vortex pour filtrer les signaux, exécuter la stratégie automatisée de manière fiable, ainsi que les fonctions de stop loss / take profit intégrées pour atténuer les risques. À l'avenir, les performances de la stratégie peuvent être encore améliorées grâce à l'ajustement des paramètres et à l'intégration d'indicateurs plus complémentaires.


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


Plus de