【问题标题】:need to calculate a stock indicator from raw data in SQL for each individual stock ticker using TA-LIB and python, pandas需要使用 TA-LIB 和 python、pandas 从 SQL 中的原始数据计算每个股票代码的股票指标
【发布时间】:2021-01-19 22:38:54
【问题描述】:

我在这里需要一些逻辑方面的帮助。我正在使用 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)

【问题讨论】:

  • 在代码循环通过ticker_list时将过滤器应用于sql2。

标签: sql pandas pyodbc ta-lib


【解决方案1】:

我决定只写分组“groupby”子句,然后将 .csv 写入单个文件。 这是代码。仅最后 5 行

for Ticker, df1 in df1.groupby('Ticker'):
    df1['SMA'] = SMA(df1['Close'], timeperiod=30).round(3)
    df1['WILLR'] = WILLR(df1['High'], df1['Low'], df1['Close'], timeperiod=14).round(3)

    df1.to_csv(path+'{}.csv'.format(Ticker), mode='w', header=True, index=False, index_label=False)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2011-03-15
    • 2021-09-21
    • 2011-10-20
    相关资源
    最近更新 更多