问题描述
我正在查询原始 OHLC、成交量和股票代码所在的 sql,并使用 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': 'XYZ\XYZ','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))
解决方法
您可以使用窗口函数直接在 SQL 中执行此操作,但我不清楚您是否真的想要对结果进行分组(需要 <div class="d-flex">
...
<!-- size xs: use text above input. -->
<div class="d-block d-sm-none mx-auto my-0 text-center">
LABEL TEXT
<div class="d-flex flex-row">
<input id="input-narrow" class="mx-auto my-0 p-1 text-center">
</div>
</div>
<!-- size sm and up: use placeholder -->
<div class="d-none d-sm-flex flex-row flex-nowrap mx-auto my-0">
<input id="input-wide" class="mx-auto my-0 p-1 text-center" placeholder="LABEL TEXT">
</div>
...
</div>
子句),或者在整个结果集中获取它:
PARTITION BY
请注意,这仅适用于行编号,而不适用于实际日期跨度,因此如果您在同一天有多个股票代码,则需要更复杂的解决方案。
此外,前 29 行不会有 30 行数据需要平均,因为没有那些行。您可能仍然想要结果。