Relative Pen Gain Moving Average Crossover-Strategie


Erstellungsdatum: 2023-10-18 11:16:53 zuletzt geändert: 2023-10-18 11:16:53
Kopie: 0 Klicks: 644
1
konzentrieren Sie sich auf
1617
Anhänger

Relative Pen Gain Moving Average Crossover-Strategie

Überblick

Die Strategie nutzt die Trendwahrnehmung und den automatischen Handel mit Stop-Loss- und Stop-Stopp-Signalen, die hauptsächlich aus dem Quadratmeter-Quadratmeter-Verhältnis der Tageslinie (RB) bestehen. Der Quadratmeter-Quadratmeter-Quadratmeter im Namen der Strategie bezeichnet den Quadratmeter-Quadratmeter-Quadratmeter, der für die Berechnung des Quadratmeter-Quadratmeter-Quadratmeter-Quadratmeters verwendet wird.

Strategieprinzip

Die Strategie basiert auf Vitelots RBI-Indikator, der den Moving Average der Relativ-Body-Ratio (RB) der Tages-K-Linie berechnet. Die Berechnung des RB erfolgt wie folgt:

In der Formel ist RB gleich dem Verhältnis der Einheitslänge der Y-Straße zur Länge der ganzen K-Straße, wobei der positive Wert; der negative Wert der Y-Straße. Der Wertbereich der RB liegt zwischen -1 und 1 [2].

Der RBI-Indikator filtert die Geräusche durch den Moving Average des RBI und fängt die wesentlichen Merkmale des Marktes ein. Es erzeugt ein Kaufsignal, wenn der RBI-Indikator über seine Signallinie geht. Es erzeugt ein Verkaufsignal, wenn der RBI-Indikator unter seine Signallinie geht.

Um falsche Signale aus mehrköpfigen Unsicherheitsphasen zu filtern, wird die Strategie auch beurteilt, ob der Schlusskurs über der 13-Zyklus-EMA-Mittellinie liegt, wenn er auf dem RBI-Indikator durchläuft. Wenn er höher ist, um ein echtes Kaufsignal zu erzeugen, wird die Multi-Head-Strategie ausgeführt.

Die Strategie bietet außerdem Stop-Loss- und Stop-Stopp-Mechanismen, um Risiken zu kontrollieren und Gewinne zu sichern.

Analyse der Stärken

  • Die RBI-Indikatoren filtern die große Menge an Geräuschen, um die Merkmale von Markttrends zu erfassen und zu vermeiden, dass sie von den falschen Signalen eines erschütternden Marktes getäuscht werden.

  • In Kombination mit einer einheitlichen Filterung verhindert es die falschen Signale in mehreren unsicheren Zeiten und reduziert die Lüftungsschäden.

  • Die Stop-Loss-Stopp-Einstellung hilft dabei, das Verlustrisiko für einzelne Positionen zu senken und gleichzeitig die Gewinne zu sperren und die Gewinnrate insgesamt zu erhöhen.

  • Die Strategie hat weniger Parameter, ist leicht verständlich und eignet sich für den automatisierten Handel.

Risikoanalyse

  • Die Strategie basiert nur auf den RBI-Indikatoren, und wenn die Indikatoren selbst ein falsches Signal erzeugen, wird die Gesamtstrategie auch fehlschlagen.

  • Die falsche Einstellung der Indikatorparameter kann auch zu einer verminderten Qualität der Handelssignale führen.

  • Jeder technische Indikator kann unter bestimmten Marktbedingungen ausfallen und Verluste nicht vollständig vermeiden.

  • Eine zu kleine Stop-Loss-Einstellung kann zu häufigen Stop-Losses führen; eine zu große Stop-Loss-Einstellung kann den Einzelschaden ausweiten.

  • Die Rücknahme einer unzureichenden Kontrolle kann zu einem Ausbruch der Kontoposition führen.

Optimierungsrichtung

  • Verschiedene Kombinationen von Parametern können getestet werden, um die Parameter für die RBI-Indikatoren zu optimieren.

  • Es können weitere Hilfsindikatoren gefiltert werden, um die Signalqualität zu verbessern.

  • Parameter, die durch Maschinelles Lernen optimiert werden können.

  • Sie können sich an einer Geldmanagementstrategie beteiligen, um die Gesamtposition und die Risikobereitschaft zu kontrollieren.

  • Versuchen Sie mit verschiedenen Strategien, wie z. B. Übernachtungen oder Short-Line-Handel.

Zusammenfassen

Die Strategie ist insgesamt eine einfache und direkte Trend-Tracking-Strategie. Durch die Berechnung der Tageslinie gegenüber dem Pen-Body-Ratio wird die Trendrichtung durch die Berechnung der Gleichgewichtskreuzung beurteilt, während die Gleichgewicht-Filterung und die Stop-Loss-Strategie zur Risikokontrolle hinzugefügt werden, wodurch ein falsches Signal des Schwingungsmarktes wirksam vermieden werden kann.

Strategiequellcode
/*backtest
start: 2022-10-11 00:00:00
end: 2023-10-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("RBI Backtest /w TSSL", shorttitle="RBI Strategy", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 10000, slippage = 5)
// RBI:
//  The EMA of the relative body (RB) of Japanese candles is evaluated.
//  The RB of a candle (my definition) is simply the ratio of the body with respect to its full length
//  and taken positive for bull candles and negative for bear candles:
//      e.g. a bull "marubozo" has RB=1 a bear "marubozo" has RB=-1;
//      a "doji" has RB=0.
//  This simple indicator grasps the essence of the market by filtering out a great deal of noise.
//
//  A flag can be selected to calculate its very basic binary version, where a bull candle counts as a one
//  and a bear candle counts as a minus one.
//
//  Enter (or exit) the market when the signal line crosses the base line.
//  When the market is choppy we have a kind of alternating bear and bull candles so that
//  RBI is FLAT and usually close to zero. 
//  Therefore avoid entering the market when RBI is FLAT and INSIDE the Exclusion level.
//  The exclusion level is to be set by hand: go back in history and check when market was choppy; a good
//  way to set it is to frame the oscillations of RBI whe price was choppy.
//
//  RBI is more effective when an EMA of price is used as filtering. I found EMA(13) to be
//  a decent filter: go long when base crosses signal upwards AND closing price is above EMA(13);
//  same concept for going short.
//
//  As any other indicator, use it with responsibility: THERE CAN'T BE A SINGLE MAGIC INDICATOR winning
//  all trades.
//
//  Above all, have fun.
//
// Vitelot/Yanez/Vts March 31, 2019

par1 = input(5, title="MA1 Period")
par2 = input(5, title="Signal Period")
exclusion = input(0.2, title="Exclusion level")

useBin = input(false, title="Calculate the binary version")

treshold_long = input(0, title="Treshold Long")
treshold_short = input(0, title="Treshold Short")

fixedSL = input(title="SL Activation", defval=300)
trailSL = input(title="SL Trigger", defval=1)
fixedTP = input(title="TP Activation", defval=120)
trailTP = input(title="TP Trigger", defval=1)

FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 6, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 19, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
startTimeOk()  => true // create function "within window of time" if statement true

ynSimple(t) =>
    s = (close>open)? 1: -1
    ema(sum(s,t),t)

ynRel(t) =>
    s = (close-open)/(high-low)
    ema(sum(s,t),t)

yn = useBin? ynSimple(par1): ynRel(par1) 
sig = ema(yn,par2)


plot(yn, color=aqua, title="RBI", linewidth=3, transp=0)
plot(sig, color=orange, title="Signal", linewidth=2, transp=0)

hline(0, color=white, title="Zero level", editable=false)
hline(exclusion, color=yellow, title="Exclusion level +", editable=true, linestyle=line)
hline( 0-exclusion, color=yellow, title="Exclusion level -", editable=true, linestyle=line)

long = crossover(yn,sig) and yn < treshold_long
short = crossover(sig,yn)  and yn > treshold_short

// === STRATEGY - LONG POSITION EXECUTION ===
strategy.entry("Long", strategy.long, when= long and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP) 
strategy.exit("Exit", when= short)
// === STRATEGY - SHORT POSITION EXECUTION ===
strategy.entry("Short", strategy.short, when= short and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP)
strategy.exit("Exit", when= long)