用tidb 预测股票的涨跌。

这个预测方案是之前的阿里云方案做的tidb只做存存。后续更新8.1的功能。tidb已经加入了向量函数。估计很快能支持机器学习的各种函数。那就能实现本文作者所说的功能了。

按月预测

按月算收益 总有3个月是收益变负的

按年预测

按年算收益 总有1年是收益变负的

用到机器学习的一个函数

source :bill |select date_format(res.stamp, ‘%Y-%m-%d’) as time, res.real as “实际消费”,case when is_nan(res.real) then res.pred else null end as “预测消费”, res.instancesfrom( select sls_inner_ts_regression( cast(day as bigint), total, array [‘total’], 86400, 60 ) as res from ( select * from ( select *, max(day) over() as lastday from ( select to_unixtime(date_trunc(‘day’, time)) as day, sum(PretaxAmount) as total from ( select RecordID, arbitrary(time) as time, arbitrary(ProductCode) as ProductCode, arbitrary(item) as item, arbitrary(PretaxAmount) as PretaxAmount from log group by RecordID ) group by day order by day ) ) where day < lastday ) )limit 1000

用时序预测来预测

*and table: psin |select ts_regression_predict(stamp, value, 200, ‘linear’, 1, ‘avg’)from ( select stamp, value from log order by stamp limit 10000 )

后续更新代码。

整理出来的思路是配置定时任务把每日的股票价格存入tidb。每天增加新一天的股票价格

配置模拟仓位价格并计算股票的每日收益。并把历史收益填进去。用每日收益去计算出来每月收益和每年收益。

因为股票收益有涨跌。而且正好是一个圆弧形 就可以用账单预测函数去计算或者趋势周期预测。 这期间涉及好几个代码。录入股票数据的。

第一步录入数据库股票的价格

import yfinance as yf
import pymysql
from datetime import datetime, timedelta

Define database connection parameters

db_params = {
‘host’: ‘’,
‘user’: ‘username’,
‘password’: ‘pass1word’,
‘db’: ‘test’
}

Connect to the MySQL database

connection = pymysql.connect(**db_params)
cursor = connection.cursor()

Create a new table for NASDAQ 100 data

create_table_query = “”"
CREATE TABLE IF NOT EXISTS nasdaq_100ss (
s text,
date DATE,
open FLOAT,
high FLOAT,
low FLOAT,
close FLOAT,
adj_close FLOAT,
volume BIGINT
)
“”"
cursor.execute(create_table_query)

nasdaq_top_100 = # 请补全列表
import requests
from bs4 import BeautifulSoup

设置请求头部信息

headers = {
“user-agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36”
}

发送GET请求

res = requests.get("https://api.nasdaq.com/api/quote/list-type/nasdaq100", headers=headers)

解析JSON数据

main_data = res.json()[‘data’][‘data’][‘rows’]

打印公司名称

for i in range(len(main_data)):
print(main_data[i][‘symbol’])
nasdaq_top_100.append(main_data[i][‘symbol’])

for ticker_symbol in nasdaq_top_100:

获取股票数据

Calculate the date 10 years ago from today

ten_years_ago = datetime.now() - timedelta(days=3650)

Fetch the historical data from yfinance

data = yf.download(ticker_symbol, start=ten_years_ago.strftime(‘%Y-%m-%d’))

Insert the data into the MySQL table

insert_query = “”"
INSERT INTO nasdaq_100ss (s,date, open, high, low, close, adj_close, volume)
VALUES (%s,%s, %s, %s, %s, %s, %s, %s)
“”"
for date, row in data.iterrows():
cursor.execute(insert_query, (ticker_symbol,date.date(), row[‘Open’], row[‘High’], row[‘Low’], row[‘Close’], row[‘Adj Close’], row[‘Volume’]))

connection.commit()

Commit changes and close the connection

cursor.close()
connection.close()

第二步调用tidb的存储过程

每日用etl存储过程生成每日收益
可以手动录入也可以用代码

第三步用生成的日数据聚合生成月数据

月计算的依据是一个小时是3600秒

一天是24小时 一个月算30天 36002430

(* and s: GOOG)| select stamp, UV-lag(UV, 1, 0) over() as v from ( select FROM_UNIXTIME(date - date % 2592000) as stamp,avg(close) as UV from log GROUP BY stamp order by stamp limit 100000) order by stamp

第三步用生成的日数据聚合生成年数据

一是24小时 一年算365天 360024365

(* and s: GOOG)| select stamp, UV-lag(UV, 1, 0) over() as v from ( select FROM_UNIXTIME(date - date % 31536000) as stamp,avg(close) as UV from log GROUP BY stamp order by stamp limit 100000) order by stamp

第四步做预测

*and table: psin |select ts_regression_predict(stamp, value, 200, ‘linear’, 1, ‘avg’)from ( select stamp, value from log order by stamp limit 10000 )

source :bill |select date_format(res.stamp, ‘%Y-%m-%d’) as time, res.real as “实际消费”,case when is_nan(res.real) then res.pred else null end as “预测消费”, res.instancesfrom( select sls_inner_ts_regression( cast(day as bigint), total, array [‘total’], 86400, 60 ) as res from ( select * from ( select *, max(day) over() as lastday from ( select to_unixtime(date_trunc(‘day’, time)) as day, sum(PretaxAmount) as total from ( select RecordID, arbitrary(time) as time, arbitrary(ProductCode) as ProductCode, arbitrary(item) as item, arbitrary(PretaxAmount) as PretaxAmount from log group by RecordID ) group by day order by day ) ) where day < lastday ) )limit 1000

真实的代码如下

  • and s: MSFT | select ts_regression_predict(stamp, value, 200, ‘linear’, 1, ‘avg’)
    from (select
    stamp,
    UV-lag(UV, 1, 0) over() as value
    from (
    select (date - date % 2592000) as stamp,avg(close) as UV from log GROUP BY stamp order by stamp limit 100000) order by stamp)

这个是预测微软股票的涨跌幅的。微软真实股票的涨跌幅。和预测出来的 蓝色为真实。红色为预测。还是挺准的

而且你看预测整体股票的趋势是往上走。也就是一直盈利的。

原因是历史没有新鲜事。永远都是历史的重复。

预测出来年月的涨跌。你在跌的时候多买点。在涨的时候抛售就行。

原因是历史没有新鲜事。永远都是历史的重复。

预测出来年月的涨跌。你在跌的时候多买点。在涨的时候抛售就行。

1 个赞

这很🐮呀

膜拜大佬

:+1:这可Ti酷啦

厉害了

默默给你点赞

发家致富就靠tidb了

迪奥!

楼主的思路不错,对TIDB用途有了扩展

厉害了大佬

大佬厉害

佩服!

:+1: :+1: :+1:

tidb深入金融行业了吗。。

财富自由指日可待 :+1:

:+1: :+1: :+1:

说明楼主根本不懂金融市场,如果能预测都让你赚去了

可以,再升级优化一下,这就是类似在做量化交易的思路

牛牛牛

de老