jupyterlab
jupyterlab项目
This commit is contained in:
commit
ad0d0a5396
11 files changed
+6187
No files matched your search
+499
@@ -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
|
||||
}
|
||||
Reference in new issue
Block a user