.:: Niveaux dynamiques L'indicateur se compose de niveaux (zones de renversement des prix) qui sont corrélés les uns aux autres avec d'autres nombres de Fibonacci. Tous les niveaux sont formés à partir des valeurs existantes de l'oscillateur non lissé. Cela vous permet de ne pas fixer des seuils de zone de virage, par exemple, -100 et 100, comme cela est fait dans CCI Les niveaux dynamiques s'adaptent aux pics des valeurs des oscillateurs et vous permettent de trouver des points d'inversion des prix plus souvent et de manière non moins efficace.
.:: Oscillateur composite (3 en 1) ::. La ligne de l'oscillateur se compose de trois mesures de l'indicateur RSI, CCI, Stoch à la fois dans un large pourcentage.
.:: définition du ratio CCI + RSI + Stoch Chacun des indicateurs naturels a son propre poids dans la formule de calcul: w2 * cci ( + w1 * (rsi - 50) + (1 - w2 - w1) * (stock - 50), cela vous permet de voir un oscillateur à l'un de ces différents indicateurs ou poids de netteté pour chacun
.:: Niveaux et lignes de lissage de l'oscillateur Lisser les valeurs de l'oscillateur vous permet de filtrer le bruit et d'obtenir des données plus précises.
.:: Activité pendant l'appartement::. Création dynamique des niveaux vous permet de trouver dans la zone d'inversion de prix, même lorsque le prix est dans un plat (plat)
.:: poids RSI / poids CCI Coefficients de contrôle de poids pour les indicateurs RSI et CCI, respectivement. Lorsque vous définissez RSI Poids = 0, égalisez la combinaison de CCI et Stoch, lorsque le poids RSI est nul et le poids CCI est égal à la valeur de l'oscillateur sera tracé Les valeurs intermédiaires ont un degré élevé de mesure de chacun des trois oscillateurs en pourcentage de 0 à 100. où w1 est le poids RSI et w2 est le poids CCI, le poids Stoch est calculé à la volée comme (1 - w2 - w1), de sorte que la somme de w1 + w2 ne doit pas dépasser 1, dans ce cas, Stoch fonctionnera par opposition à CCI et RSI.
.:: Période de l'oscilloscope C'est la période de tous les oscillateurs, elle est définie par un paramètre pour tous.
.:: Oscilloscope M.A. Période: Lissage périodique de la ligne de l'oscillateur. Serve à un réglage plus fin pour éliminer le bruit. Si vous sélectionnez une valeur de 0, le lissage est désactivé et le réglage des échantillons d'oscilloscope cesse automatiquement de fonctionner.
.:: échantillons de forme d'onde: Le réglage vous permet de régler la quantité de lissage pour la ligne de l'oscillateur.
.:: Oscilloscope MA Type: Type de fréquence moyenne mobile pour les mouvements de ligne d'oscillateur
.:: période de niveau Les moyennes mobiles périodiques utilisées pour former les niveaux (zones) de l'indicateur de l'oscillateur arc-en-ciel
.:: Décalage de niveau Réglage supplémentaire pour déplacer les niveaux à partir de zéro points. Peut être utile pour absorber les niveaux et filtrer les signaux d'entrée.
.:: niveau de redondance Il caractérise la sévérité de l'état de l'état à chaque itération du niveau de la maladie. Si elle est définie sur 1 - les niveaux ne diminueront pas lorsque les valeurs de l'oscillateur chuteront. Si elle a une valeur de 0,99 - les niveaux sont réduits de 0,01 Chacun a un oscillateur dans 1% des cas et est pressé à 0 par les plus agressifs.
.:: échantillons de niveaux lissés La mesure du nombre de moyennes avec la définition du type de moyennes mobiles
.:: Type de niveau d'AM: Type de moyenne mobile, moyenne pour la formation d'une zone de surachat et de survente de lissage
test de retour
/*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)