version: 1
disable_existing_loggers: False
formatters:
simple:
format: "%(asctime)s - %(name)s - %(levelname)s - %(threadName)s - %(lineno)d - %(message)s"
handlers:
console:
class: logging.StreamHandler
level: DEBUG
formatter: simple
stream: ext://sys.stdout
info_file_handler:
class: logging.handlers.RotatingFileHandler
level: INFO
formatter: simple
filename: info.log
maxBytes: 10485760
backupCount: 20
encoding: utf8
error_file_handler:
class: logging.handlers.RotatingFileHandler
level: ERROR
formatter: simple
filename: errors.log
maxBytes: 10485760
backupCount: 20
encoding: utf8
loggers:
my_module:
level: ERROR
handlers: [info_file_handler]
propagate: no
root:
level: INFO
handlers: [console,info_file_handler,error_file_handler]

log_config.yaml

 
# encoding: utf-8
import requests
import logging
import logging.config
import random
import os
import yaml
import time
import threading class Observer(object):
open_price_last_1 = ''
close_price_last_1 = ''
highest_price_last_1 = ''
minimum_price_last_1 = ''
ding_fen_xing = []
di_fen_xing = []
not_ding_di = []
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'} def __init__(self):
self.stop_flag = False def get_stock_data(self,stock_code,scale):
"""
获取K 线数据
:param stock_code: 代码
:param scale: 级别
:return: k线数据
"""
#url = 'http://ifzq.gtimg.cn/appstock/app/kline/mkline?param=sh600030,m30,,320&_var=m30_today&r=0.1700474168906776'
url = 'http://ifzq.gtimg.cn/appstock/app/kline/mkline'
params = {
'param': '{},m{},,320'.format(stock_code,scale),
'_var': 'm{}_today'.format(scale),
'r': '0.1700474{}'.format("".join(random.choice("") for i in range(10)))
}
logging.info('url:%s \t params:%s',url,params)
res = requests.get(url,params=params,headers=self.headers)
logging.info('response:%s:',res.content.decode('unicode_escape').rstrip()) def get_stock_code(self,a_type):
"""
获取两市股票代码
:param a_type: sh or sz
:return: stock_code
"""
#url = 'http://stock.gtimg.cn/data/index.php?appn=rank&t=rankash/chr&p=1&o=0&l=40&v=list_data'
url = 'http://stock.gtimg.cn/data/index.php'
params = {
'appn': 'rank',
't': 'ranka{}/chr'.format(a_type),
'p': 1,
'o': 0,
'l': 3000,
'v': 'list_data'
}
logging.info('url:%s \t params:%s', url, params)
res = requests.get(url, params=params, headers=self.headers)
logging.info('response:%s:',res.content.decode('unicode_escape').rstrip()) def get_plate_data(self,stock_code):
"""
获取盘中数据,如果出现大于80万的买单弹框提示
:param stock_code:
:return:
"""
#url = 'http://web.sqt.gtimg.cn/q=sh601208?r=0.9884275211413494'
url = 'http://web.sqt.gtimg.cn'
params = {
'q': stock_code,
'r': '0.1700474{}'.format("".join(random.choice("") for i in range(10)))
}
logging.info('url:%s \t params:%s', url, params)
res = requests.get(url, params=params, headers=self.headers)
res_text = res.content.decode('GBK')
logging.info('response:%s:',res_text.rstrip())
plate_data = res_text.split('~')
stock_name_this = plate_data[1]
stock_code_this = plate_data[2]
for list_data in plate_data:
if '|' in list_data:
plate_date_strike = list_data.split('|')
#logging.info(plate_date_strike )
buy_list = []
for plate_date_strike_detail in plate_date_strike:
if 'B' in plate_date_strike_detail :
buy_list.append(int(plate_date_strike_detail.split('/')[4]))
logging.info(buy_list)
if buy_list and max(buy_list) > 800000:
logging.info('%s %s 出现了80万以上的买单' % (stock_name_this, stock_code_this))
self.alert_msg('%s %s 出现了80万以上的买单' % (stock_name_this, stock_code_this))
self.stop_flag = True
else:
logging.info('%s %s 没有出现80万以上的买单' % (stock_name_this, stock_code_this)) def alert_msg(self,msg):
commond = 'msg * %s'%msg
os.system(commond) class MonitorThread(threading.Thread):
def __init__(self,stock_code):
threading.Thread.__init__(self)
self.name = stock_code
self.stock_code = stock_code def run(self):
logging.info(self.name + '监控开始...')
o = Observer()
while 1:
o.get_plate_data(self.stock_code)
if o.stop_flag:
break
time.sleep(5)
logging.info(self.name + '监控结束!') if __name__ == '__main__':
path = 'logging.yaml'
value = os.getenv('LOG_CFG', None)
if value:
path = value
if os.path.exists(path):
with open(path, "r") as f:
config = yaml.load(f)
logging.config.dictConfig(config)
else:
print('log config file not found!') monitor_list = ['sz002464','sh603008']
for stock_code in monitor_list:
thread_a = MonitorThread(stock_code)
thread_a.start()
# encoding: utf-8
import requests
import logging
import logging.config
import random
import os
import yaml
import time
import threading class Observer(object):
open_price_last_1 = ''
close_price_last_1 = ''
highest_price_last_1 = ''
minimum_price_last_1 = ''
ding_fen_xing = []
di_fen_xing = []
not_ding_di = []
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'} def __init__(self):
self.stop_flag = False def get_stock_data(self,stock_code,scale):
"""
获取K 线数据
:param stock_code: 代码
:param scale: 级别
:return: k线数据
"""
#url = 'http://ifzq.gtimg.cn/appstock/app/kline/mkline?param=sh600030,m30,,320&_var=m30_today&r=0.1700474168906776'
url = 'http://ifzq.gtimg.cn/appstock/app/kline/mkline'
params = {
'param': '{},m{},,320'.format(stock_code,scale),
'_var': 'm{}_today'.format(scale),
'r': '0.1700474{}'.format("".join(random.choice("") for i in range(10)))
}
logging.info('url:%s \t params:%s',url,params)
res = requests.get(url,params=params,headers=self.headers)
res_str = res.content.decode('unicode_escape').rstrip()
#logging.info('response:%s:',res_str)
res_dict = eval(res_str[res_str.index("={")+1:res_str.index("}}}")+3])
scale_data = res_dict['data'][stock_code]['m'+scale]
#logging.info(scale_data)
return scale_data def get_stock_code(self,a_type):
"""
获取两市股票代码
:param a_type: sh or sz
:return: stock_code
"""
#url = 'http://stock.gtimg.cn/data/index.php?appn=rank&t=rankash/chr&p=1&o=0&l=40&v=list_data'
url = 'http://stock.gtimg.cn/data/index.php'
params = {
'appn': 'rank',
't': 'ranka{}/chr'.format(a_type),
'p': 1,
'o': 0,
'l': 3000,
'v': 'list_data'
}
logging.info('url:%s \t params:%s', url, params)
res = requests.get(url, params=params, headers=self.headers)
res_str = res.content.decode('unicode_escape').rstrip()
#logging.info('response:%s:',res_str)
res_str_list = res_str[res_str.index("data:'") + 6:res_str.index("'}")].split(',')
logging.info(res_str_list)
return res_str_list def get_plate_data(self,stock_code):
"""
获取盘中数据,如果出现大于80万的买单弹框提示
:param stock_code:
:return:
"""
#url = 'http://web.sqt.gtimg.cn/q=sh601208?r=0.9884275211413494'
url = 'http://web.sqt.gtimg.cn'
params = {
'q': stock_code,
'r': '0.1700474{}'.format("".join(random.choice("") for i in range(10)))
}
logging.info('url:%s \t params:%s', url, params)
res = requests.get(url, params=params, headers=self.headers)
res_text = res.content.decode('GBK')
logging.info('response:%s:',res_text.rstrip())
plate_data = res_text.split('~')
stock_name_this = plate_data[1]
stock_code_this = plate_data[2]
for list_data in plate_data:
if '|' in list_data:
plate_date_strike = list_data.split('|')
#logging.info(plate_date_strike )
buy_list = []
for plate_date_strike_detail in plate_date_strike:
if 'B' in plate_date_strike_detail :
buy_list.append(int(plate_date_strike_detail.split('/')[4]))
logging.info(buy_list)
if buy_list and max(buy_list) > 800000:
logging.info('%s %s 出现了80万以上的买单' % (stock_name_this, stock_code_this))
self.alert_msg('%s %s 出现了80万以上的买单' % (stock_name_this, stock_code_this))
self.stop_flag = True
else:
logging.info('%s %s 没有出现80万以上的买单' % (stock_name_this, stock_code_this)) def alert_msg(self,msg):
commond = 'msg * %s'%msg
os.system(commond) class MonitorThread(threading.Thread):
def __init__(self,stock_code):
threading.Thread.__init__(self)
self.name = stock_code
self.stock_code = stock_code def run(self):
logging.info(self.name + '监控开始...')
o = Observer()
while 1:
o.get_plate_data(self.stock_code)
if o.stop_flag:
break
time.sleep(5)
logging.info(self.name + '监控结束!') if __name__ == '__main__':
path = 'logging.yaml'
value = os.getenv('LOG_CFG', None)
if value:
path = value
if os.path.exists(path):
with open(path, "r") as f:
config = yaml.load(f)
logging.config.dictConfig(config)
else:
print('log config file not found!') # monitor_list = ['sz002464','sh603008']
# for stock_code in monitor_list:
# thread_a = MonitorThread(stock_code)
# thread_a.start()
o = Observer()
code_list_sh = o.get_stock_code('sh')
code_list_sz = o.get_stock_code('sz')
code_list = code_list_sh + code_list_sz
code_list_keguanzhu = []
for stock_code in code_list:
m30_data = o.get_stock_data(stock_code, '')
#倒数第二个k线最低点是最后三根k线最低点中最低且最后一根k线收盘价高于中间一个k线的最高价
if min(float(m30_data[-1][4]), float(m30_data[-2][4]), float(m30_data[-3][4])) == float(m30_data[-2][4]) and float(m30_data[-1][2]) > float(m30_data[-2][3]):
logging.info('%s可以关注'%stock_code)
code_list_keguanzhu.append(stock_code)
logging.info('可关注的%d个票:%s'%(len(code_list_keguanzhu),str(code_list_keguanzhu)))

选股

stock的更多相关文章

  1. [LeetCode] Best Time to Buy and Sell Stock with Cooldown 买股票的最佳时间含冷冻期

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  2. [LeetCode] Best Time to Buy and Sell Stock IV 买卖股票的最佳时间之四

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  3. [LeetCode] Best Time to Buy and Sell Stock III 买股票的最佳时间之三

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  4. [LeetCode] Best Time to Buy and Sell Stock II 买股票的最佳时间之二

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  5. [LeetCode] Best Time to Buy and Sell Stock 买卖股票的最佳时间

    Say you have an array for which the ith element is the price of a given stock on day i. If you were ...

  6. [LeetCode] Best Time to Buy and Sell Stock II

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  7. 4 Best Time to Buy and Sell Stock III_Leetcode

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  8. [LintCode] Best Time to Buy and Sell Stock II 买股票的最佳时间之二

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  9. [LintCode] Best Time to Buy and Sell Stock 买卖股票的最佳时间

    Say you have an array for which the ith element is the price of a given stock on day i. If you were ...

  10. [LeetCode] Best Time to Buy and Sell Stock

    Say you have an array for which the ith element is the price of a given stock on day i. If you were ...

随机推荐

  1. Nginx 用分片提示缓存效率

    L:107 slice 模块 Syntax:slice size;Default: slice 0; Context:http, server, location 功能:通过range协议将大文件分解 ...

  2. 洛谷 P3953 逛公园

    题目链接 思路 首先没有0边,且k为0的情况就是最短路计数. 如果k不为0,看到k<=50,想到dp. 设f[u][i]表示到达u点比最短路多走i的路径数,转移到v点. f[u][i]+=f[v ...

  3. python代码块,小数据池,驻留机制深入剖析

    一,什么是代码块. 根据官网提示我们可以获知: 根据提示我们从官方文档找到了这样的说法: A Python program is constructed from code blocks. A blo ...

  4. Ubuntu基于zsh自定义设置shell主题

    为优化Ubuntu命令行页面效果,Google一番选择github上开源项目zsh,以自定义Shell主题,注:本机系统为Ubuntu 14.04 1.安装zsh sudo apt-get insta ...

  5. ajax 的json格式

    我们平时使用ajax向后台传递数据时,通常会传递json格式的数据,当然这里还有其它格式,比如xml.html.script.text.jsonp格式. json类型的数据包含json对象和json类 ...

  6. Java大数练习

    大数阶乘 题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=28 import java.io.*; import java.util.*; ...

  7. 【XSY1537】五颜六色的幻想乡 数学 生成树计数 拉格朗日插值

    题目大意 ​ 有一个\(n\)个点\(m\)条边的图,每条边有一种颜色\(c_i\in\{1,2,3\}\),求所有的包括\(i\)条颜色为\(1\)的边,\(j\)条颜色为\(2\)的边,\(k\) ...

  8. 如何判断是否为同一个App,Ionic3如何修改包名

    如何判断是否同一个App 使用Ionic3创建了两个项目demo1.demo2,然后使用同一个JDK,生成了两个不同的keystore证书. 结果在手机端安装的时候,先安装demo1,没有任何替换的提 ...

  9. SCOI2016幸运数字(树剖/倍增/点分治+线性基)

    题目链接 loj luogu 题意 求树上路径最大点权异或和 自然想到(维护树上路径)+ (维护最大异或和) 那么有三种方法可以选择 1.树剖+线性基 2.倍增+线性基 3.点分治+线性基 至于线性基 ...

  10. Summary (7Road)

    今天有幸参加了一次考试,碰到的一些考题如下: 很多东西,明明都是会的,可是就是写不出来.可见自己的Linux基础还是很薄弱,懒得去记这些有用的东西.既然自己不是老板,不是项目经理,就该努力记住这些基础 ...