Quantitative Handelsstrategie mit doppelt exponentiellem gleitendem Durchschnitt und Crossover


Erstellungsdatum: 2024-01-25 14:04:23 zuletzt geändert: 2024-01-25 14:04:23
Kopie: 0 Klicks: 659
1
konzentrieren Sie sich auf
1617
Anhänger

Quantitative Handelsstrategie mit doppelt exponentiellem gleitendem Durchschnitt und Crossover

Überblick

Diese Strategie wird als Quantifizierungsstrategie für den Quantifizierungshandel bezeichnet. Die Strategie ermöglicht den automatischen Handel durch die Berechnung eines exponentiellen gleitenden Durchschnitts (Exponential Moving Average, EMA) und die Ermittlung von Kauf- und Verkaufspunkten.

Strategieprinzip

Die Kernlogik dieser Strategie basiert auf einem binären Index-Moving Average. Indikator 1 ist ein kurzfristiger 20-Tage-EMA, Indikator 2 ist ein langfristiger 50-Tage-EMA. Es erzeugt ein Kaufsignal, wenn ein kurzfristiger EMA von unten einen langfristigen EMA durchbricht. Es erzeugt ein Verkaufsignal, wenn ein kurzfristiger EMA von oben einen langfristigen EMA durchbricht.

Die Vortex-Indikatoren helfen bei der Ermittlung von Trends und bei der Erzeugung von Handelssignalen. Die Vortex-Indikatoren ermitteln die Kursbewegungen durch die Berechnung des Höchstpreises und des Gesternschlusskurses sowie des Unterschieds zwischen dem niedrigsten Preis und dem Gesternschlusskurs. Die Vortex-Indikatoren filtern die EMA-Signale aus, die nicht zu den wichtigsten Trends gehören.

Die Strategie erlaubt die Einstellung von Stop-Loss- und Stop-Off-Bereichen, um Gewinne zu sichern und Risiken zu kontrollieren.

Analyse der Stärken

  • 1. Strategie zur Integration von doppelten EMA-Cross- und Vortex-Quantifizierungsindikatoren, um die Vorteile der Indikatoren zu nutzen und die Signalgenauigkeit zu verbessern
  • 2. Automatisierte Handelssysteme ohne menschliche Beteiligung, reduziert die Wahrscheinlichkeit menschlicher Fehler
  • 3. Eingebettete automatische Stop-Loss-Funktion, die den maximalen Verlust für einen einzelnen Handel einschränkt
  • 4. Das Modul für die Geldverwaltung steuert den Anteil des eingesetzten Kapitals an jedem Handel und somit das Gesamtrisiko des Handels

Risikoanalyse

  • 1. EMA-Kreuzsignale können falsche Signale erzeugen, und Vortex-Quantifizierung kann falsche Signale nicht vollständig filtern, so dass eine gewisse Verlustwahrscheinlichkeit besteht
  • 2. Ein unerwartetes, großes Black Swan-Ereignis könnte die Verluste im Einzelhandel direkt ausweiten.
  • 3. Zurückziehungssteuerung ist abhängig von der Stop-Loss-Funktion, die größere Verluste verursacht, wenn sie durchbrochen wird

Optimierung:

  • 1. Tests zur Anpassung der EMA-Parameter zur Optimierung des Kreuzungssignals
  • 2. Mehr Indikatoren können mit Filtersignalen kombiniert werden
  • 3. Die Parameter können automatisch mit Hilfe eines Algorithmus optimiert werden.

Zusammenfassen

Die Strategie ist im Allgemeinen eine typische Doppel-EMA-Kreuzungsstrategie, die die Kreuzung zwischen verschiedenen EMA-Parametern nutzt, um die Kauf- und Verkaufsmomente des Marktes zu beurteilen. Sie gehört zu den mittleren und kurzen Handelsstrategien. Der größte Vorteil der Strategie besteht darin, dass die Signalfilterung mit quantitativen Indikatoren durchgeführt wird.

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