Ниже скрипт, который я скопировал с 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)