Оптимизация алгоритма Polars: динамическое скользящее окноPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Оптимизация алгоритма Polars: динамическое скользящее окно

Сообщение Anonymous »

Мне нужно рассчитать стабильные цены на финансовые инструменты на основе временных меток сделок и рыночных данных, используя поляры в Python. Однако я столкнулся с некоторыми трудностями при эффективной реализации этой функции.
Описание проблемы:
У меня есть два кадра данных pandas:market_data: содержит временные метки и соответствующие цены финансовых инструментов.
trades: содержит временные метки сделок, а также инструмент и объем торгов.
Пример данных:
  • Кадр данных о сделках:


временная метка
инструмент
количество




2024-01-01T09:02
AAPL
100


2024-01-01T09:07
GOOG
50


  • Рыночные данные:

timestamp
mid_price



2024-01-01T09:00:01
100.1


2024-01 -01T09:00:02
100.1


2024-01-01T09:00:03
100.13

2024-01-01T09:00:04
100.14


.. .
...


2024-01-01T23:59:58
101.3



Для каждой сделки в DataFrame сделок мне нужно вычислить стабильную цену инструмента, начиная с из временной метки сделки. Окончание периода стабильных цен определяется, когда изменение цен в скользящем окне рыночных данных превышает определенный порог. Кроме того, если окно стабильной цены превышает максимальный срок, мне нужно пропустить сделку и перейти к следующей.
Текущий подход:
Я реализовал функцию Compute_stable_price(), которая перебирает рыночные данные из временной метки сделки, проверяя изменение цены в скользящем окне до тех пор, пока оно не превысит пороговое значение или пока размер окна не превысит максимальный предел. Сделка пропускается, если размер окна превышает максимальный предел. Затем я применяю эту функцию к каждой метке времени сделки в DataFrame сделок.

Код: Выделить всё

# Function to compute stable price
def compute_stable_price(trade_timestamp, market_data, threshold=0.5, max_window=10):
trade_price = market_data.filter(pl.col("timestamp") == trade_timestamp)["price"][0]
start_index = market_data.filter(pl.col("timestamp") == trade_timestamp).head_index()[0]
end_index = start_index
window_size = 1
while end_index < len(market_data) - 1:
end_index += 1
window = market_data.slice(start_index, end_index + 1)["price"]
price_variation = window.pct_change().std()
if price_variation > threshold or window_size > max_window:
break
window_size += 1
if window_size 

Подробнее здесь: [url]https://stackoverflow.com/questions/77965034/optimizing-polars-algorithm-dynamic-rolling-window[/url]
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как рассчитать скользящее/скользящее среднее с помощью Python + NumPy/SciPy?
    Anonymous » » в форуме Python
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Создайте скользящее окно с предикатом
    Гость » » в форуме C++
    0 Ответы
    22 Просмотры
    Последнее сообщение Гость
  • Как преобразовать поток Java в скользящее окно?
    Anonymous » » в форуме JAVA
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Как преобразовать поток Java в скользящее окно?
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Как преобразовать поток Java в скользящее окно?
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous

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