
Die Abweichungs-Matrix-Trend-Follow-Strategie ist eine quantitative Handelsstrategie, die Trends, Abweichungen und Gleichgewichte kombiniert. Die Strategie verwendet die doppelte RSI-Anzeige, um die Richtung der Markttrends zu bestimmen, und setzt ein Einstiegssignal in Verbindung mit der Matrix-Gleichgewicht. Die Matrix-Gleichgewichtung passt die Positionsgröße an die Abweichung des Preises an.
Die Abweichungs-Matrix-Trendfollow-Strategie besteht hauptsächlich aus folgenden Teilen:
Der schnelle RSI und der langsame RSI werden verwendet, um die Richtung des Markttrends zu bestimmen. Wenn der schnelle RSI überkauft oder überverkauft wird, wird der langsame RSI in Verbindung mit dem schnellen RSI verwendet, um die Richtung des Trends zu bestimmen.
Setzen Sie eine Reihe von Matrix-Mitteln für den Eintrittspreis und passen Sie die Position entsprechend an, wenn der Preis eine bestimmte Mittellinie erreicht. So können Sie mehr in der Tendenz profitieren.
Der Default ist ein Zwei-Wege-Trading.
Die Transaktionslogik lautet wie folgt:
Der schnelle RSI wird verwendet, um zu beurteilen, ob der Markt vorübergehend überkauft oder überverkauft ist.
Der langsame RSI wird verwendet, um die mittelfristige Trendrichtung des Marktes zu bestimmen.
Wenn der schnelle RSI überkauft und überverkauft wird und der langsame RSI eine Trendwende zeigt, wird die Position in die entsprechende Richtung auf der Grundlage des überflüssigen Urteils des langsamen RSI genommen.
Nach dem Aufbau der Hütte wird eine Matrix-Gewinnlinie eingestellt. Diese Matrix-Gewinnlinie umschließt die Einstiegspreis-Einstellung, wobei die Abstandsgröße durch den Prozentsatz der Zinsparameter zwischen den Zins-Matrix-Abschnitten festgelegt wird.
Wenn der Preis die Durchschnittslinie der Matrix berührt, wird die Haltungsmenge entsprechend angepasst. Wenn die Durchschnittslinie nach oben überschritten wird, werden mehr Aufträge hinzugefügt. Wenn sie nach unten überschritten wird, werden die leeren Aufträge reduziert.
Bei größeren Preisveränderungen werden die Positionen wieder auf das ursprüngliche Niveau gesetzt.
Das ist die wichtigste Handelslogik dieser Strategie. Durch die Matrix-Gewinnlinie können Sie mehr Gewinne im Trend sperren.
Eine Abweichmatrix-Trendfollow-Strategie hat folgende Vorteile:
Der Doppel-RSI ist ein zuverlässigerer Signal. Der schnelle RSI verhindert falsche Durchbrüche, während der langsame RSI sicherstellt, dass der große Trend korrekt ist.
Die Matrix-Gewinnlinie verfolgt Trends. Die Positionen werden entsprechend der Abweichung von den Preisen angepasst, um fortlaufend zu profitieren.
Zwei-Wege-Trading unterstützt. Zwei-Wege-Trading ist die Standard-Trading-Funktion.
Positionsrücksetzungsmechanismus Risikokontrolle. Positionsrücksetzungen können bei einer deutlichen Kursänderung zum Zeitpunkt der Verluststopps eingeleitet werden.
Die Parameter sind flexibel eingestellt. Der Benutzer kann die optimale Parameterkombination auswählen, die auf historischen Daten, Transaktionsarten usw. basiert.
Die Code-Struktur ist klar. Die Verantwortlichkeiten der einzelnen Bereiche sind klar unterteilt und leicht zu verstehen, zu optimieren und zu erweitern.
Insgesamt besteht der größte Vorteil dieser Strategie darin, dass mehrere Mechanismen zur Verbesserung der Signalqualität eingesetzt werden, um höhere Gewinne zu erzielen, während Risiken kontrolliert werden. Es ist eine risikobasierte Handelsstrategie.
Es gibt einige Risiken, die mit einer Abweichungs-Matrix-Strategie verbunden sind, die sich auf folgende Punkte konzentrieren:
Der Binäre RSI beurteilt das Ausfallrisiko. Der RSI sendet oft falsche Signale aus, wenn der Markt in einer Erschütterungskorrektur ist. Dies erfordert eine Prüfung der Zeit, eine angemessene Anpassung der Parameter oder eine Aussetzung des Handels.
Die Matrix-Gleichgewichtsmethode ist nicht geeignet. Wenn die Matrix-Parameter nicht richtig eingestellt sind, kann die Positionsanpassung zu radikal sein, was die Verluste erhöht. Die Parameter müssen sorgfältig getestet werden.
Eine übermäßige Position erhöht das Risiko. Eine übermäßige Anpassung der Positionsbreite führt auch zu einer Vergrößerung der Verluste. Die Parameter der maximalen Position müssen sorgfältig eingestellt werden.
Trendwechselrisiko. Wenn ein Trendwechsel eintritt, kann ein großer Verlust entstehen, wenn die Position nicht rechtzeitig ausgeschaltet wird. Dies erfordert die Aufmerksamkeit auf Trendindikatoren mit längerer Periode.
Die Strategie ist mittlerweile ausgereift, und es gibt nur begrenzte Möglichkeiten für weitere Optimierungen. Die gesamte Handelslogik muss neu bewertet werden, wenn sich die Marktumgebung stark verändert.
Die Bewertung und Optimierung von Strategien ist der Schlüssel zur Verringerung dieser Risiken. Maßnahmen wie die Anpassung der Parameterkombination und die Überwachung von langen Zyklusindikatoren können zu einem gewissen Grad Risiken vermeiden.
Es gibt noch mehr Optimierungsmöglichkeiten für Trends im Abweichungsmatrix:
Optimieren Sie die doppelte RSI-Parameter. Sie können weitere Parameterkombinationen testen, um die genaueste RSI-Zykluswerte zu ermitteln.
Benutzerdefinierte Matrix-Mittelwert-Einstellungen. Sie ermöglichen dem Benutzer, die Matrix-Mittelwert-Einstellungen nach den Parametern der verschiedenen Sorten anzupassen, um sie den Merkmalen der Sorte anzupassen.
Erhöhung der Stop-Loss-Mechanismen. Zum Beispiel wird die Off-Median-Linie festgelegt, die dann gestoppt wird, wenn der Preis unter diese liegt.
Erhöhung der Positionsverhältnisregelung. Wissenschaftlichere und vernünftigere Anpassung der Positionsgröße und -geschwindigkeit, um eine übermäßige Positionsvergrößerung zu verhindern.
In Kombination mit anderen Indikatoren können weitere Indikatoren wie MACD, KD und andere zur Unterstützung der Beurteilung eingeführt werden, um die Signalgenauigkeit zu verbessern.
Optimierung der Code-Struktur. Fortsetzung der Verbesserung der Erweiterbarkeit, Wartbarkeit und Ausführbarkeit des Codes.
Die Abweichungsmatrix-Trendfollow-Strategie ist eine quantitative Handelsstrategie mit einer Vielzahl von Mechanismen. Sie verwendet hauptsächlich die Methode, die Trendrichtung durch den Doppel-RSI beurteilt und die Trendgewinnung durch die Matrix-Einheitslinie verfolgt. Im Vergleich zu einer einzelnen Indikatorstrategie kann die Strategie ein stabileres und effizienteres Handelssignal liefern. Durch die Anpassung und Optimierung von Parametern kann die Strategie an mehr verschiedene Marktumgebungen angepasst werden und hat eine starke Anwendbarkeit.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("The Matrix 7.0 Strategy", overlay=false)
//Matrix Settings
entry_size = input(title="Entry Size", defval = 1)
max_size = input(title="Max Size", defval = 10000)
matrix = input(title="Matrix Interval %", defval = 2)
matrix_price_overwrite = input(title="Matrix Overwrite $", defval = 0.0)
adjustment = input(title="Adjustment Size", defval = 1000)
trade_short = input(title="Trade Short", type=bool, defval = true)
//RSI Settings
periods = input(title="RSI Periods", defval = 14)
overbought_short = input(title="RSI Overbought", defval = 65)
oversold_short = input(title="RSI Oversold", defval = 30)
//RSI Trend Settings
resolution_long = input(title="Resolution Trend", defval = "D")
periods_long = input(title="RSI Trend Periods", defval = 14)
overbought_long = input(title="RSI Trend Overbought", defval = 64)
oversold_long = input(title="RSI Trend Oversold", defval = 30)
//Round Off to 2 decimals
round2(x) =>
a = x * 10 * 10
a := floor(a + 0.5)
a := a / 10 / 10
a
//RSI Function
RSI = rsi(close, periods)
//RSI Market Function
rsi_oversold = RSI < oversold_short
rsi_overbought = RSI > overbought_short
market_rsi = 0.0
market_rsi := if (rsi_oversold)
RSI - oversold_short
else
if (rsi_overbought)
RSI - overbought_short
else
0
//RSI Trend Function
rsi_long = request.security(syminfo.tickerid,resolution_long,rsi(close,periods_long))
trend_rsi_long = rsi_long < oversold_long
trend_rsi_short = rsi_long > overbought_long
trend_rsi = 0
trend_rsi := if (trend_rsi_short)
-1
else
if (trend_rsi_long)
1
else
trend_rsi[1]
// // Shorter time resolution to make "close" crosses give faster positives.
// short_resolution = security(tickerid, "1", close)
// quick = round2(short_resolution) //ROUND OFF TO 2 DECIMAL PLACES.
//Declare Other Variables
entry_price = 0.0
entry_price := nz(entry_price[1])
position_size = 0.0
position_size := nz(position_size[1])
last_traded_price = 0.0
last_traded_price := nz(last_traded_price[1])
matrix_price = 0.0
if matrix_price_overwrite > 0.0
matrix_price := matrix_price_overwrite
else
matrix_price := round2((matrix/100) * entry_price)
level = 0
level := nz(level[1])
level_price = entry_price
if not na(level_price[1])
level_price := level_price[1]
// Calculate Level
if close > level_price
level_change = floor((high - level_price)/matrix_price)
level := level + level_change
else
if close < level_price
level_change = ceil((low - level_price)/matrix_price)
level := level + level_change
// Calculate Level Price
level_price := (level * matrix_price) + entry_price
// Calculate Matrix Position
matrix_position = 0.0
if position_size > 0
matrix_position := ((-1 * level) * adjustment) + entry_size
else
if position_size < 0
matrix_position := ((-1 * level) * adjustment) - entry_size
//Trend Entry or Reversal Conditions
trend_reversal_up = trend_rsi == 1 and (trend_rsi[1] == -1 or trend_rsi == 0) and position_size <= 0
trend_reversal_down = trend_rsi == -1 and (trend_rsi[1] == 1 or trend_rsi == 0) and position_size >= 0 and trade_short == true
flatten_position = trend_rsi == -1 and (trend_rsi[1] == 1 or trend_rsi == 0) and position_size >= 0 and trade_short == false
//Reset Conditions
reset_long = (position_size > 0) and (close - entry_price > matrix_price) and (market_rsi < 0) and (position_size != entry_size)
reset_short = (position_size < 0) and (entry_price - close > matrix_price) and (market_rsi > 0) and (position_size != (-1 * entry_size))
//Adjustment Conditions
increase_long = (position_size > 0) and (matrix_position > position_size) and (market_rsi < 0) and (matrix_position <= max_size)
decrease_long = (position_size > 0) and (matrix_position < position_size) and (market_rsi > 0)
increase_short = (position_size < 0) and (matrix_position < position_size) and (market_rsi > 0) and (matrix_position >= (-1 * max_size))
decrease_short = (position_size < 0) and (matrix_position > position_size) and (market_rsi < 0)
//Transactions
//Trend Reversals
if trend_reversal_up
strategy.entry("OL", strategy.long, qty=entry_size)
position_size := entry_size
matrix_position := entry_size
level := 0
else
if trend_reversal_down
strategy.entry("OS", strategy.short, qty=entry_size)
position_size := -1 * entry_size
matrix_position := -1 * entry_size
level := 0
//Reset Positions
else
if reset_long
order = entry_size - position_size[1]
strategy.order("RL", strategy.long, qty=order)
position_size := entry_size
matrix_position := entry_size
level := 0
else
if reset_short
order = position_size[1] - (-1* entry_size)
strategy.order("RS", strategy.short, qty=order)
position_size := -1 * entry_size
matrix_position := -1 * entry_size
level := 0
//Position Adjustments
else
if increase_long
order = matrix_position - position_size[1]
strategy.order("IL", strategy.long, qty=order)
position_size := position_size[1] + order
else
if decrease_long
order = position_size[1] - matrix_position
strategy.order("DL", strategy.short, qty=order)
position_size := position_size[1] - order
else
if increase_short
order = position_size[1] - matrix_position
strategy.order("IS", strategy.short, qty=order)
position_size := position_size[1] - order
else
if decrease_short
order = matrix_position - position_size[1]
strategy.order("DS", strategy.long, qty=order)
position_size := position_size[1] + order
else
if flatten_position
strategy.close_all()
position_size := 0.0
matrix_position := 0.0
level := 0
//Grouped Actions
if trend_reversal_up or trend_reversal_down or reset_short or reset_long
entry_price := round2(close)
last_traded_price := round2(close)
if increase_long or decrease_long or increase_short or decrease_short
last_traded_price := round2(close)
// //RSI Trend & Adjustment Moments. (strategy)
p1 = plot(market_rsi, color = trend_rsi > 0 ? green : red, linewidth = 4, title='Market', transp =0)
p2 = plot(trend_rsi, color = trend_rsi > 0 ? green : red, linewidth = 4, title='Trend', transp = 0)
fill(p1,p2, color=trend_rsi > 0 ? green : red, transp=0)
p3 = plot((rsi_long - 50) *2, color = white, title="Trend Index")
fill(p2,p3, color=white)
hline((overbought_long -50) * 2)
hline((oversold_long -50) * 2)
//Position Plots (strategy)
plot(matrix_position / 100, title='Matrix', color=white, linewidth = 4)
plot(position_size / 100, title='Position', color=blue, linewidth = 4)
plot(strategy.position_size / 100, title='Strategy', color=orange, linewidth = 4)
// //Price Plots (study)
// plot(level_price, title="Matrix Level Price", linewidth=4)
// plot(last_traded_price, title="Last Traded Price", linewidth=2, color=orange)
// plot(entry_price + (4 * matrix_price), title='Adjustment 4', color=white, linewidth = 1)
// plot(entry_price + (3 * matrix_price), title='Adjustment 3', color=white, linewidth = 1)
// plot(entry_price + (2 * matrix_price), title='Adjustment 2', color=white, linewidth = 1)
// plot(entry_price + matrix_price, title='Adjustment 1', color=white, linewidth = 1)
// plot(entry_price, title='Entry Price', color=white, linewidth = 3)
// plot(entry_price - matrix_price, title='Adjustment -1', color=white, linewidth = 1)
// plot(entry_price - (2 * matrix_price), title='Adjustment -2', color=white, linewidth = 1)
// plot(entry_price - (3 * matrix_price), title='Adjustment -3', color=white, linewidth = 1)
// plot(entry_price - (4 * matrix_price), title='Adjustment -4', color=white, linewidth = 1)
// //Alerts (study only)
// alertcondition(trend_reversal_up, title='Trend Reversal Up', message='Market Oversold, Lets Buy')
// alertcondition(trend_reversal_down, title='Trend Reversal Down', message='Market Overbought, Lets Sell')
// alertcondition(reset_long, title='Reset Long', message='Higher Bottom, Lets Buy')
// alertcondition(reset_short, title='Reset Short', message='Lower Top, Lets Sell')
// alertcondition(increase_long, title='Increase Long', message='Price Dropped, Lets Buy')
// alertcondition(decrease_long, title='Decrease Long', message='Price Spiked, Lets Sell')
// alertcondition(increase_short, title='Increase Short', message='Price Spiked, Lets Sell')
// alertcondition(decrease_short, title='Decrease Short', message='Price Dropped, Lets Buy')
// //Grouped Conditions
// condition_buy = trend_reversal_up or increase_long or decrease_short or reset_long
// condition_sell = trend_reversal_down or decrease_long or increase_short or reset_short
// adjustment_matrix = trend_reversal_up or increase_long or decrease_short or trend_reversal_down or decrease_long or increase_short or reset_long or reset_short
// //Grouped Alerts
// alertcondition(condition_buy, title='Condition Buy', message='You Need to Buy')
// alertcondition(condition_sell, title='Condition Sell', message='You Need to Sell!')
// alertcondition(adjustment_matrix, title='Adjustment Matrix', message='You Need to Adjust')