Запрещено изменять предыдущие значения серииPython

Программы на Python
Ответить
Anonymous
 Запрещено изменять предыдущие значения серии

Сообщение Anonymous »

Я разрабатываю собственный индикатор в Indie Script, который рассчитывает волатильность и доходность с поправкой на риск. После исправления исходных ошибок в формуле я столкнулся с ошибкой:

запрещено изменять предыдущие значения ряда

Цель:
Рассчитать три показателя:
  • Стандартное отклонение доходности.
  • Шарп Соотношение (доходность с поправкой на риск).
  • Волатильность ARCH (упрощенно).
Проблема:
Ошибка возникает при попытке заполнить исторические значения серии доходности. Вот проблемный фрагмент кода:
# Attempting to populate returns series
returns = MutSeriesF.new(0)
for i in range(1, len(self.close)):
returns = (self.close - self.close[i-1]) / self.close[i-1] # Error here

Что я понимаю:
  • Инди-версия ограничивает изменение прошлых значений серии.
  • MutSeriesF может разрешать обновление только текущего индекса (например, [0]), а не исторических значений (например, ).

Вопрос:
Как правильно вычислить серию исторических доходностей и квадратов остатков, не нарушая правило «не изменять значения прошлых серий»?
Попытка Решения:
  • Пытался использовать MutSeriesF.new() для инициализации изменяемой серии.
  • Искал встроенные функции, такие как pct_change(), но в Indie их нет.

Полный код:
# indie:lang_version = 5
import math
from indie import indicator, param, plot, color, SeriesF, MutSeriesF
from indie.algorithms import StdDev, Sma

@indicator('Advanced Volatility and Risk-Adjusted Return Indicator', overlay_main_pane=False)
@param.int('stddev_length', default=20, min=1, title='Standard Deviation Length')
@param.int('sma_length', default=20, min=1, title='SMA Length for Returns')
@param.float('risk_free_rate', default=0.01, title='Risk-Free Rate')
@param.int('arch_lag', default=5, min=1, title='ARCH Lag')
@plot.line('Standard Deviation', color=color.YELLOW)
@plot.line('Sharpe Ratio', color=color.BLUE)
@plot.line('ARCH Volatility', color=color.RED)
def Main(self, stddev_length, sma_length, risk_free_rate, arch_lag):
# 1. Calculate daily returns (percentage change)
returns = MutSeriesF.new(0)
for i in range(1, len(self.close)):
returns = (self.close - self.close[i-1]) / self.close[i-1] if self.close[i-1] != 0 else 0

# 2. Standard Deviation of returns (not prices)
stddev = StdDev.new(returns, stddev_length)[0]

# 3. Sharpe Ratio calculation
avg_returns = Sma.new(returns, sma_length)[0]
excess_returns = avg_returns - risk_free_rate
sharpe_ratio = excess_returns / stddev if stddev != 0 else 0

# 4. ARCH Volatility (GARCH(1,1) simplified)
squared_residuals = MutSeriesF.new(0)
for i in range(len(returns)):
squared_residuals = returns ** 2 # Using squared returns as ARCH input

arch_volatility = math.sqrt(Sma.new(squared_residuals, arch_lag)[0])

return (
plot.Line(stddev),
plot.Line(sharpe_ratio),
plot.Line(arch_volatility)
)


Подробнее здесь: https://stackoverflow.com/questions/795 ... the-series
Ответить

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

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

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

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

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