Zweimal zuverlässige Preisschwankung Quant Strategie

Schriftsteller:ChaoZhang, Datum: 2024-02-18 10:10:16
Tags:

img

Übersicht

Die Hauptidee dieser Strategie besteht darin, die 123 Reversal-Strategie und den Indikator für den absoluten Preis-Oszillator zu kombinieren, um ein integriertes Signal zu erhalten. Insbesondere, wenn beide Teilstrategien lange Signale emittieren, ist das endgültige Strategiesignal 1 (lang); wenn beide kurze Signale emittieren, ist das endgültige Signal -1 (kurz); wenn die Signale inkonsistent sind, ist das endgültige Signal 0 (keine Operation).

Grundsätze

Zunächst ist das Prinzip der 123 Reversal Strategie: Wenn der Schlusskurs zwei aufeinanderfolgende Tage unter dem Schlusskurs des vorherigen Tages liegt und der Stochastische Oszillator unter der Überkauflinie liegt, gehen Sie lang; wenn der Schlusskurs zwei aufeinanderfolgende Tage über dem Schlusskurs des vorherigen Tages liegt und der Stochastische Oszillator über der Überverkaufslinie liegt, gehen Sie kurz.

Zweitens zeigt der absolute Preis-Oszillator den Unterschied zwischen zwei exponentiellen gleitenden Durchschnitten an. Ein positiver Wert zeigt einen Aufwärtstrend an, während ein negativer Wert einen Abwärtstrend anzeigt.

Schließlich verbindet diese Strategie die Signale der beiden Teilstrategien, d. h. folgt dem Signal, wenn es einheitlich ist; ansonsten arbeitet man nicht.

Analyse der Vorteile

Diese Strategie berücksichtigt umfassend kurzfristige Umkehrsignale und mittel- bis langfristige Trendsignale, die Wendepunkte effektiv identifizieren können.

Darüber hinaus wird mit dieser Strategie mehrere technische Indikatoren verwendet, um den Markt umfassend zu beurteilen, anstatt sich auf einen einzigen zu stützen.

Risikoanalyse

Das größte Risiko besteht darin, wenn die 123 Reversal und APO widersprüchliche Signale emittieren. In solchen Fällen muss der Betreiber auf der Grundlage der Erfahrung beurteilen, welches Signal zuverlässiger ist. Falsche Urteile können zu fehlenden Handelsmöglichkeiten oder Verlusten führen.

Darüber hinaus können drastische Marktveränderungen die Signale beider Teilstrategien gleichzeitig ungültig machen.

Optimierung

Mögliche Optimierungsrichtungen:

  1. Optimierung der Parameter der Teilstrategie für zuverlässigere Signale, z. B. gleitende Durchschnittsperioden.

  2. Zusätzliche Hilfsindikatoren bilden einen Abstimmungsmechanismus, wobei einheitliche Signale aus mehreren Indikatoren zuverlässiger sind.

  3. Hinzufügen von Stop-Loss-Strategien.

  4. Optimierung der Einstiegs- und Stop-Loss-Levels auf der Grundlage historischer Backtests.

Schlussfolgerung

Diese Strategie kombiniert mehrere technische Indikatoren, um den Markt zu beurteilen, vermeidet bis zu einem gewissen Grad die Abhängigkeit von einzelnen Indikatoren und verbessert die Signalgenauigkeit.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 22/04/2019
// This is combo strategies for get 
// a cumulative signal. Result signal will return 1 if two strategies 
// is long, -1 if all strategies is short and 0 if signals of strategies is not equal.
//
// 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.
//
// Secon strategy
// The Absolute Price Oscillator displays the difference between two exponential 
// moving averages of a security's price and is expressed as an absolute value.
// How this indicator works
//    APO crossing above zero is considered bullish, while crossing below zero is bearish.
//    A positive indicator value indicates an upward movement, while negative readings 
//      signal a downward trend.
//    Divergences form when a new high or low in price is not confirmed by the Absolute Price 
//      Oscillator (APO). A bullish divergence forms when price make a lower low, but the APO 
//      forms a higher low. This indicates less downward momentum that could foreshadow a bullish 
//      reversal. A bearish divergence forms when price makes a higher high, but the APO forms a 
//      lower high. This shows less upward momentum that could foreshadow a bearish reversal.
//
// 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

AbsolutePriceOscillator(LengthShortEMA, LengthLongEMA) =>
    xPrice = close
    xShortEMA = ema(xPrice, LengthShortEMA)
    xLongEMA = ema(xPrice, LengthLongEMA)
    xAPO = xShortEMA - xLongEMA
    pos = 0.0    
    pos := iff(xAPO > 0, 1,
           iff(xAPO < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal and Absolute Price Oscillator (APO)", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
LengthShortEMA = input(10, minval=1)
LengthLongEMA = input(20, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posAbsolutePriceOscillator = AbsolutePriceOscillator(LengthShortEMA, LengthLongEMA)
pos = iff(posReversal123 == 1 and posAbsolutePriceOscillator == 1 , 1,
	   iff(posReversal123 == -1 and posAbsolutePriceOscillator == -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 ? red: possig == 1 ? green : blue ) 

Mehr