Oscilador de arco iris

El autor:¿ Qué pasa?, Fecha: 2022-05-13 22:38:03
Las etiquetas:El EMALa SMAEl RMALa WMA


Características

.:: niveles dinámicos El indicador consiste en niveles (zonas de inversión de precios) que se correlacionan entre sí con otros números de Fibonacci. Todos los niveles se forman a partir de los valores de los osciladores no suavizados existentes. Los niveles dinámicos se ajustan a los picos en los valores del oscilador y le permiten encontrar puntos de reversión de precios con más frecuencia y no menos eficientemente.

.:: Oscilador compuesto (3 en 1) La línea del oscilador consta de tres mediciones de los indicadores RSI, CCI, Stoch a la vez en un amplio porcentaje. Al mismo tiempo, gracias a los ajustes, puede deshacerse fácilmente de uno de los indicadores.

.:: Establecimiento del índice CCI + RSI + Stoch ratio Cada uno de los indicadores naturales tiene su propio peso en la fórmula de cálculo: w2 * cci ( + w1 * (rsi - 50) + (1 - w2 - w1) * (stoch - 50), esto le permite ver un oscilador a cualquiera de estos diversos indicadores o peso de nitidez para cada

.:: Niveles y líneas de suavizado del oscilador: La suavización de los valores del oscilador permite filtrar el ruido y obtener datos más precisos.

.:: Actividad durante el APARTAMENTO: Creación dinámica de niveles le permite encontrar en la zona de inversión de precios, incluso cuando el precio está en un plano (plano)


Configuración

.:: Peso del índice de rentabilidad / peso del índice de rentabilidad: Los coeficientes de control de peso para los indicadores RSI y CCI, respectivamente. Cuando se establece RSI peso = 0, igualar el combo de CCI y Stoch, cuando el peso RSI es cero y CCI peso es igual al valor del oscilador se trazará Los valores intermedios tienen un alto grado de medición de cada uno de los tres osciladores en términos porcentuales de 0 a 100. donde w1 es el peso del RSI y w2 es el peso del CCI, el peso de Stoch se calcula sobre la marcha como (1 - w2 - w1), por lo que la suma de w1 + w2 no debe exceder 1, en este caso Stoch funcionará en lugar de CCI y RSI.

.:: Período del osciloscopio Este es el período de todos los osciladores, se establece por un parámetro para todos.

.:: Osciloscopio M.A. Período Aplanamiento periódico de la línea del oscilador. Sirve para una puesta a punto más precisa para eliminar el ruido. Si selecciona un valor de 0, se desactiva el aplanamiento y la configuración de muestras del osciloscopio dejará de funcionar automáticamente.

.:: Muestras de forma de onda: configuración le permite establecer la cantidad de suavizado para la línea del oscilador.

.:: Osciloscopio MA Tipo: Tipo de frecuencia media móvil para el deslizamiento de la línea del oscilador

.:: Periodo de nivel Las medias móviles periódicas utilizadas para formar los niveles (zona) del indicador del oscilador del arco iris

.:: desplazamiento de nivel Configuración adicional para cambiar los niveles desde los puntos cero. Puede ser útil para absorber los niveles y filtrar las señales de entrada. El valor predeterminado es 0.

.:: Nivel redundante Se caracteriza por la gravedad del estado del estado en cada iteración del nivel de la enfermedad. Si se establece en 1 - los niveles no disminuirán cuando caigan los valores del oscilador. Si tiene un valor de 0.99 - los niveles se reducen en 0.01 cada uno tiene un oscilador en el 1% de los casos y es presionado a 0 por los más agresivos.

.:: Muestras de niveles suavizados la configuración le permite establecer el número de trazos por nivel.

.:: Tipo de nivel de admisión: Tipo de media móvil, media para la formación de una zona de sobrecompra y sobreventa suavizante

Prueba posterior

img


/*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)

Relacionados

Más.