
Die Binary Average Reversal Tracking Strategie ist eine quantitative Trading-Strategie, die Moving Average Crossover als Handelssignal verwendet. Die Strategie kombiniert die schnelle und langsame Durchschnittsdifferenz des MACD-Indikators mit seiner Signallinie und der positiven Verhältnisberechnung des Transaktionsvolumens zu einem Handelssignal, um eine Marktumkehr zu erfassen.
Die Strategie beurteilt hauptsächlich die Beziehung zwischen schneller und langsamer Linie, indem sie mehrere Signale erzeugt, wenn die schnelle Linie die langsame Linie durchläuft, und unterhalb der schnellen Linie wird ein Leerlaufsignal erzeugt. Darüber hinaus wird die Leerlauflage des Marktes in Kombination mit der Leerlauflage des MACD-Differenzwerts, der Beziehung zwischen der Leerlauflage und der Signallinie und der Leerlauflage der Transaktionsmenge beurteilt.
Konkret beurteilt die Strategie die Größe und Richtung der MACD-Differenz, die Kreuzung der Differenz und der Signallinie, die Übereinstimmung oder Gegensatz zwischen der Differenz und der Signallinie. Diese Situationen spiegeln die Subidabubb-Ripp-Reball-Charakteristik des Marktes wider. Zusätzlich kann die hohere Verteilung der Transaktionsmenge als Hilfsindikator verwendet werden.
Eine Handelsstrategie wird erstellt, wenn die Differenz und die Signallinie ein Marktausweißsignal zeigen und die Transaktionsmenge bestätigt, dass der Markt sich umkehrt.
Doppel-Eigen-Kreuzung verursacht Whipsaw-Probleme
Der Umsatz konnte nicht vollständig durch den Fake-Break filtern.
Unmöglichkeit, die Tiefe und Stärke der Subsection-Anpassung zu beurteilen
Mit Hilfe von maschinellen Lernmodellen statt mit Regeln
Erhöhung der Stop-Loss-Technik
Mit Emotionsindikatoren und Nachrichtenseitenanalyse
Transplantation in andere Sorten und Märkte
Die Doppel-Gleichgewichtsumkehr-Tracking-Strategie berücksichtigt die Gleichgewichts-, MACD- und Transaktionsmenge-Indikatoren und erstellt eine Position, indem sie das Umkehrsignal erfasst und den geeigneten Umkehrpunkt auswählt. Es gibt noch viel Spielraum für die Optimierung der Strategie, um die Strategie-Stabilität und die Ertragsrate durch maschinelle Lern- und Wind-Control-Methoden weiter zu verbessern.
/*backtest
start: 2024-01-20 00:00:00
end: 2024-02-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("3 10 Oscillator Profile Flagging", shorttitle="3 10 Oscillator Profile Flagging", overlay=true)
signalBiasValue = input(title="Signal Bias", defval=0.26)
macdBiasValue = input(title="MACD Bias", defval=0.8)
shortLookBack = input( title="Short LookBack", defval=3)
longLookBack = input( title="Long LookBack", defval=10)
fast_ma = ta.sma(close, 3)
slow_ma = ta.sma(close, 10)
macd = fast_ma - slow_ma
signal = ta.sma(macd, 16)
hline(0, "Zero Line", color = color.black)
buyVolume = volume*((close-low)/(high-low))
sellVolume = volume*((high-close)/(high-low))
buyVolSlope = buyVolume - buyVolume[1]
sellVolSlope = sellVolume - sellVolume[1]
signalSlope = ( signal - signal[1] )
macdSlope = ( macd - macd[1] )
//plot(macdSlope, color=color.red, title="Total Volume")
//plot(signalSlope, color=color.green, title="Total Volume")
intrabarRange = high - low
getLookBackSlope(lookBack) => signal - signal[lookBack]
getBuyerVolBias(lookBack) =>
j = 0
for i = 1 to lookBack
if buyVolume[i] > sellVolume[i]
j += 1
j
getSellerVolBias(lookBack) =>
j = 0
for i = 1 to lookBack
if sellVolume[i] > buyVolume[i]
j += 1
j
getVolBias(lookBack) =>
float b = 0
float s = 0
for i = 1 to lookBack
b += buyVolume[i]
s += sellVolume[i]
b > s
getSignalBuyerBias(lookBack) =>
j = 0
for i = 1 to lookBack
if signal[i] > signalBiasValue
j += 1
j
getSignalSellerBias(lookBack) =>
j = 0
for i = 1 to lookBack
if signal[i] < ( 0 - signalBiasValue )
j += 1
j
getSignalNoBias(lookBack) =>
j = 0
for i = 1 to lookBack
if signal[i] < signalBiasValue and signal[i] > ( 0 - signalBiasValue )
j += 1
j
getPriceRising(lookBack) =>
j = 0
for i = 1 to lookBack
if close[i] > close[i + 1]
j += 1
j
getPriceFalling(lookBack) =>
j = 0
for i = 1 to lookBack
if close[i] < close[i + 1]
j += 1
j
getRangeNarrowing(lookBack) =>
j = 0
for i = 1 to lookBack
if intrabarRange[i] < intrabarRange[i + 1]
j+= 1
j
getRangeBroadening(lookBack) =>
j = 0
for i = 1 to lookBack
if intrabarRange[i] > intrabarRange[i + 1]
j+= 1
j
bool isNegativeSignalReversal = signalSlope < 0 and signalSlope[1] > 0
bool isNegativeMacdReversal = macdSlope < 0 and macdSlope[1] > 0
bool isPositiveSignalReversal = signalSlope > 0 and signalSlope[1] < 0
bool isPositiveMacdReversal = macdSlope > 0 and macdSlope[1] < 0
bool hasBearInversion = signalSlope > 0 and macdSlope < 0
bool hasBullInversion = signalSlope < 0 and macdSlope > 0
bool hasSignalBias = math.abs(signal) >= signalBiasValue
bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0 - signalBiasValue )
bool hasSignalBuyerBias = hasSignalBias and signal > 0
bool hasSignalSellerBias = hasSignalBias and signal < 0
bool hasPositiveMACDBias = macd > macdBiasValue
bool hasNegativeMACDBias = macd < ( 0 - macdBiasValue )
bool hasBullAntiPattern = ta.crossunder(macd, signal)
bool hasBearAntiPattern = ta.crossover(macd, signal)
bool hasSignificantBuyerVolBias = buyVolume > ( sellVolume * 1.5 )
bool hasSignificantSellerVolBias = sellVolume > ( buyVolume * 1.5 )
// 7.48 Profit 52.5%
if ( hasSignificantBuyerVolBias and getPriceRising(shortLookBack) == shortLookBack and getBuyerVolBias(shortLookBack) == shortLookBack and hasPositiveMACDBias and hasBullInversion)
strategy.entry("Short1", strategy.short)
strategy.exit("TPS", "Short1", limit=strategy.position_avg_price - 0.75, stop=strategy.position_avg_price + 0.5)
// 32.53 Profit 47.91%
if ( getPriceFalling(shortLookBack) and (getVolBias(shortLookBack) == false) and signalSlope < 0 and hasSignalSellerBias)
strategy.entry("Long1", strategy.long)
strategy.exit("TPS", "Long1", limit=strategy.position_avg_price + 0.75, stop=strategy.position_avg_price - 0.5)