Осилятор радуги

Автор:Чао Чжан, Дата: 2022-05-13 22:38:03
Тэги:ЕМАSMARMAWMA


СТРАНИЦЫ

Динамические уровни: Показатель состоит из уровней (зоны переворота цен), которые коррелируют друг с другом с другими числами Фибоначчи. Все уровни формируются из существующих негладких значений осциллятора. Это позволяет не фиксировать пороги поворотной зоны, например, -100 и 100, как это делается в CCI Динамические уровни адаптируются к пикам в значениях осциллятора и позволяют чаще и не менее эффективно находить точки переворота цен.

.:: Композитный осциллятор (3 в 1) ::. Линия осциллятора состоит из трех измерений индикаторов RSI, CCI, Stoch сразу в широком процентном соотношении. В то же время, благодаря настройкам, можно легко избавиться от одного из индикаторов.

.:: Установка коэффициента CCI + RSI + Stoch Каждый из естественных показателей имеет свой собственный вес в формуле расчета: w2 * cci ( + w1 * (rsi - 50) + (1 - w2 - w1) * (сток - 50), это позволяет видеть осциллятор к любому из этих различных показателей или остроты вес для каждого

.:: Уровняющие уровни и линии осциллятора:. Углаживание значений осциллятора позволяет отфильтровать шум и получить более точные данные.

.:: Деятельность во время АПАРТМЕНТА.::. Динамическое создание уровней позволяет найти в зоне переворота цены, даже когда цена находится в плоской (плоской)


Настройки

.:: вес RSI / вес CCI Коэффициенты контроля веса для индикаторов RSI и CCI соответственно. Когда вы устанавливаете RSI Weight = 0, уравняете комбинацию CCI и Stoch, когда вес RSI равен нулю, а вес CCI равен значению осциллятора, будет проецировано Промежуточные значения имеют высокую степень измерения каждого из трех осцилляторов в процентном выражении от 0 до 100. где w1 - вес RSI и w2 - вес CCI, вес Stoch рассчитывается на ходу как (1 - w2 - w1), поэтому сумма w1 + w2 не должна превышать 1, в этом случае Stoch будет работать в противоположность CCI и RSI.

.:: Период осциллоскопа: Возможно, в ожидаемых версиях периоды будут настроены отдельно.

.:: Осциллоскоп М.А. Период: Периодическое сглаживание линии осциллятора. Служит для более тонкой настройки для устранения шума. Если вы выберете значение 0, сглаживание отключено, и настройка Oscilloscope Samples автоматически перестанет работать.

.:: Образцы волновой формы: Оциллоскоп типа MA

.:: осциллоскоп MA Тип: Тип скользящей средней частоты для скольжения линии осциллятора

.:: Уровень периода: Периодические скользящие средние, используемые для формирования уровней (зоны) индикатора радужного осциллятора

.:: Условное смещение: Дополнительная настройка для сдвига уровней с нулевых точек. Может быть полезен для поглощения уровней и фильтрации входных сигналов.

.:: избыточный уровень: Это характеризует тяжесть состояния состояния при каждой итерации уровня заболевания. Если установить на 1 - уровни не уменьшатся, когда значения осциллятора падают. Если он имеет значение 0,99 - уровни уменьшаются на 0,01 Каждый из них имеет осциллятор в 1% случаев и подталкивается к нулю более агрессивными.

.:: Образцы сглаженных уровней: Измерение числа средних с определением типа скользящих средних

.:: Тип уровня МО: Тип скользящей средней, средняя для формирования сглаживающей зоны перекупления и перепродажи

обратная проверка

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)

Связанные

Больше