Yin-Yang-Zweispur-Trendhandelsstrategie basierend auf RSI und Handelsvolumen


Erstellungsdatum: 2023-12-22 14:29:05 zuletzt geändert: 2023-12-22 14:29:05
Kopie: 1 Klicks: 747
1
konzentrieren Sie sich auf
1621
Anhänger

Yin-Yang-Zweispur-Trendhandelsstrategie basierend auf RSI und Handelsvolumen

Überblick

Die Strategie ist eine Strategie, die eine Kombination aus Relative Strength Index (RSI) und Handelsvolumen verwendet, um die Richtung des Trends zu erkennen und den Trend zu verfolgen. Die Schlüsselpunkte sind:

  1. Mittlere Achse, die mit einem gewichteten Moving Average berechnet wird, kombiniert mit Informationen über die Transaktionsmenge, um eine Trendmitte zu bestimmen
  2. Auf Basis der mittleren Achse werden Kauf- und Verkaufszonen festgelegt.
  3. Verwenden Sie die RSI-Informationen, um die Kauf- und Verkaufszonen zu korrigieren
  4. Setzen Sie eine Stop-Loss- und Stop-Stop-Line, nachdem Sie in die Kaufzone eingegeben sind
  5. Mit einem Wiedereintrittsverfahren

Strategieprinzip

Diese Strategie verwendet folgende Kennzahlen und Parameter:

  • Mittellachse: Berechnung eines gewichteten Moving Averages für Höchst- und Tiefstpreise innerhalb eines bestimmten Zeitraums, wobei die Handelsmenge als Gewicht verwendet wird, um die Richtung der Mittellachse zu bestimmen
  • RSI: Berechnung des Relative Strength Index innerhalb eines bestimmten Zeitraums und Umwandlung in Werte im Bereich 0-1
  • Kaufzone: Die mittlere Achse plus ein gewisser Anteil der RSI-Anpassung, die nach dem Betreten der Kaufzone mehr tun kann
  • Ausverkaufszone: Die mittlere Achse subtrahiert einen bestimmten Prozentsatz der RSI-Anpassung, der nach dem Eintritt in die Ausverkaufszone freigegeben wird
  • Halterung: Mitte der Achse
  • Stop-Loss-Linie: Prozentsatz unterhalb der Kauf-/Verkaufszone

Wenn der Preis in die Kauf- oder Verkaufszone gelangt ist, wird die Position in der entsprechenden Richtung eröffnet. Danach werden die Stop-Loss-Positionen festgelegt, die Position wird gelöscht, wenn die Stop-Loss- oder Stop-Loss-Signal ausgelöst wird. Gleichzeitig wird ein Wiedereintrittsmechanismus eingerichtet, der, wenn die Konfiguration es erlaubt, bei einem erneuten Auslöser des Signals für die Eröffnung der Position wieder eingegeben werden kann.

Strategische Vorteile

Diese Strategie hat folgende Vorteile:

  1. Trends mit RSI und Volumen-Doppel-Indikator identifizieren, um die Genauigkeit zu verbessern
  2. Der RSI parametriert die Bandbreite der Kauf- und Verkaufszonen, um sie besser an die tatsächlichen Trends anzupassen
  3. Die Informationen über die Transaktionsmenge geben Preisschwankungen mehr Gewicht und machen die Mittellachse genauer.
  4. Risikokontrolle mit Stop-Loss-Mechanismen
  5. Die Möglichkeit der Wiedereinreise verringert das Risiko eines falschen Einbruchs.

Risikoanalyse

Die Strategie birgt auch Risiken:

  1. Die falsche Einstellung der RSI- und Volumenparameter kann die Genauigkeit bei der Bestimmung der Kauf- und Verkaufszonen beeinträchtigen
  2. Die mittlere Achse kann Trends nicht ganz genau bestimmen, es kann zu Fehlbrechungen kommen
  3. Eine übergroße Einstellung des Stop-Loss-Punktes kann zu höheren Verlusten führen
  4. Ein Wiedereintrittsmechanismus könnte zu überhöhten Transaktionen führen

Entsprechende Optimierungsmaßnahmen:

  1. Anpassung der RSI-Zyklen und der Parameter für den Volumenzyklus, um sie besser an die Marktbedingungen anzupassen
  2. In Kombination mit anderen Indikatoren, um Kauf- und Verkaufssignale zu verifizieren und Fehlbrechungen zu vermeiden
  3. Stärkung der Stop-Loss-Punkte und Kontrolle der Einzelschäden
  4. Beschränken Sie die Anzahl der täglichen Transaktionen und vermeiden Sie Übertrieb.

Richtung der Strategieoptimierung

Diese Strategie kann in folgenden Bereichen optimiert werden:

  1. Versuchen Sie mit anderen Indikatoren, um Ihre Kauf- und Verkaufssignale zu überprüfen, wie z. B. K-Linie-Formen, Volatilitätsindikatoren usw.
  2. Erhöhung der Positionsmanagement-Mechanismen, wie z. B. Positionserhöhung nach Gewinn
  3. Erhöhung der Genauigkeit von Trendbeurteilungen durch maschinelle Lernalgorithmen und Verbesserung der Genauigkeit von Kauf- und Verkaufszonen
  4. Bewertung der optimalen Parameter für die Einstellung der Stop-Loss-Punkte
  5. Verschiedene Sorten haben unterschiedliche Parameter und müssen separat getestet und optimiert werden.

Zusammenfassen

Die Strategie als Ganzes ist eine quantitative Strategie, die RSI und Handelsvolumen-Indikatoren verwendet, um Trends zu verfolgen. Sie hat eine Doppel-Verifizierungs-Mechanismus, um Trendsignale zu identifizieren, und setzt Stop-Loss-Stopp-Mechanismen ein, um Risiken zu kontrollieren, sowie einen Wiedereintrittsmechanismus, um die Gewinnchancen zu erhöhen. Durch die Parameteranpassung und die Optimierung der Algorithmen kann die Strategie zu einer sehr praktischen Trend-Tracking-Trading-Strategie werden.

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    ,@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@      @@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@        @@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@         @@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@           @@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@        .@@@@@@@@@@@@@@@            @@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@          *@@@@@@@@@@@@@@             @@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@         @@@@@@@@@@@@@@@               @@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@     @@@@@@@@@@@@@@@@                 @@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                  @@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.                    @@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                      @@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.                         @
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                             @
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,                                       @
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                                                @
// @@@@@@@@@@@@@@@@@@@@@@@@@@@                                                    @
// @@@@@@@@@@@@@@@@@@@@@@@@@                                                     @@
// @@@@@@@@@@@@@@@@@@@@@@@                                                       @@
// @@@@@@@@@@@@@@@@@@@@@@                                                       @@@
// @@@@@@@@@@@@@@@@@@@@@*                @@@@@                                 @@@@
// @@@@@@@@@@@@@@@@@@@@@               @@@@@@@@@                              @@@@@
// @@@@@@@@@@@@@@@@@@@@@              @@@@@@@@@@@                           @@@@@@@
// @@@@@@@@@@@@@@@@@@@@@               @@@@@@@@%                           @@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@                                                @@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@                                            @@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@                                        %@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@                                   @@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@                           @@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// © YinYangAlgorithms

//@version=5
strategy("YinYang RSI Volume Trend Strategy", shorttitle="YinYang RSVT Strategy", overlay=true )
// ~~~~~~~~~~~ INPUTS ~~~~~~~~~~~ //
len = input.int(80, "Trend Length:", tooltip="How far back should we span this indicator?\nThis length effects all lengths of the indicator")
purchaseSrc = input.source(close, "Purchase Source (Long and Short):", tooltip="What source needs to exit the purchase zone for a purchase to happen?")
exitSrc = input.source(close, "Exit Source (Long and Short):", tooltip="What source needs to hit a exit condition to stop the trade (Take profit, Stop Loss or hitting the other sides Purchase Zone)?")
useTakeProfit = input.bool(true, "Use Take Profit", tooltip="Should we take profit IF we cross the basis line and then cross it AGAIN?")
useStopLoss = input.bool(true, "Use Stop Loss", tooltip="Stop loss will ensure you don't lose too much if its a bad call")
stopLossMult = input.float(0.1, "Stoploss Multiplier %:", tooltip="How far from the purchase lines should the stop loss be")
resetCondition = input.string("Entry", "Reset Purchase Availability After:", options=["Entry", "Stop Loss", "None"],
 tooltip="If we reset after a condition is hit, this means we can purchase again when the purchase condition is met. \n" +
 "Otherwise, we will only purchase after an opposite signal has appeared.\n" +
 "Entry: means when the close enters the purchase zone (buy or sell).\n" +
 "Stop Loss: means when the close hits the stop loss location (even when were out of a trade)\n" +
 "This allows us to get more trades and also if our stop loss initally was hit but it WAS a good time to purchase, we don't lose that chance.")

// ~~~~~~~~~~~ VARIABLES ~~~~~~~~~~~ //
var bool longStart = na
var bool longAvailable = na
var bool longTakeProfitAvailable = na
var bool longStopLoss = na
var bool shortStart = na
var bool shortAvailable = na
var bool shortTakeProfitAvailable = na
var bool shortStopLoss = na

resetAfterStopLoss = resetCondition == "Stop Loss"
resetAfterEntry = resetCondition == "Entry"

// ~~~~~~~~~~~ CALCULATIONS ~~~~~~~~~~~ //
// Mid Line
midHigh = ta.vwma(ta.highest(high, len), len)
midLow = ta.vwma(ta.lowest(low, len), len)
mid = math.avg(midHigh, midLow)
midSmoothed = ta.ema(mid, len)

//Volume Filtered
avgVol = ta.vwma(volume, len)
volDiff = volume / avgVol
midVolSmoothed = ta.vwma(midSmoothed * volDiff, 3)

//RSI Filtered
midDifference = ta.sma(midHigh - midLow, len)
midRSI = ta.rsi(midVolSmoothed, len) * 0.01
midAdd = midRSI * midDifference

//Calculate Zones
purchaseZoneHigh = midSmoothed + midAdd
purchaseZoneLow = midSmoothed - midAdd
purchaseZoneBasis = math.avg(purchaseZoneHigh, purchaseZoneLow)

//Create Stop Loss Locations
stopLossHigh = purchaseZoneHigh * (1 + (stopLossMult * 0.01))
stopLossLow = purchaseZoneLow * (1 - (stopLossMult * 0.01))

// ~~~~~~~~~~~ PURCHASE CALCULATIONS ~~~~~~~~~~~ //
//Long
longEntry = ta.crossunder(purchaseSrc, purchaseZoneLow)
longStart := ta.crossover(purchaseSrc, purchaseZoneLow) and longAvailable
longAvailable := ta.crossunder(purchaseSrc, purchaseZoneHigh) or (resetAfterStopLoss and longStopLoss) or (resetAfterEntry and longEntry) ? true : longStart ? false : longAvailable[1]
longEnd = ta.crossover(exitSrc, purchaseZoneHigh)
longStopLoss := ta.crossunder(exitSrc, stopLossLow)
longTakeProfitAvailable := ta.crossover(exitSrc, purchaseZoneBasis) ? true : longEnd ? false : longTakeProfitAvailable[1]
longTakeProfit = ta.crossunder(exitSrc, purchaseZoneBasis) and longTakeProfitAvailable

//Short
shortEntry = ta.crossover(purchaseSrc, purchaseZoneHigh)
shortStart := ta.crossunder(purchaseSrc, purchaseZoneHigh) and shortAvailable
shortAvailable := ta.crossover(purchaseSrc, purchaseZoneLow) or (resetAfterStopLoss and shortStopLoss) or (resetAfterEntry and shortEntry)? true : shortStart ? false : shortAvailable[1]
shortEnd = ta.crossunder(exitSrc, purchaseZoneLow)
shortStopLoss := ta.crossover(exitSrc, stopLossHigh)
shortTakeProfitAvailable := ta.crossunder(exitSrc, purchaseZoneBasis) ? true : shortEnd ? false : shortTakeProfitAvailable[1]
shortTakeProfit = ta.crossover(exitSrc, purchaseZoneBasis) and shortTakeProfitAvailable

// ~~~~~~~~~~~ PLOTS ~~~~~~~~~~~ //
shortLine = plot(purchaseZoneHigh, color=color.green)
shortStopLossLine = plot(stopLossHigh, color=color.green) //color=color.rgb(0, 97, 3)
fill(shortLine, shortStopLossLine, color = color.new(color.green, 90))
plot(purchaseZoneBasis, color=color.white)
longLine = plot(purchaseZoneLow, color=color.red)
longStopLossLine = plot(stopLossLow, color=color.red) //color=color.rgb(105, 0, 0)
fill(longLine, longStopLossLine, color=color.new(color.red, 90))

// ~~~~~~~~~~~ STRATEGY ~~~~~~~~~~~ //
if (longStart)
    strategy.entry("buy", strategy.long)
else if (longEnd or (useStopLoss and longStopLoss) or (useTakeProfit and longTakeProfit))
    strategy.close("buy")

if (shortStart)
    strategy.entry("sell", strategy.short)
else if (shortEnd or (useStopLoss and shortStopLoss) or (useTakeProfit and shortTakeProfit))
    strategy.close("sell")

// ~~~~~~~~~~~ ALERTS ~~~~~~~~~~~ //
if longStart or (longEnd or (useStopLoss and longStopLoss) or (useTakeProfit and longTakeProfit)) or shortStart or (shortEnd or (useStopLoss and shortStopLoss) or (useTakeProfit and shortTakeProfit))
    alert("{{strategy.order.action}} | {{ticker}} | {{close}}", alert.freq_once_per_bar)