jupyterlab

jupyterlab项目
This commit is contained in:
512song committed 2021-03-07 19:16:41 +08:00
commit ad0d0a5396
11 files changed
+6187

No files matched your search

+499
View File
@@ -0,0 +1,499 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 股票管理"
]
},
{
"cell_type": "markdown",
"metadata": {
"toc-hr-collapsed": true,
"toc-nb-collapsed": true
},
"source": [
"## 股票信息导入"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import baostock as bs\n",
"import pandas as pd\n",
"\n",
"#### 登陆系统 ####\n",
"lg = bs.login()\n",
"# 显示登陆返回信息\n",
"print('login respond error_code:'+lg.error_code)\n",
"print('login respond error_msg:'+lg.error_msg)\n",
"\n",
"#### 获取证券信息 ####\n",
"rs = bs.query_all_stock(day=\"2020-10-20\")\n",
"print('query_all_stock respond error_code:'+rs.error_code)\n",
"print('query_all_stock respond error_msg:'+rs.error_msg)\n",
"\n",
"#### 打印结果集 ####\n",
"data_list = []\n",
"while (rs.error_code == '0') & rs.next():\n",
" # 获取一条记录,将记录合并在一起\n",
" data_list.append(rs.get_row_data())\n",
"#results = pd.DataFrame(data_list, columns=rs.fields)\n",
"\n",
"#### 结果集输出到csv文件 #### \n",
"#result.to_csv(\"all_stock.csv\", encoding=\"utf-8\", index=False)\n",
"for result in data_list:\n",
" print(result)\n",
"\n",
"#### 登出系统 ####\n",
"bs.logout()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import baostock as bs\n",
"import pandas as pd\n",
"import pymysql\n",
"\n",
"# 登陆系统\n",
"lg = bs.login()\n",
"# 显示登陆返回信息\n",
"print('login respond error_code:'+lg.error_code)\n",
"print('login respond error_msg:'+lg.error_msg)\n",
"\n",
"# 获取证券基本资料\n",
"rs = bs.query_stock_basic(code=\"\")\n",
"# rs = bs.query_stock_basic(code_name=\"浦发银行\") # 支持模糊查询\n",
"print('query_stock_basic respond error_code:'+rs.error_code)\n",
"print('query_stock_basic respond error_msg:'+rs.error_msg)\n",
"\n",
"# 打印结果集\n",
"data_list = []\n",
"while (rs.error_code == '0') & rs.next():\n",
" # 获取一条记录,将记录合并在一起\n",
" data_list.append(rs.get_row_data())\n",
"#result = pd.DataFrame(data_list, columns=rs.fields)\n",
"# 结果集输出到csv文件\n",
"#result.to_csv(\"D:/stock_basic.csv\", encoding=\"gbk\", index=False)\n",
"\n",
"db = pymysql.connect(\"localhost\",\"root\",\"songyi\",\"stock\" )\n",
"cursor = db.cursor()\n",
"\n",
"sql = \"insert into stock_info (code,name,ipoDate,outDate,type,status) values(%s,%s,%s,%s,%s,%s)\"\n",
"try:\n",
" cursor.executemany(sql,tuple(data_list))\n",
" db.commit()\n",
" print(\"ok!\")\n",
"except:\n",
" # 如果发生错误则回滚\n",
" print(\"error!\")\n",
" db.rollback() \n",
"db.close()\n",
"# 登出系统\n",
"bs.logout()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 每日持有标的信息导入"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import csv\n",
"import pymysql\n",
"\n",
"def read_data(filename):\n",
" detail = {}\n",
" with open(filename) as f:\n",
" reader = csv.reader(f)\n",
" #header_row =next(reader)\n",
" for row in reader:\n",
" detail.setdefault(row[0],[])\n",
" detail[row[0]].append(row[1])\n",
" return detail\n",
"m_xx = []\n",
"m_stock = {}\n",
"db = pymysql.connect(\"localhost\",\"root\",\"songyi\",\"stock\" )\n",
"cursor = db.cursor()\n",
"sql = 'select code,name from stock_info where type=\"1\"'\n",
"cursor.execute(sql)\n",
"results = cursor.fetchall()\n",
"for result in results:\n",
" m_stock[result[0]] = result[1]\n",
"#print(m_stock)\n",
"filename = '每日标的信息.csv'\n",
"detail = read_data(filename)\n",
"for k,v in detail.items():\n",
" m_rq = '2020-' + k[0:2] + '-' + k[2:]\n",
" i = 1\n",
" for m_dm in v:\n",
" if m_dm[0:1] == '6':\n",
" m_dm = 'sh.' + m_dm\n",
" else:\n",
" m_dm = 'sz.' + m_dm\n",
" print('\\t'+m_dm + '\\t'+m_stock[m_dm])\n",
" m_xx.append((m_rq,m_dm,i))\n",
" i += 1\n",
"choice = input('以上为本日数据,是否导入?(y/n)')\n",
"if choice.upper() == \"Y\":\n",
" sql = \"insert into daily_item (rq,code,ord) values(%s,%s,%s)\"\n",
" try:\n",
" cursor.executemany(sql,m_xx)\n",
" db.commit()\n",
" print(\"ok!\")\n",
" except:\n",
" # 如果发生错误则回滚\n",
" print(\"error!\")\n",
" db.rollback() \n",
"db.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 每日调仓信息导入"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import csv\n",
"import pymysql\n",
"\n",
"def read_data(filename):\n",
" detail = {}\n",
" \n",
" with open(filename) as f:\n",
" reader = csv.reader(f)\n",
"# header_row =next(reader)\n",
" for row in reader:\n",
" detail1 = {}\n",
" detail.setdefault(row[3],[])\n",
" detail1 = {'dm':row[0],'zj':row[1],'ly':row[2],'cb':row[4]}\n",
" detail[row[3]].append(detail1)\n",
" return detail\n",
"m_xx = []\n",
"m_add = []\n",
"m_sub = []\n",
"db = pymysql.connect(\"localhost\",\"root\",\"songyi\",\"stock\" )\n",
"cursor = db.cursor()\n",
"filename = '调仓明细.csv'\n",
"detail = read_data(filename)\n",
"#print(detail)\n",
"for rq in sorted(detail.keys()):\n",
" m_rq = '2020-' + rq[0:2] + '-' + rq[2:]\n",
" for xx_move in detail[rq]:\n",
" m_dm = xx_move['dm']\n",
" if m_dm[0:1] == '6':\n",
" m_dm = 'sh.' + m_dm\n",
" else:\n",
" m_dm = 'sz.' + m_dm\n",
" m_xx.append((m_rq,m_dm,int(xx_move['zj']),xx_move['ly']))\n",
" if xx_move['zj'] == '1':\n",
" m_add.append((m_dm,xx_move['ly'],float(xx_move['cb'])))\n",
" else:\n",
" m_sub.append((m_dm))\n",
"#print(m_xx)\n",
"sql = \"insert into change_item (rq,code,pos,reason) values(%s,%s,%s,%s)\"\n",
"try:\n",
" cursor.executemany(sql,m_xx)\n",
" if len(m_add) > 0:\n",
" sql_add = \"insert into stock_item (code,reason,cost) values(%s,%s,%s)\"\n",
" cursor.executemany(sql_add,m_add)\n",
" if len(m_sub) > 0:\n",
" sql_sub = \"update stock_item set status=0 where code=%s\"\n",
" cursor.executemany(sql_sub,m_sub) \n",
" db.commit()\n",
" print(\"导入成功!\")\n",
"except:\n",
" # 如果发生错误则回滚\n",
" print(\"error!\")\n",
" db.rollback() \n",
"\n",
"db.close()"
]
},
{
"cell_type": "markdown",
"metadata": {
"toc-hr-collapsed": true,
"toc-nb-collapsed": true
},
"source": [
"## 持仓股票信息导入"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import pymysql\n",
"db = pymysql.connect(\"localhost\",\"root\",\"songyi\",\"stock\" )\n",
"cursor = db.cursor()\n",
"sql = 'SELECT a.unit,a.CODE,b.cost FROM daily_item AS a,daily_cost as b WHERE a.rq=(select max(rq) FROM daily_item) AND a.code=b.code'\n",
"cursor.execute(sql)\n",
"results = cursor.fetchall()\n",
"sql = \"insert into stock_item(item,code,cost) values(%s,%s,%s)\"\n",
"try:\n",
" cursor.executemany(sql,list(results))\n",
" #db.commit()\n",
" print(\"ok!\")\n",
"except:\n",
" # 如果发生错误则回滚\n",
" print(\"error!\")\n",
" db.rollback() \n",
"sql = 'SELECT a.reason,a.code from change_item AS a WHERE a.pos=1'\n",
"cursor.execute(sql)\n",
"results = cursor.fetchall()\n",
"sql = \"update stock_item set reason=%s where code=%s \"\n",
"try:\n",
" cursor.executemany(sql,list(results))\n",
" #db.commit()\n",
" print(\"ok!\")\n",
"except:\n",
" # 如果发生错误则回滚\n",
" print(\"error!\")\n",
" db.rollback() \n",
"db.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 外汇实时数据采集"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import requests\n",
"import time\n",
"from bs4 import BeautifulSoup\n",
"import pymongo\n",
"import re\n",
"\n",
"#pattern = re.compile('(?<=\\\").*(?=\\\")')\n",
"pattern = re.compile(r'\\\"(.*)\\\"')\n",
"#myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n",
"#mydb = myclient[\"gaokao\"]\n",
"#mycol = mydb[\"news\"]\n",
"url = 'http://hq.sinajs.cn/list=USDCAD'\n",
"strhtml = requests.get(url)\n",
"#strhtml.encoding = 'utf8'\n",
"soup = BeautifulSoup(strhtml.text,'lxml')\n",
"data = strhtml.text\n",
"#data1 = data.split(\"\\r\")\n",
"#data = soup.select('schoolList')\n",
"#for item1 in data:\n",
"# print(item1.get_text())\n",
"if pattern.findall(data):\n",
" for data1 in pattern.findall(data):\n",
" data2 = data1.split(',')\n",
" print(data2)\n",
" print('当前买入价:',data2[1])\n",
" print('当前卖出价:',data2[2])\n",
" print('昨收价:',data2[3])\n",
" print('今开价:',data2[5])\n",
" print('最高价:',data2[6])\n",
" print('最低价:',data2[7])\n",
" print(float(data2[7]))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from email.mime.text import MIMEText\n",
"from email.header import Header\n",
"import smtplib\n",
"import requests\n",
"import time\n",
"import re\n",
"\n",
"pattern = re.compile(r'\\\"(.*)\\\"')\n",
"url = 'http://hq.sinajs.cn/list=USDCAD'\n",
"strhtml = requests.get(url)\n",
"data = strhtml.text\n",
"if pattern.findall(data):\n",
" for data1 in pattern.findall(data):\n",
" data2 = data1.split(',')\n",
"#print(data2)\n",
"with open('price.txt','r') as fl:\n",
" for line in fi:\n",
" p_high = line.split(',')[0]\n",
" p_low = line.split(',')[1]\n",
"\n",
"message ='当前美元加元买入价:{},卖出价:{}'.format(data2[1],data2[2])\n",
"msg = MIMEText(message,'plain','utf-8')\n",
"msg['Subject'] = Header(\"外汇价格已经到达预期价位!\",'utf-8')\n",
"msg['From'] = Header('512song@sina.com')\n",
"msg['To'] = Header('491525765@qq.com','utf-8')\n",
"\n",
"from_addr = '512song@sina.com' #发件邮箱\n",
"password = '409fe5d8471da663' #邮箱密码\n",
"to_addr = 'songyi@yeah.net' #收件邮箱\n",
"smtp_server = 'smtp.sina.com' #SMTP服务器,以新浪为例\n",
"try:\n",
" server = smtplib.SMTP(smtp_server,25) #第二个参数为默认端口为25,有些邮件有特殊端口\n",
" print('开始登录')\n",
" server.set_debuglevel(1) \n",
" server.login(from_addr,password) #登录邮箱\n",
" print('登录成功')\n",
" print(\"邮件开始发送\")\n",
" server.sendmail(from_addr,to_addr,msg.as_string()) #将msg转化成string发出\n",
" server.quit()\n",
" print(\"邮件发送成功\")\n",
"except smtplib.SMTPException as e:\n",
" print(\"邮件发送失败\",e)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from email.mime.text import MIMEText\n",
"from email.header import Header\n",
"import smtplib\n",
"import requests\n",
"import time\n",
"import re\n",
"\n",
"pattern = re.compile(r'\\\"(.*)\\\"')\n",
"url = 'http://hq.sinajs.cn/list=USDCAD'\n",
"strhtml = requests.get(url)\n",
"data = strhtml.text\n",
"if pattern.findall(data):\n",
" for data1 in pattern.findall(data):\n",
" data2 = data1.split(',')\n",
"print(data2)\n",
"\n",
"message ='当前美元加元最高价:{},最低价:{}'.formtat()\n",
"msg = MIMEText(message,'plain','utf-8')\n",
"\n",
"msg['Subject'] = Header(\"测试smtp邮件\",'utf-8')\n",
"msg['From'] = Header('512song@sina.com')\n",
"msg['To'] = Header('491525765@qq.com','utf-8')\n",
"\n",
"from_addr = '512song@sina.com' #发件邮箱\n",
"password = '409fe5d8471da663' #邮箱密码\n",
"to_addr = '491525765@qq.com' #收件邮箱\n",
"\n",
"smtp_server = 'smtp.sina.com' #SMTP服务器,以新浪为例\n",
"try:\n",
" server = smtplib.SMTP(smtp_server,25) #第二个参数为默认端口为25,有些邮件有特殊端口\n",
" print('开始登录')\n",
" server.set_debuglevel(1) \n",
" server.login(from_addr,password) #登录邮箱\n",
" print('登录成功')\n",
" print(\"邮件开始发送\")\n",
" server.sendmail(from_addr,to_addr,msg.as_string()) #将msg转化成string发出\n",
" server.quit()\n",
" print(\"邮件发送成功\")\n",
"except smtplib.SMTPException as e:\n",
" print(\"邮件发送失败\",e)\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"toc-hr-collapsed": true,
"toc-nb-collapsed": true
},
"source": [
"# pygal图表"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import pygal\n",
"bar_chart = pygal.Bar(height=300)\n",
"bar_chart.add('Fibonacci', [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55])\n",
"bar_chart.add('Padovan', [1, 1, 1, 2, 2, 3, 4, 5, 7, 9, 12])\n",
"svg = bar_chart.render()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from IPython.display import SVG\n",
"SVG(svg)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
},
"toc-autonumbering": true,
"toc-showcode": true,
"toc-showmarkdowntxt": true
},
"nbformat": 4,
"nbformat_minor": 4
}