
Eine Überschussstrategie ist eine Trendhandelsstrategie, bei der Handelsentscheidungen auf der Grundlage von Überschussindikatoren getroffen werden. Die Strategie verwendet die Wechselkurve, die Benchmark und die Beziehung zwischen den Überschussindikatoren, um die aktuelle Trendrichtung zu bestimmen, und kombiniert die Rückführung des Preises mit dem Eintritt.
Die Super-One-Strategie ist hauptsächlich für den Trendhandel mit mittleren Längen geeignet und kann in größeren Trends profitieren. Die Strategie hat auch eine starke Fähigkeit, Trends zu erkennen.
Die Strategie der Überschreitung von 1 richtet sich vor allem nach folgenden Faktoren:
Die Beziehung zwischen Umrechnung und Referenzlinie:Wenn die Umrechnung Linie hoch ist, ist sie positiv, wenn sie unten ist, ist sie negativ.
Die Farbe der Wolken:Wenn die Wolken grün sind, ist der Preis hoch, wenn rot ist der Preis niedrig.
Die Preise sind zurückgegangen:Die Annahme von Preisen außerhalb der Rückgewinnungslinie und der Benchmark ist erforderlich
Die Strategie beinhaltet folgende Handelssignale:
Das ist eine sehr schwierige Aufgabe.
Das ist ein Signal:
Wenn gleichzeitig ein Plus/Null-Signal erfüllt wird, wird die Position entsprechend der Position eröffnet.
Die Strategie hat folgende Vorteile:
Trends mit einer Kombination von mehr als einem Indikator zu bestimmen, mit hoher Genauigkeit
Umrechnungslinien und Benchmarks können kurzfristige Trends klar bestimmen, Wolkenbänder langfristige Trends.
Bedingung, dass der Preis die Wende zurückzieht, um Verluste durch falsche Durchbrüche zu vermeiden
Risikokontrolle mit dem höchsten und niedrigsten Stop-Loss-Preis der letzten Periode, um Einzelschäden wirksam zu kontrollieren
Das ist eine gute Idee, aber es ist nicht so einfach.
Anwendbar in unterschiedlichen Phasen, geeignet für den Handel mit mittleren und langen Trends
Die Strategie ist klar und leicht zu verstehen, die Parameter können optimiert werden.
In einer Vielzahl von Marktumgebungen funktioniert
Eine Strategie, die über eins hinausgeht, birgt auch folgende Risiken:
In schwankenden Märkten können Stop-Losses häufig ausgelöst werden, was die Ertragswirkung beeinträchtigt.
Wenn sich Trends schnell ändern, kann es zu Verlusten kommen, wenn man seine Position nicht rechtzeitig umkehrt.
Die eingestellte Gewinn- und Verlustquote ist nicht für alle Sorten geeignet und erfordert eine Anpassung der Parameter an die verschiedenen Standards
Wenn Sie nach dem Durchbruch der Wolkenbänder nur begrenzt Platz haben, können Sie nur begrenzt profitieren.
Die Kennzahlen müssen wiederholt getestet und optimiert werden und sind nicht für Varianten geeignet, deren Parameter häufig angepasst werden
Das Risiko kann durch folgende Maßnahmen verringert werden:
Optimierung der Parameter, um sie besser an unterschiedliche Zyklen und Sortenmerkmale anzupassen
In Kombination mit anderen Indikatoren filtern Sie Einstiegssignale und vermeiden Sie falsche Durchbrüche in einem wackligen Markt.
Dynamische Anpassung der Stop-Position, um die Wahrscheinlichkeit zu verringern, dass der Stop-Loss ausgelöst wird
Verschiedene Gewinn- und Verlust-Verhältnis-Einstellungen
Trendsignalstärken werden anhand von Methoden wie Diagrammformationen ermittelt
Die Strategie “Super One” kann in folgenden Bereichen optimiert werden:
Optimierung der Parameter für die Umstellungslinie und die Benchmarklinie, um sie besser an die Merkmale der gehandelten Sorte anzupassen
Optimierung der Cloud-Band-Parameter, um die Cloud-Band-Parameter für langfristige Trends zu optimieren
Optimierte Stop-Loss-Algorithmen, wie z. B. Stop-Setting oder Dynamic Stop-Loss gemäß ATR
Signalfilterung in Kombination mit anderen Kennzahlen, um mehr Filterbedingungen zu konfigurieren und die Wahrscheinlichkeit von Fehlinträgen zu verringern
Optimierung des Verlust- und Verlustverhältnisses und Anpassung der Strategie an die Merkmale der verschiedenen Sorten und Perioden
Positionsverwaltung nach dem Martingale-System, um sich an die unterschiedliche Frequenz von Kursschwankungen anzupassen
Optimierung der Parameter mit Hilfe von maschinellen Lernmethoden für eine höhere Stabilität
Setzen Sie verschiedene Handelszeiträume ein, um sich an die Merkmale des Handels in Nacht- und Zwischenplatten anzupassen
Die Strategie ist sehr gut geeignet, um mittel- und langfristige Trends zu handeln. Die Vorteile der Verwendung von Über-1-Indikatoren sind klar, während die Eintrittskurse in Verbindung mit der Preisrückführung effektiv ist, um Fehlintritte zu vermeiden. Durch die Einstellung von Optimierungsparametern kann die Strategie einen stabilen Gewinn in mehr Varianten und mehr Zyklen erzielen.
/*backtest
start: 2022-11-05 00:00:00
end: 2023-11-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// Strategy based on the the SuperIchi indicator.
//
// Strategy was designed for the purpose of back testing.
// See strategy documentation for info on trade entry logic.
//
// Credits:
// - SuperIchi [LUX]: LuxAlgo (https://www.tradingview.com/script/vDGd9X9y-SuperIchi-LUX/)
//@version=5
strategy("SuperIchi Strategy", overlay=true, initial_capital=1000, currency=currency.NONE, max_labels_count=500, default_qty_type=strategy.cash, commission_type=strategy.commission.percent, commission_value=0.01)
// =============================================================================
// STRATEGY INPUT SETTINGS
// =============================================================================
// ---------------
// Risk Management
// ---------------
swingLength = input.int(15, "Swing High/Low Lookback Length", group='Strategy: Risk Management', tooltip='Stop Loss is calculated by the swing high or low over the previous X candles')
accountRiskPercent = input.float(2, "Account percent loss per trade", step=0.1, group='Strategy: Risk Management', tooltip='Each trade will risk X% of the account balance')
profitFactor = input.float(2, "Profit Factor (R:R Ratio)", step = 0.1, group='Strategy: Risk Management')
useAtrOverride = input.bool(true, "Use Swing High/Low ATR Override", group='Strategy: Risk Management', tooltip='In some cases price may not have a large enough (if any) swing withing previous X candles. Turn this on to use an ATR value when swing high/low is lower than the given ATR value')
atrMultiplier = input.int(1, "Swing High/Low ATR Override Multiplier", group='Strategy: Risk Management')
atrLength = input.int(14, "Swing High/Low ATR Override Length", group='Strategy: Risk Management')
// -----------------
// Strategy Settings
// -----------------
pullbackLength = input.int(5, "Pullback Lookback Length", group='Strategy: Settings', tooltip='Number of candles to consider for a pullback into the moving averages (prerequisite for trade entry)')
// ----------
// Date Range
// ----------
start_year = input.int(title='Start Date', defval=2022, minval=2010, maxval=3000, group='Strategy: Date Range', inline='1')
start_month = input.int(title='', defval=1, group='Strategy: Date Range', inline='1', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
start_date = input.int(title='', defval=1, group='Strategy: Date Range', inline='1', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])
end_year = input.int(title='End Date', defval=2023, minval=1800, maxval=3000, group='Strategy: Date Range', inline='2')
end_month = input.int(title='', defval=1, group='Strategy: Date Range', inline='2', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
end_date = input.int(title='', defval=1, group='Strategy: Date Range', inline='2', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])
in_date_range = time >= timestamp(syminfo.timezone, start_year, start_month, start_date, 0, 0) and time < timestamp(syminfo.timezone, end_year, end_month, end_date, 0, 0)
// =============================================================================
// INDICATORS
// =============================================================================
// ---------------
// SuperIchi [LUX]
// ---------------
tenkan_len = input(9,'Tenkan ',inline='SuperIchi', group='Indicator: SuperIchi Settings')
tenkan_mult = input(2.,'',inline='SuperIchi', group='Indicator: SuperIchi Settings')
kijun_len = input(26,'Kijun ',inline='SuperIchi', group='Indicator: SuperIchi Settings')
kijun_mult = input(4.,'',inline='SuperIchi', group='Indicator: SuperIchi Settings')
spanB_len = input(52,'Senkou Span B ',inline='SuperIchi', group='Indicator: SuperIchi Settings')
spanB_mult = input(6.,'',inline='SuperIchi', group='Indicator: SuperIchi Settings')
offset = input(26,'Displacement', inline='SuperIchi', group='Indicator: SuperIchi Settings')
//------------------------------------------------------------------------------
avg(src,length,mult)=>
atr = ta.atr(length)*mult
up = hl2 + atr
dn = hl2 - atr
upper = 0.,lower = 0.
upper := src[1] < upper[1] ? math.min(up,upper[1]) : up
lower := src[1] > lower[1] ? math.max(dn,lower[1]) : dn
os = 0,max = 0.,min = 0.
os := src > upper ? 1 : src < lower ? 0 : os[1]
spt = os == 1 ? lower : upper
max := ta.cross(src,spt) ? math.max(src,max[1]) : os == 1 ? math.max(src,max[1]) : spt
min := ta.cross(src,spt) ? math.min(src,min[1]) : os == 0 ? math.min(src,min[1]) : spt
math.avg(max,min)
//------------------------------------------------------------------------------
tenkan = avg(close,tenkan_len,tenkan_mult)
kijun = avg(close,kijun_len,kijun_mult)
senkouA = math.avg(kijun,tenkan)
senkouB = avg(close,spanB_len,spanB_mult)
//------------------------------------------------------------------------------
tenkan_css = #2157f3 //blue
kijun_css = #ff5d00 //red
cloud_a = color.new(color.teal,80)
cloud_b = color.new(color.red,80)
chikou_css = #7b1fa2
plot(tenkan,'Tenkan-Sen',tenkan_css)
plot(kijun,'Kijun-Sen',kijun_css)
plot(ta.crossover(tenkan,kijun) ? kijun : na,'Crossover',#2157f3,3,plot.style_circles)
plot(ta.crossunder(tenkan,kijun) ? kijun : na,'Crossunder',#ff5d00,3,plot.style_circles)
A = plot(senkouA,'Senkou Span A',na,offset=offset-1)
B = plot(senkouB,'Senkou Span B',na,offset=offset-1)
fill(A,B,senkouA > senkouB ? cloud_a : cloud_b)
plot(close,'Chikou',chikou_css,offset=-offset+1,display=display.none)
// =============================================================================
// STRATEGY LOGIC
// =============================================================================
plotchar(kijun, "kijun", "", location = location.top)
plotchar(senkouA[offset-1], "senkouA", "", location = location.top)
plotchar(tenkan > kijun, "line above", "", location = location.top)
plotchar(close > tenkan, "price above", "", location = location.top)
plotchar(kijun > senkouA[offset-1], "above cloud", "", location = location.top)
// blue line above red line + price above both lines + both lines above cloud
longSen = tenkan > kijun and close > tenkan and kijun > senkouA[offset-1]
// red line below blue line + price below both lines + both lines below cloud
shortSen = tenkan < kijun and close < tenkan and kijun < senkouA[offset-1]
plotchar(longSen, "longSen", "", location = location.top)
plotchar(shortSen, "shortSen", "", location = location.top)
// Cloud is green
longSenkou = senkouA[offset-1] > senkouB[offset-1]
// Cloud is red
shortSenkou = senkouA[offset-1] < senkouB[offset-1]
// price must have pulled back below sen lines before entry
barsSinceLongPullback = ta.barssince(close < kijun and close < tenkan)
longPullback = barsSinceLongPullback <= pullbackLength
// price must have pulled back above sen lines before entry
barsSinceShortPullback = ta.barssince(close > kijun and close > tenkan)
shortPullback = barsSinceShortPullback <= pullbackLength
// plotchar(lowestClose, "lowestClose", "", location = location.top)
// plotchar(highestClose, "highestClose", "", location = location.top)
inLong = strategy.position_size > 0
inShort = strategy.position_size < 0
longCondition = longSen and longSenkou and longPullback and in_date_range
shortCondition = shortSen and shortSenkou and shortPullback and in_date_range
swingLow = ta.lowest(source=low, length=swingLength)
swingHigh = ta.highest(source=high, length=swingLength)
atr = useAtrOverride ? ta.atr(atrLength) * atrMultiplier : 0
longSl = math.min(close - atr, swingLow)
shortSl = math.max(close + atr, swingHigh)
longStopPercent = math.abs((1 - (longSl / close)) * 100)
shortStopPercent = math.abs((1 - (shortSl / close)) * 100)
longTpPercent = longStopPercent * profitFactor
shortTpPercent = shortStopPercent * profitFactor
longTp = close + (close * (longTpPercent / 100))
shortTp = close - (close * (shortTpPercent / 100))
// Position sizing (default risk 2% per trade)
riskAmt = strategy.equity * accountRiskPercent / 100
longQty = math.abs(riskAmt / longStopPercent * 100) / close
shortQty = math.abs(riskAmt / shortStopPercent * 100) / close
if (longCondition and not inLong)
strategy.entry("Long", strategy.long, qty=longQty)
strategy.exit("Long SL/TP", from_entry="Long", stop=longSl, limit=longTp, alert_message='Long SL Hit')
buyLabel = label.new(x=bar_index, y=high[1], color=color.green, style=label.style_label_up)
label.set_y(id=buyLabel, y=low)
label.set_tooltip(id=buyLabel, tooltip="Risk Amt: " + str.tostring(riskAmt) + "\nQty: " + str.tostring(longQty) + "\nSwing low: " + str.tostring(swingLow) + "\nStop Percent: " + str.tostring(longStopPercent) + "\nTP Percent: " + str.tostring(longTpPercent))
if (shortCondition and not inShort)
strategy.entry("Short", strategy.short, qty=shortQty)
strategy.exit("Short SL/TP", from_entry="Short", stop=shortSl, limit=shortTp, alert_message='Short SL Hit')
sellLabel = label.new(x=bar_index, y=high[1], color=color.red, style=label.style_label_up)
label.set_y(id=sellLabel, y=low)
label.set_tooltip(id=sellLabel, tooltip="Risk Amt: " + str.tostring(riskAmt) + "\nQty: " + str.tostring(shortQty) + "\nSwing high: " + str.tostring(swingHigh) + "\nStop Percent: " + str.tostring(shortStopPercent) + "\nTP Percent: " + str.tostring(shortTpPercent))