Разница между одним значением и серией - PullRequest
0 голосов
/ 06 января 2020

Ниже скрипт, который я скопировал с tradingview.com. Я пытаюсь понять язык и хочу перевести скрипт на Python. страница ссылки https://www.tradingview.com/chart/0AZVjf79/ индикатор называется Ehlers Instantaneous Trendline, созданный Алексом Ореховым (everget)

Есть несколько предложений, которые меня озадачивают. 1. «periodMult» в функции «computeComponent (sr c, periodMult)» одно значение или серия? 2. В функции '_eit (sr c)' все рассчитывается как ряд? Таким образом, чтобы перевести на Python, их должно быть несколько итераций? 3. есть ли итерация для smoothPeriod? 4. dcPeriod - одно значение или серия? 5. Как работает целочисленное значение для 'от i = 0 до dcPeriod - 1'? направление отличается от python тогда? Спасибо !!!

    //@version=3
// Copyright (c) 2018-present, Alex Orekhov (everget)
// Ehlers Instantaneous Trendline script may be freely distributed under the MIT license.
study("Ehlers Instantaneous Trendline", shorttitle="EIT", overlay=true)

src = input(title="Source", type=source, defval=close)
applyFilling = input(title="Apply Ribbon Filling ?", type=bool, defval=true)

// Truncated Hilbert transform
hilbertTransform(src) =>
    0.0962 * src + 0.5769 * nz(src[2]) - 0.5769 * nz(src[4]) - 0.0962 * nz(src[6])

computeComponent(src, periodMult) =>
    hilbertTransform(src) * periodMult

computePart(src) =>
    0.2 * src + 0.8 * nz(src[1])

// FIR Filter
_fir(src) =>
    (4 * src + 3 * nz(src[1]) + 2 * nz(src[2]) + nz(src[3])) / 10

fir = _fir(src)

_eit(src) =>
    PI = 2 * asin(1)

mesaPeriod = 0.0
mesaPeriodMult = 0.075 * nz(mesaPeriod[1]) + 0.54

detrender = 0.0
detrender := computeComponent(fir, mesaPeriodMult)

// Compute InPhase and Quadrature components
I1 = nz(detrender[3])
Q1 = computeComponent(detrender, mesaPeriodMult)

// Advance the phase of I1 and Q1 by 90 degrees
jI = computeComponent(I1, mesaPeriodMult)
jQ = computeComponent(Q1, mesaPeriodMult)

I2 = 0.0
Q2 = 0.0

// Phasor addition for 3 bar averaging
I2 := I1 - jQ
Q2 := Q1 + jI

// Smooth the I and Q components before applying the discriminator
I2 := computePart(I2)
Q2 := computePart(Q2)

// Homodyne Discriminator
Re = I2 * nz(I2[1]) + Q2 * nz(Q2[1])
Im = I2 * nz(Q2[1]) - Q2 * nz(I2[1])

Re := computePart(Re)
Im := computePart(Im)

if Re != 0 and Im != 0
    mesaPeriod := 2 * PI / atan(Im / Re)

if mesaPeriod > 1.5 * nz(mesaPeriod[1])
    mesaPeriod := 1.5 * nz(mesaPeriod[1])

if mesaPeriod < 0.67 * nz(mesaPeriod[1])
    mesaPeriod := 0.67 * nz(mesaPeriod[1])

if mesaPeriod < 6
    mesaPeriod := 6

if mesaPeriod > 50
    mesaPeriod := 50

mesaPeriod := 0.2 * mesaPeriod + 0.8 * nz(mesaPeriod[1])

smoothPeriod = 0.0
smoothPeriod := 0.33 * mesaPeriod + 0.67 * nz(smoothPeriod[1])

// Compute Trendline as a SMA over the measured dominant cycle period
dcPeriod = floor(smoothPeriod + 0.5)

if dcPeriod < 1
    dcPeriod := 1

itrend = 0.0

for i = 0 to dcPeriod - 1
    itrend := itrend + src[i]

if dcPeriod > 0
    itrend := itrend / dcPeriod

eit = _fir(itrend)

if n < 12
    eit := src
eit

eit = _eit(src)

eitPlot = plot(eit, title="Trendline", linewidth=2, color=orange, transp=0)
firPlot = plot(fir, title="Price", linewidth=2, color=#6d1e7f, transp=0)

fillColor = applyFilling ? (fir > eit ? #0ebb23 : #cc0000) : color(white, 100) 
fill(firPlot, eitPlot, color=fillColor, transp=80)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...