#sql #pandas #ta-lib
#sql #pandas #ta-lib
Вопрос:
Я запрашиваю sql, где указаны необработанные символы OHLC, Volume и Ticker, и вычисляю технические индикаторы с помощью библиотеки ta-lib. Я хочу записать фрейм данных в csv (df.to_csv) для каждого отдельного тикера в таблице. К сожалению, когда я пытаюсь вычислить скользящее среднее, оно объединяет все тикеры вместе и выполняет скользящее среднее по всем из них, а не для каждого символа тикера. Используя цикл FOR для каждого тикера, я надеюсь, что смогу правильно вычислять значения и записывать во многие разные csv. вот что у меня есть, и я хотел бы знать, как заменить «1.csv» на нужные мне несколько выходных файлов.
import pandas as pd
import pyodbc
#import talib
from talib import (SMA)
DB_READ = {'servername': 'XYZXYZ',
'database': 'olaptraderv4'}
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=' DB_READ['servername'] ';DATABASE=' DB_READ['database'] ';Trusted_Connection=yes')
sql = """
SELECT [Ticker], [Date], [Open], [High], [Low], [Close], [Volume] FROM olaptraderv4.dbo.MiscHistorical order by Ticker
"""
for Ticker in sql:
df = pd.read_sql(sql, conn)
df.groupby('Ticker')
df['SMA'] = SMA(df['Close'], timeperiod=30).round(3)
df.to_csv('1.csv', index=False, header=True)
print(df.tail(7))
Ответ №1:
Вы можете сделать это непосредственно в SQL, используя функцию window, хотя мне неясно, действительно ли вы хотите сгруппировать результат ( PARTITION BY
предложение needs) или получить его по всему результирующему набору:
SMA = AVG(Close) OVER (ORDER BY Date ROWS BETWEEN 29 PRECEDING AND CURRENT ROW)
SMA = AVG(Close) OVER (PARTITION BY grouping_column ORDER BY Date ROWS BETWEEN 29 PRECEDING AND CURRENT ROW)
Обратите внимание, что это работает только с нумерацией строк, а не с фактическими промежутками дат, поэтому, если у вас несколько тикеров в один и тот же день, вам нужно более сложное решение.
Кроме того, в первых 29 строках не будет 30 строк данных для усреднения, потому что этих строк нет. Возможно, вам все еще нужен результат.
Комментарии:
1. Спасибо, но у меня на самом деле есть еще около 40 других технических индикаторов для расчета, поэтому мне нужно использовать ta-lib. Я просто привел SMA в качестве примера здесь.