Oscillator Pelangi

Penulis:ChaoZhang, Tarikh: 2022-05-13 22:38:03
Tag:EMASMARMAWMA


Ciri

.:: Tahap dinamik Penunjuk ini terdiri daripada tahap (zon pembalikan harga) yang berkorelasi antara satu sama lain dengan nombor Fibonacci yang lain. Setiap tahap menyebabkan kebarangkalian pembalikan harga. Semua tahap terbentuk dari nilai pengayun yang tidak halus yang sedia ada. ini membolehkan anda untuk tidak menetapkan ambang zon belokan, sebagai contoh, -100 dan 100, seperti yang dilakukan dalam CCI atau nilai 30 dan 70 untuk zon pembalikan dalam penunjuk RSI. paras dinamik menyesuaikan diri dengan lonjakan dalam nilai osilator dan membolehkan anda mencari titik pembalikan harga lebih kerap dan tidak kurang cekap.

.:: Osilator komposit (3 dalam 1) ::. Garis osilator terdiri daripada tiga pengukuran RSI, CCI, Indikator stok sekaligus dalam peratusan yang luas. Pada masa yang sama, terima kasih kepada tetapan, anda boleh dengan mudah menyingkirkan salah satu penunjuk.

.:: Pengaturan CCI + RSI + Stoch ratio: Setiap penunjuk semula jadi mempunyai beratnya sendiri dalam formula pengiraan: w2 * cci ( + w1 * (rsi - 50) + (1 - w2 - w1) * (stoch - 50), ini membolehkan anda melihat osilator kepada mana-mana daripada pelbagai penunjuk ini atau berat ketajaman untuk setiap

.:: Tahap dan garis pelincir pengayun: Menata nilai osilator membolehkan anda menapis bunyi bising dan mendapatkan data yang lebih tepat. Memeluk tahap membolehkan anda menyesuaikan kelewatan input.

.:: Aktiviti semasa APARTEMEN::. Penciptaan dinamik tahap membolehkan anda mencari di zon pembalikan harga, walaupun apabila harga adalah dalam rata (datar)


Tetapan

.:: berat RSI / berat CCI Koefisien kawalan berat untuk penunjuk RSI dan CCI, masing-masing. Apabila anda menetapkan RSI Berat = 0, menyamakan combo CCI dan Stoch, apabila RSI Berat adalah sifar dan CCI Berat sama dengan nilai pengayun akan digambarkan hanya dari Stoch. nilai-nilai perantaraan mempunyai tahap tinggi pengukuran masing-masing daripada tiga pengayun dalam istilah peratusan dari 0 hingga 100. Pengiraan menggunakan formula: w2 * cci ( + w1 * (rsi - 50) + (1 - w2 - w1) * (stoch - 50), di mana w1 adalah RSI Berat dan w2 adalah CCI Berat, Stoch berat dikira pada terbang sebagai (1 - w2 - w1), jadi jumlah w1 + w2 tidak boleh melebihi 1, dalam kes ini Stoch akan bekerja sebagai lawan kepada CCI dan RSI.

.:: Tempoh osiloskop: Ini adalah tempoh semua pengayun, ia ditetapkan oleh satu parameter untuk semua.

.:: Oscilloscope M.A. Tempoh: Penghalusan berkala garis osilator. Berkhidmat untuk penyesuaian yang lebih halus untuk menghapuskan bunyi bising. Jika anda memilih nilai 0, penghalusan dimatikan dan tetapan Sampel Osiloskop akan berhenti berfungsi secara automatik.

.:: Sampel bentuk gelombang: tetapan membolehkan anda untuk menetapkan jumlah kelancaran untuk garis osilator.

.:: Oscilloscope MA Jenis Jenis frekuensi purata bergerak untuk garis gelincir osilator

.:: Tempoh paras: Purata bergerak berkala yang digunakan untuk membentuk tahap (zon) penunjuk Oscillator Pelangi

.:: Perpindahan paras: tetapan tambahan untuk menggeser tahap dari titik sifar. boleh berguna untuk menyerap tahap dan menapis isyarat input. lalai adalah 0.

.:: Tahap yang tidak diperlukan: Ia mencirikan keparahan keadaan keadaan pada setiap pengulangan tahap penyakit. Jika ditetapkan kepada 1 - tahap tidak akan menurun apabila nilai osilator jatuh. Jika mempunyai nilai 0.99 - tahap dikurangkan sebanyak 0.01 masing-masing mempunyai osilator dalam 1% kes dan ditekan ke 0 oleh yang lebih agresif.

.:: Sampel tahap yang diluruskan: Pengukuran bilangan purata dengan definisi jenis purata bergerak

.:: Jenis tahap MA: Jenis purata bergerak, purata untuk pembentukan zon overbought dan oversold rata

Ujian belakang

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)

Berkaitan

Lebih lanjut