SyntaxError: невозможно назначить кодирование вызова функции в инструменте финансового анализа - PullRequest
0 голосов
/ 29 июня 2018
def SMMA(column,N):
    for i in range(len(column)):
        if i <= N:
            SMMA(i) = np.nan()
        elif i == N + 1:
            SMMA(i) = column[:N].mean()
        else:
            SMMA(i) = (SMMA(i-1)*N + column[i])/ N

Сглаженное скользящее среднее (SMMA) - один из моих любимых инструментов финансового анализа. Он отличается от хорошо известного инструмента Просто скользящее среднее. ниже приведено определение, а выше - мой код, но IDE постоянно сообщает мне об ошибке синтаксиса:

  File "<ipython-input-13-fdcc1fd914c0>", line 6
SMMA(i) = column[:N].mean()
^SyntaxError: can't assign to function call

Определение SMMA:

Первое значение этой сглаженной скользящей средней рассчитывается как простая скользящая средняя (SMA):

SUM1 = СУММА (ЗАКРЫТЬ (i), N)

SMMA1 = SUM1 / N

Второе скользящее среднее рассчитывается по следующей формуле:

SMMA (i) = (SMMA1 * (N-1) + ЗАКРЫТЬ (i)) / N

Последующие скользящие средние рассчитываются по следующей формуле:

PREVSUM = SMMA (i - 1) * N

SMMA (i) = (ПРЕДЫДУЩАЯ - SMMA (i - 1) + ЗАКРЫТЬ (i)) / N

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Что-то вроде этого вы имели в виду?

def SMMA(column,N):
    result = np.empty(len(column))
    for i, e in enumerate(column):
        if i <= N:
            result[i] = np.nan()
        elif i == N + 1:
            result[i] = column[:N].mean()
        else:
            result[i] = (result[i-1]*N + e) / N
    return result

Вы можете назначить нижний индекс как result[i] в Python.

Функция не будет ничего делать, если вы не вернете, не выдадите значение, не измените аргумент или что-то еще.

Приведенный выше код генерирует и возвращает массив с плавающей точкой NumPy, который может быть, а может и не быть тем, что вы хотите. (Если этого недостаточно, отредактируйте свой вопрос, чтобы уточнить предполагаемое использование.)

0 голосов
/ 29 июня 2018

SMMA (i) написано так, как будто вызывает функцию. Переменная может быть назначена на выход функции, но не имеет смысла вызывать функцию как переменную и устанавливать ее равной значению. Например, moving_average = SMMA (i) назначит переменную moving_average для вывода функции SMMA (i), но SMMA (i) = moving_average не имеет смысла. Надеюсь, я помог. `

SMMA(i) = 4
Traceback (most recent call last):
Python Shell, prompt 5, line 1
Syntax Error: can't assign to function call: <string>, line 1, pos 0

`

...