SyntaxError: невозможно назначить кодирование вызова функции в инструменте финансового анализа
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
3 ответа
Это то, что вы имели в виду?
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, который может быть или не быть тем, что вы хотите. (Если этого недостаточно, отредактируйте свой вопрос, чтобы уточнить предполагаемое использование.)
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
`
Для этого я рекомендую использовать простой расчет EMA.
SMMA по сути является EMA, но с другой длиной.
Для SMMA(x) я сделаю EMA(x*2-1)