Handelsstrategie zur Umkehrung der Dynamik

Schriftsteller:ChaoZhang, Datum: 2023-11-15
Tags:

img

Übersicht

Diese Strategie kombiniert das 123 Umkehrmuster und die Ease of Movement (EOM) zum Handel an Wendepunkten. Das 123 Umkehrmuster erzeugt Signale, wenn der Preis über 3 aufeinanderfolgende Tage bestimmte Muster bildet. Die EOM-Strategie nutzt Veränderungen in Preis und Volumen, um die Marktdynamik zu messen. Die Kombination beider Strategien berücksichtigt technische Muster sowie die Dynamik und verbessert die Genauigkeit der Handelssignale.

Strategie Logik

Die Strategie besteht aus zwei Bestandteilen:

  1. 123 Umkehrmuster
  • Verwenden Sie Stoch, um überkaufte und überverkaufte Niveaus zu ermitteln
  • Gehen Sie kurz, wenn der Preis für 2 aufeinanderfolgende Tage fällt und die Stoch-Schnelllinie über der langsamen Linie liegt
  • Gehen Sie lang, wenn der Preis steigt für 2 aufeinanderfolgende Tage und Stoch schnelle Linie ist unter der langsamen Linie
  1. Bewegungsfreiheit
  • Berechnung des Mittelpunkts des Vortagsbereichs
  • Berechnung der Veränderung des Mittelpunktes gegenüber dem Vortag
  • Berechnung des Verhältnisses zwischen Mittelpunktbewegung und Volumen
  • Überschreitung der Schwelle zeigt Aufwärts, unterhalb der Schwelle niedrig

Die Strategie geht lang, wenn EOM und 123 Signale auf der langen Seite ausgerichtet sind, und geht kurz, wenn Signale auf der kurzen Seite ausgerichtet sind.

Analyse der Vorteile

Die Vorteile dieser Strategie:

  1. Kombination von Preismustern und Dynamik für eine bessere Signalgenauigkeit

  2. 123 Musterfängnisse Wendepunkte, EOM Messgeräte Trendmomentum, zwei ergänzen sich

  3. Stoch vermeidet Schlagzeilen bei der Konsolidierung

  4. Einfach und einfach umzusetzen

  5. Anpassbare Parameter für verschiedene Marktumgebungen

Risikoanalyse

Die zu berücksichtigenden Risiken:

  1. Übermäßige Abhängigkeit von Parameter-Einstellungen, unsachgemäße Einstellungen können zu Über- oder fehlenden Trades führen

  2. Viele Filter können zu wenige Signale erzeugen

  3. EOM ist anfällig für Volatilität, kann falsche Signale erzeugen

  4. Live-Leistung schwächer als Backtest, muss die Positionsgröße kontrollieren

  5. Nur für Trendbestände geeignet, nicht für Marktbereiche

Verbesserungsrichtlinien

Die Strategie kann verbessert werden, indem

  1. Optimierung von Parametern zur Ausgewogenheit von Signalfrequenz und -qualität

  2. Hinzufügen von Stop Loss zur Kontrolle von Einzelhandelsverlusten

  3. Hinzufügen eines Trendfilters zur Vermeidung von Gegentrends

  4. Einbeziehung einer auf Volatilität basierenden Positionsgröße

  5. Die Verwendung von maschinellem Lernen zur dynamischen Optimierung von Parametern

Schlussfolgerung

Diese Strategie integriert Preismuster und Dynamik für einen hohen praktischen Wert. Aber Handelsfrequenz, Verlustkontrolle und Gegentrendrisiken müssen verwaltet werden. Weitere Verbesserungen der Parameter, Stop-Loss, Trendfilterung können Stabilität und Rentabilität verbessern. Die Logik ist für Quant-Händler klar und einfach umzusetzen.


/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 14/04/2020
// 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
// This indicator gauges the magnitude of price and volume movement. 
// The indicator returns both positive and negative values where a 
// positive value means the market has moved up from yesterday's value 
// and a negative value means the market has moved down. A large positive 
// or large negative value indicates a large move in price and/or lighter 
// volume. A small positive or small negative value indicates a small move 
// in price and/or heavier volume.
// A positive or negative numeric value. A positive value means the market 
// has moved up from yesterday's value, whereas, a negative value means the 
// market has moved down. 
//
// 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

EOM(BuyZone, SellZone) =>
    pos = 0
    xHigh = high
    xLow = low
    xVolume = volume
    xHalfRange = (xHigh - xLow) * 0.5
    xMidpointMove = mom(xHalfRange, 1)
    xBoxRatio = iff((xHigh - xLow) != 0, xVolume / (xHigh - xLow), 0)
    nRes = iff(xBoxRatio != 0, 1000000 * ((xMidpointMove - xMidpointMove[1]) / xBoxRatio), 0)
    pos := iff(nRes > BuyZone, 1,
             iff(nRes < SellZone, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Ease of Movement (EOM)", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
BuyZone = input(4000, minval=1)
SellZone = input(-4000)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posEOM = EOM(BuyZone, SellZone)
pos = iff(posReversal123 == 1 and posEOM == 1 , 1,
	   iff(posReversal123 == -1 and posEOM == -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 )

Mehr