.:: Dynamische Ebenen Der Indikator besteht aus Ebenen (Preisumkehrzonen), die mit anderen Fibonacci-Zahlen korrelieren. Alle Ebenen werden aus vorhandenen nicht glatten Oszillatorenwerten gebildet. Dies ermöglicht es Ihnen, nicht Drehzone Schwellenwerte zu fixieren, zum Beispiel -100 und 100, wie in CCI getan Dynamische Niveaus passen sich den Spitzen der Oszillatorwerte an und ermöglichen es Ihnen, Preisschwankungen häufiger und nicht weniger effizient zu finden.
.:: Zusammengesetzter Oszillator (3 in 1) Die Oszillatorlinie besteht aus drei Messungen des RSI, CCI, Stoch-Indikatoren auf einmal in einem breiten Prozentsatz.
.:: Einstellung des CCI + RSI + Stoch Ratio: Jeder der natürlichen Indikatoren hat sein eigenes Gewicht in der Berechnungsformel: w2 * cci ( + w1 * (rsi - 50) + (1 - w2 - w1) * (stock - 50), so dass Sie einen Oszillator zu einem dieser verschiedenen Indikatoren oder Schärfe Gewicht für jeden sehen
.:: Glättungsniveaus und -linien des Oszillators: Durch das Glätten der Oszillatorwerte können Sie das Geräusch filtern und genauere Daten erhalten.
.:: Aktivität während der Wohnung: Dynamische Erstellung von Ebenen ermöglicht es Ihnen, in der Preisumkehrzone zu finden, auch wenn der Preis in einem flachen (flat) ist
.:: RSI Gewicht / CCI Gewicht Wenn Sie RSI-Gewicht = 0 setzen, gleichsetzen Sie die Kombination von CCI und Stoch, wenn RSI-Gewicht null ist und CCI-Gewicht gleich dem Oszillatorwert ist wird gezeichnet Die Zwischenwerte haben ein hohes Maß an Messung jedes der drei Oszillatoren in Prozentzahlen von 0 bis 100. Die Berechnung verwendet die Formel: w2 * cci ( + w1 * (rsi - 50) + (1 - w2 - w1) * (stoch - 50), wobei w1 das RSI-Gewicht und w2 das CCI-Gewicht ist, wird das Stoch-Gewicht im Handumdrehen als (1 - w2 - w1) berechnet, so dass die Summe von w1 + w2 1 nicht übersteigen sollte. In diesem Fall wird Stoch im Gegensatz zu CCI und RSI funktionieren.
.:: Oszilloskopperiode: Dies ist die Periode aller Oszillatoren, sie wird für alle durch einen Parameter festgelegt.
.:: Oszilloskop M.A. Zeit: Periodische Glättung der Oszillatorlinie. dient für eine feinere Abstimmung, um Lärm zu beseitigen. Wenn Sie einen Wert von 0 auswählen, wird die Glättung deaktiviert und die Einstellung Oscilloscope Samples wird automatisch nicht mehr funktionieren.
.:: Wellenformproben Die Einstellung ermöglicht es Ihnen, die Menge der Glättung für die Oszillatorlinie festzulegen.
.:: Oszilloskop MA Typ: Typ der gleitenden Durchschnittsfrequenz für die Gleitlinie des Oszillators
.:: Niveauperiode Periodisch gleitende Durchschnittswerte, die zur Bildung der Ebenen (Zonen) des Regenbogen-Oszillators verwendet werden
.:: Niveausverschiebung Zusätzliche Einstellung für das Verschieben von Ebenen von Nullpunkten. Kann nützlich sein, um Ebenen zu absorbieren und Eingangssignale zu filtern.
.:: Überflüssiges Niveau: Es charakterisiert die Schwere des Zustands des Zustands bei jeder Iteration des Krankheitsniveaus. Wenn auf 1 gesetzt - die Ebenen werden nicht sinken, wenn die Oszillatorwerte fallen. Wenn es einen Wert von 0,99 hat - die Ebenen um 0,01 reduziert werden Jeder hat in 1% der Fälle einen Oszillator und wird von aggressiveren auf 0 gedrückt.
.:: Proben ausgeglichener Ebenen: Die Anzahl der Durchschnitte mit der Definition der Art der gleitenden Durchschnitte
.:: Art der Zulassungsstufe: Art des gleitenden Durchschnitts, Durchschnitt für die Bildung einer glättenden Überkauf- und Überverkaufszone
Zurückprüfung
/*backtest start: 2022-04-12 00:00:00 end: 2022-05-06 23:59: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/ // © businessduck //@version=5 indicator("Rainbow Oscillator") float w1 = input.float(0.33, 'RSI Weight', 0, 1, 0.01) float w2 = input.float(0.33, 'CCI Weight', 0, 1, 0.01) int period = input.int(24, 'Ocillograph Period', 4, 60, 1) int oscillographSamplesPeriod = input.int(4, 'Oscillograph MA Period', 1, 30, 1) int oscillographSamplesCount = input.int(1, 'Oscillograph Samples', 0, 4, 1) string oscillographMAType = input.string("SMA", "Oscillograph MA type", options = ["EMA", "SMA", "RMA", "WMA"]) int levelPeriod = input.int(18, 'Level Period', 2, 30) int levelOffset = input.int(0, 'Level Offset', 0, 200, 10) float redunant = input.float(0.99, 'Level Redunant', 0, 1, 0.01) int levelSampleCount = input.int(3, 'Level Smooth Samples', 0, 4, 1) string levelType = input.string("RMA", "Level MA type", options = ["EMA", "SMA", "RMA", "WMA"]) perc(current, prev) => ((current - prev) / prev) * 100 smooth(value, type, period) => float ma = switch type "EMA" => ta.ema(value, period) "SMA" => ta.sma(value, period) "RMA" => ta.rma(value, period) "WMA" => ta.wma(value, period) => runtime.error("No matching MA type found.") float(na) getSample(value, samples, type, period) => float ma = switch samples 0 => value 1 => smooth(value, type, period) 2 => smooth(smooth(value, type, period), type, period) 3 => smooth(smooth(smooth(value, type, period), type, period), type, period) 4 => smooth(smooth(smooth(smooth(value, type, period), type, period), type, period), type, period) float takeProfit = input.float(7.5, "% Take profit", 0.8, 100, step = 0.1) float stopLoss = input.float(3.5, "% Stop Loss", 0.8, 100, step = 0.1) float magic = w2 * ta.cci(close, period) + w1 * (ta.rsi(close, period) - 50) + (1 - w2 - w1) * (ta.stoch(close, high, low, 40) - 50) float sampledMagic = getSample(magic, oscillographSamplesCount, oscillographMAType, oscillographSamplesPeriod) float lastUpperValue = 0 float lastLowerValue = 0 if (magic > 0) lastUpperValue := math.max(magic, magic[1]) else lastUpperValue := math.max(0, lastUpperValue[1]) * redunant if (magic <= 0) lastLowerValue := math.min(magic, magic[1]) else lastLowerValue := math.min(0, lastLowerValue[1]) * redunant float level1up = getSample( (magic >= 0 ? magic : lastUpperValue) / 4, levelSampleCount, levelType, levelPeriod) + levelOffset float level2up = getSample( (magic >= 0 ? magic : lastUpperValue) / 2, levelSampleCount, levelType, levelPeriod) + levelOffset float level3up = getSample( magic >= 0 ? magic : lastUpperValue, levelSampleCount, levelType, levelPeriod) + levelOffset float level4up = getSample( (magic >= 0 ? magic : lastUpperValue) * 2, levelSampleCount, levelType, levelPeriod) + levelOffset float level1low = getSample( (magic <= 0 ? magic : lastLowerValue) / 4, levelSampleCount, levelType, levelPeriod) - levelOffset float level2low = getSample( (magic <= 0 ? magic : lastLowerValue) / 2, levelSampleCount, levelType, levelPeriod) - levelOffset float level3low = getSample( magic <= 0 ? magic : lastLowerValue, levelSampleCount, levelType, levelPeriod) - levelOffset float level4low = getSample( (magic <= 0 ? magic : lastLowerValue) * 2, levelSampleCount, levelType, levelPeriod) - levelOffset var transparent = color.new(color.white, 100) var overbough4Color = color.new(color.red, 75) var overbough3Color = color.new(color.orange, 75) var overbough2Color = color.new(color.yellow, 75) var oversold4Color = color.new(color.teal, 75) var oversold3Color = color.new(color.blue, 75) var oversold2Color = color.new(color.aqua, 85) upperPlotId1 = plot(level1up, 'Upper1', transparent) upperPlotId2 = plot(level2up, 'Upper2', transparent) upperPlotId3 = plot(level3up, 'Upper3', transparent) upperPlotId4 = plot(level4up, 'Upper4', transparent) plot(sampledMagic, 'Oscillograph') lowerPlotId1 = plot(level1low, 'Lower1', transparent) lowerPlotId2 = plot(level2low, 'Lower2', transparent) lowerPlotId3 = plot(level3low, 'Lower3', transparent) lowerPlotId4 = plot(level4low, 'Lower4', transparent) fill(upperPlotId4, upperPlotId3, overbough4Color) fill(upperPlotId3, upperPlotId2, overbough3Color) fill(upperPlotId2, upperPlotId1, overbough2Color) fill(lowerPlotId4, lowerPlotId3, oversold4Color) fill(lowerPlotId3, lowerPlotId2, oversold3Color) fill(lowerPlotId2, lowerPlotId1, oversold2Color) bool longCond = sampledMagic[1] < level4low[1] and sampledMagic > level4low bool shortCond = sampledMagic[1] > level4up[1] and sampledMagic < level4up plotshape(longCond, "Long", shape.circle, location.bottom, color.aqua, 0, na, color.white, false, size.tiny) plotshape(shortCond, "Short", shape.circle, location.top, color.red, 0, na, color.white, false, size.tiny) if longCond strategy.entry("Enter Long", strategy.long) else if shortCond strategy.entry("Enter Short", strategy.short)