Проблемы, возникающие при переводе Pine Script на PythonPython

Программы на Python
Ответить
Гость
 Проблемы, возникающие при переводе Pine Script на Python

Сообщение Гость »


У меня есть функция pine для расчета VMA, но когда я перевел ее в Python, результат отличается от результата Pine.

Например, результат Python — 1648,972734, а результат Pine — 1651,33.

Пример данных находится в https://gist.github.com/DNLINYJ/b06047b ... 87d6deb1de

Код VMA соснового сценария:

vma(len) => источник = закрыть к = 1,0/лен pdm = math.max((закрыть - закрыть[1]), 0) mdm = math.max((закрыть[1] - закрыть), 0) вар pdmS = float (на) pdmS := (1 - k) * nz(pdmS[1]) + k * pdm вар mdmS = float (на) mdmS := (1 - k) * nz(mdmS[1]) + k * mdm s = пдмС + мдмС pdi = pdmS/с мди = мдмС/с pdiS = число с плавающей запятой (на) pdiS := (1 - k) * nz(pdiS[1]) + k * pdi mdiS = с плавающей запятой (на) mdiS := (1 - k) * nz(mdiS[1]) + k * mdi d = math.abs(pdiS - mdiS) s1 = pdiS + mdiS вар iS = число с плавающей запятой (на) iS := (1 - k) * nz(iS[1]) + k * d / s1 hhv = ta.highest(iS, len) llv = ta.lowest(iS, len) d1 = hhv - llv vI = (iS - llv)/d1 вар vma = float (на) vma := (1 - k*vi)*nz(vma[1]) + k*vi*src вма Код VMA сценария Python:
def Calculate_vma(df, длина): df['pdm'] = np.where(df['Close'].diff(1) > 0, df['Close'].diff(1), 0) df['mdm'] = np.where(-df['Close'].diff(1) > 0, -df['Close'].diff(1), 0) df['pdmS'] = df['pdm'].ewm(span=длина, настройка=False).mean() df['mdmS'] = df['mdm'].ewm(span=длина, настройка=False).mean() df['s'] = df['pdmS'] + df['mdmS'] df['pdi'] = df['pdmS'] / df['s'] df['mdi'] = df['mdmS'] / df['s'] df['pdiS'] = df['pdi'].ewm(span=длина, настройка=False).mean() df['mdiS'] = df['mdi'].ewm(span=длина, настройка=False).mean() df['d'] = np.abs(df['pdiS'] - df['mdiS']) df['s1'] = df['pdiS'] + df['mdiS'] df['iS'] = df['d'] / df['s1'] df['iS'] = df['iS'].ewm(span=длина, настройка=False).mean() df['hhv'] = df['iS'].rolling(длина).max() df['llv'] = df['iS'].rolling(длина).min() df['d1'] = df['hhv'] - df['llv'] df['vI'] = (df['iS'] - df['llv']) / df['d1'] k = 1,0 / длина df = df.iloc[lenght:, :] # Удалить первые строки длиной len-1 vmas = [df['Close'].iat[0]] # Инициализируем значения vma для i в диапазоне (1, len(df)): vma = (1 - k * df['vI'].iat) * vmas + k * df['vI'].iat * df['Close'].iat[ я] vmas.append(vma) df['vma'] = vmas # Назначаем vma df возврат DF
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»