每日股票监控器
对于非全职股民来说,很难日日盯盘,但又不想错过股市的赚钱机会,希望有个帮忙盯盘的小助手,因此开发个股票小助理
主要功能:
- 下载A股每日k线数据
- 计算每只股票的M5上穿M10时间
- 如果股票当前是M5上穿M10 并且距离M5下穿M10大于60天 则告诉我
- 如果股票当前是M5上穿M10 并且在我设置的股票列表中,则告诉我
- 如果被监控的股票价格在我设置的区间 则告诉我
股票源代码类似如下所示
'''
每日20点 运行
更新当天数据 从baostock
功能列表:
如果目录不存在 下载 最近10年数据
如果是新上市股票 则下载 最近 一年 数据
计算每只股票的 最后一个M5下穿M10的日期
计算每只股票的 M5上穿M10 如果在监控列表则报警
如果被监控股票的价格在设置区间,则报警
'''
import baostock as bs
import pandas as pd
from datetime import datetime,timedelta
from datetime import date
import os
import numpy as np
from CorpApi import CorpApi,CORP_API_TYPE
import random
import requests
# 保存每个股票的数据
data_path = 'test-all'
# M5下穿M10的日期列表
file_path = r'm5-m10-last.csv'
today_file_path = r'today_m5-m10-last.csv'
nday = 60 #m5下穿m10 和m5上穿m10 间隔60天
monitor_code_list = ['601636']
# 发送通知消息
def send_msg(message):
return response
def get_stocker_num(code):
ret_data = {}
try:
url = 'https://hq.sinajs.cn/list=%s' % code
ret = requests.get(url)
if ret.status_code == 200:
data = str(ret.content,encoding='gb2312')
for item in data.split('\n'):
if len(item) > 10:
k = item.split('=')[0].replace('var hq_str_','')
shuzu = item.split(',')
if k.startswith('s_'):
ret_data[k] = str(shuzu[1])
else:
ret_data[k] = float(shuzu[3])
return ret_data
except Exception as e:
print(str(e))
print_except(sys._getframe().f_code.co_name, sys.exc_info(), e)
return None
'''
判断股票价格是否在设置的区间
'''
def start_monitor():
# 判断今天是否是周末
dt = date.today()
nw = dt.weekday()
if nw == 5: # 周六
send_mssage_alert('monitor stock is running')
return
elif nw == 6:
return
# 周一到周五
# 先判断指定股票是否达到特定值
try:
list_keys = 's_sz399001,s_sh000001'
data = {}
data['sh601636'] = '14:30' # 旗滨集团
data['sz002714'] = '45:100' # 牧原股份
gplist = {}
for k in data.keys():
list_keys = list_keys + ',' + k
gplist = get_stocker_num(list_keys)
for k in data.keys():
v = data[k]
now_v = gplist[k]
if now_v == 0:
continue
min = float(v.split(':')[0])
max = float(v.split(':')[1])
if now_v < float(min) or now_v > max:
message = '上证指数:' + gplist['s_sh000001'] + '\n' + '深证成指:' + gplist['s_sz399001']
message = message + '\n\n股票:' + k + '\n当前价格:' + str(now_v) + '\n监控值:' + v
message = message + '\nhttps://quote.eastmoney.com/%s.html' % str(k)
send_mssage_alert(message)
except Exception as e:
print_except(sys._getframe().f_code.co_name, sys.exc_info(), e)
'''
下载 历史数据
'''
def download_data(date,start_data,end_date):
bs.login()
# 获取指定日期的指数、股票数据
stock_rs = bs.query_all_stock(date)
stock_df = stock_rs.get_data()
data_df = pd.DataFrame()
for code in stock_df["code"]:
#print("Downloading :" + code)
if code.startswith('bj'):
continue
k_rs = bs.query_history_k_data_plus(code, "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,peTTM,pbMRQ,psTTM,pcfNcfTTM,isST",
start_date=start_data, end_date=end_date,
frequency="d", adjustflag="3")
data_list = []
while (k_rs.error_code == '0') & k_rs.next():
# 获取一条记录,将记录合并在一起
data_list.append(k_rs.get_row_data())
result = pd.D