レインボーオシレーター

作者: リン・ハーンチャオチャン開催日:2022年5月13日 22:38:03
タグ:エイマSMARMAWMA


特徴

.:: ダイナミックレベル この指標は,他のフィボナッチ数と相互に相関するレベル (価格逆転ゾーン) を構成する.各レベルは価格逆転の確率を引き起こす. すべてのレベルは,既存の非スムーズオシレーター値から形成されます.これは,あなたが回転ゾーンの値を固定しないように,例えば, -100と100,CCIで行うように RSI インジケーターの逆転ゾーンの値30と70です. ダイナミックレベルは振動器値のピークに調整され,価格逆転点をより頻繁に,より効率的に見つけることができます.

複合オシレーター (3 in 1) オシレーター線は,RSI,CCI,ストック指標の3つの測定からなる.同時に,設定のおかげで,インディケーターの1つを簡単に取り除くことができます.

.:: CCI + RSI + ストック比設定::. 計算式では,自然指標のそれぞれが独自の重みを有します:w2 * cci (+w1 * (rsi - 50) + (1 - w2 - w1) * (ストック - 50),これは,これらの様々な指標のいずれかに振動値を表示したり,それぞれの鋭さ重みを表示したりできます.

.:: オスイレーターの平滑レベルと線: オシレーター値を滑らかにすると,ノイズをフィルタリングし,より正確なデータを得ることができます.レベルを撫でると,入力遅延を調整できます.

.:: アパート中の活動:::: レベルをダイナミックに作成すると,価格がフラット (フラット) にある場合でも,価格逆転ゾーンで見つけることができます


設定

.:: RSI 体重 / CCI 体重 RSI と CCI インディケーターの重量制御係数,それぞれです. あなたがRSI 重量 = 0を設定すると,CCI とストックのコンボを等しくします. RSI 重量がゼロでCCI重量がオシレーター値に等しいとき,プロットされます. 中間値は0から100までの割合で3つのオシレーターのそれぞれを高く測定しています.計算は,w2 * cci (+w1 * (rsi - 50) + (1 - w2 - w1) * (ストック - 50) という式を使用します. ここでw1はRSI重量,w2はCCI重量である.Stockの重量は即座に (1 - w2 - w1) として計算されるので,w1 + w2の和は1を超えてはならない.この場合,StockはCCIとRSIとは対照的に動作する.

.:: オシロスコップ期::: これはすべての振動器の周期であり,すべてのパラメータで設定されています. おそらく,予想されているバージョンでは,周期が別々に設定されます.

.:: オシロスコープ MA 期間::. 振動器線の定期的なスムージング.ノイズの除去のために細かな調節に役立ちます.値が0を選択すると,スムージングは無効になり,オシロスコップサンプル設定は自動的に動作を停止します.

波形サンプル: 振動線の滑らかな量を設定することができます. 振動鏡 MAタイプ

.:: オシロスコップ MA型: オシレーターラインの滑り回りの移動平均周波数タイプ

レベル期: レインボー・オシレーター指標のレベル (ゾーン) を形成するために使用される周期的な移動平均値

レベルオフセット レベルを0点から移動するための追加設定.レベルを吸収し,入力信号をフィルタリングするのに役立ちます.デフォルトは0です.

冗長なレベル 病状のレベルの毎回の繰り返しの状態の重さを特徴づけます. 1 に設定された場合 - オシレーター値が落ちるときはレベルが減少しません. 0.99 の値がある場合 - レベルは0.01 減少します. 攻撃的なオシレーターによって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)

関連性

もっと