레인보우 오시레이터

저자:차오장, 날짜: 2022-05-13 22:38:03
태그:EMASMARMAWMA


특징

.:: 동적 수준: 이 지표는 다른 피보나치 수치와 서로 상관관계를 갖는 레벨 (가격 반전 지역) 으로 구성됩니다. 각 레벨은 가격 반전의 가능성을 유발합니다. 모든 수준은 기존 비 평탄 오시레이터 값에서 형성됩니다. 이것은 당신이 전환 구역의 문턱을 고정하지 않도록 허용합니다. 예를 들어, -100 및 100, CCI에서 수행되는 것처럼 또는 RSI 지표의 반전 구역의 값 30 및 70. 동적 레벨은 오시레이터 값의 스파이크에 조정되며 가격 반전 지점을 더 자주 그리고 덜 효율적으로 찾을 수 있습니다.

.:: 복합 오시레이터 (3 in 1) 오시일레이터 라인은 세 가지 측정으로 구성됩니다 RSI, CCI, 스톡 지표 한 번에 넓은 비율로. 동시에, 설정 덕분에, 당신은 쉽게 지표 중 하나를 제거 할 수 있습니다.

.:: CCI + RSI + 스톡 비율 설정: 자연 지표의 각각의 계산 공식에 자신의 무게를 가지고 있습니다: w2 * cci (+ w1 * (rsi - 50) + (1 - w2 - w1) * (주식 - 50), 이것은 당신이 각 각 지표 또는 선명성 무게에 대한 각 다른 지표의 오시레이터 볼 수 있습니다

.:: 오시일레이터의 평형 레벨과 라인: 오시일레이터 값을 매끄럽게하면 소음을 필터링하고 더 정확한 데이터를 얻을 수 있습니다. 레벨을 만지는 것은 입력의 지연을 조정 할 수 있습니다.

.:: 아파트 동안 활동:::: 레벨의 동적 생성 당신은 가격 반전 구역에서 찾을 수 있습니다, 심지어 가격이 평면 (평면) 에있을 때


설정

.:: RSI 가중 / CCI 가중 RSI와 CCI 지표에 대한 무게 제어 계수, 각각. 당신은 RSI 무게 = 0을 설정 할 때, CCI와 스톡의 콤보를 동등, RSI 무게가 0이고 CCI 무게가 오시일레이터 값과 같을 때 그래프화됩니다 중간 값은 0에서 100까지의 비율로 세 오시레이터 각각을 높게 측정합니다. 계산은 w2 * cci (+ w1 * (rsi - 50) + (1 - w2 - w1) * (stoch - 50), 여기서 w1는 RSI 무게이고 w2는 CCI 무게입니다. 스톡 무게는 (1 - w2 - w1) 로 계산됩니다. 따라서 w1 + w2의 합은 1을 초과해서는 안 됩니다. 이 경우 스톡은 CCI와 RSI와 달리 작동합니다.

오실로스코프 기간: 이것은 모든 오시레이터의 기간입니다. 모든 오시레이터에 대한 하나의 매개 변수로 설정됩니다. 아마도 예상 버전에서는 기간이 별도로 구성 될 것입니다.

오실로스코프 M.A. 기간: 오시일레이터 라인의 주기적인 평형화. 소음을 제거하기 위해 더 세밀하게 조정하는 데 사용됩니다. 0의 값을 선택하면 평형화가 비활성화되고 오시일로스코프 샘플 설정이 자동으로 작동을 멈추게됩니다.

.:: 파동형 표본: 설정은 오시일레이터 라인의 평평화량을 설정할 수 있습니다. 오시로스코프 MA 유형

.:: 오실로스코프 MA 타입: 오시레이터 라인 슬라이딩의 이동 평균 주파수 유형

.:: 레벨 기간: 레인보우 오시레이터 지표의 레벨 (존) 을 형성하는 데 사용되는 주기적으로 움직이는 평균

.:: 레벨 오프셋: 0점부터 레벨을 이동하는 추가 설정. 레벨 흡수 및 입력 신호 필터링에 유용 할 수 있습니다. 기본값은 0입니다.

.:: 불필요한 수준: 질병의 레벨의 각 반복에서 상태의 심각성을 특징으로합니다. 1로 설정되면 오시레이터 값이 떨어지면 레벨이 감소하지 않습니다. 0.99의 값이있는 경우 레벨이 0.01로 감소합니다. 각각의 오시레이터는 1%의 경우 오시레이터를 가지고 있고 더 공격적인 경우 0으로 압축됩니다.

.:: 평평한 레벨의 표본: 설정은 레벨 당 스트로크의 수를 설정할 수 있습니다. 이동 평균의 유형 정의와 평균의 수를 측정

.:: MA 레벨의 종류: 이동 평균의 종류, 평형 과잉 구매 및 과잉 판매 구역의 형성 평균

백테스트

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)

관련

더 많은