问题描述
我需要一些逻辑方面的帮助。我正在使用 pyodbc 在 SQL 中查询一个表并构建一个数据框,以便使用 ta-lib 来计算技术指标,但正在发生的是它根据所有股票的运行记录计算指标,而不是为每个行情。因此,对于表中的第一个股票代码,一切正常(我将展示一个示例)但是当股票代码更改时,它不会再次开始重新计算。我首先查询该表以将唯一的股票行情列表放入一个数据框中,然后在我的“for”语句中使用该列表,认为它会为每个行情进行计算,并在遇到新行情时重新开始。
这是我的糟糕结果最终的样子:
你可以看到当它到达 APTV-PA 时,它不会重新开始。如果是这样,第一天的 SMA 将超过 100。(从技术上讲,这将是一个空值,因为 SMA 是 30 天移动平均线,所以每个股票的前 29 天应该有空值。这是另一种简单的方法让我告诉它不能正常工作。 任何帮助深表感谢。谢谢
import pandas as pd
import pyodbc
import talib
from talib import (WILLR,SMA)
path = 'H:\\EOD_DATA_HISTORICAL\\INDICATORS\\MISC\\'
DB_READ = {'servername': 'XYZ\XYZ','database': 'olaptraderv4'}
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=' + DB_READ['servername'] + ';DATABASE=' + DB_READ['database'] + ';Trusted_Connection=yes')
sql1 = """
SELECT distinct [Ticker] FROM olaptraderv4.dbo.MiscHistorical order by Ticker
"""
ticker_list = pd.read_sql(sql1,conn)
print(ticker_list)
sql2 = """
SELECT [Ticker],[Date],[Open],[High],[Low],[Close],[Volume] FROM olaptraderv4.dbo.MiscHistorical order by Ticker
"""
df1 = pd.read_sql(sql2,conn)
print(df1.tail(2))
for Ticker in ticker_list:
#df1['WILLR'] = WILLR(df1['High'],df1['Low'],df1['Close'],timeperiod=14).round(3)
df1['SMA'] = SMA(df1['Close'],timeperiod=30).round(3)
df1.to_csv('3.csv',index=False,header=True)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)