Beispiel #1
0
def serialListenForSell():
    f = open('persist.txt', 'r')
    code = str(f.readline())
    f.close()
    if code is not None and code != 'Nothing' and code != "":
        print("[" + str(du.getHMS()) + "]:已获取code:" + code)
        df = gs.getDataFrame(code)
        pre_b1_v = float(df['b1_v'][0])
        while True:
            if du.getHMS() < "09:24:20":
                time.sleep(5)
                continue
            df = gs.getDataFrame(code)
            rate = float(gs.getRate(gs.getDataFrame(code)))

            if rate < 0 and du.getHMS() < "10:30:00":
                time.sleep(5)
                continue

            if rate > 9.89:
                b1_v = float(df['b1_v'][0])
                if pre_b1_v - b1_v > 1280:
                    sellAction(code=code)
                    break
            else:
                sellAction(code=code)
                break
            print("[" + str(du.getHMS()) + "]:持续监听卖出->rate:" + str(rate) +
                  "->b1_v:" + str(pre_b1_v) + "->volumeDis:" +
                  str(pre_b1_v - b1_v))
            pre_b1_v = float(df['b1_v'][0])
            time.sleep(5)
    else:
        print("[" + str(du.getHMS()) + "]:没有持仓")
Beispiel #2
0
def prepareForAppChannelKpi():
    listParams = []
    channelType = 0
    while (channelType < 7):
        channelType = channelType + 1
        temp = (channelType, 1000000, 10000 * random.randint(10, 40),
                DateUtil.getNowTime(), DateUtil.getNowTime())
        listParams.append(temp)
    return tuple(listParams)
Beispiel #3
0
def prepareForAppSummaryDaily():
    date_rang = DateUtil.getDateRang("2016-03-01", "2016-04-01")
    now = DateUtil.getNowTime()
    listParams = []
    for num in date_rang:
        tmp = (random.randint(2000,
                              10000), random.randint(2000,
                                                     10000), num, now, now)
        listParams.append(tmp)
    return tuple(listParams)
Beispiel #4
0
def startNotifyInTimeBigEmotion4Sell():
    while True:
        hms = du.getHMS()
        if '09:25' in hms or '09:30' in hms or '09:32' in hms or '09:35' in hms or '09:40' in hms or '09:50' in hms or '10:00' in hms:
            if Config.isBigEmotionGood == False:
                pm.sendContent('市场环境氛围_差', '市场环境氛围_差')
            else:
                pm.sendContent('市场环境氛围_好', '市场环境氛围_好')
            time.sleep(60)
        time.sleep(1)
        print("[" + du.getHMS() +
              "] startNotifyInTimeBigEmotion4Sell: tik tok...")
        if hms > '10:30:00':
            break
Beispiel #5
0
def prepareForAppStatDaily():
    appKeys = MySqlUtil.db_qa_sql_select("SELECT app_key FROM app", "open_api")
    date_rang = DateUtil.getDateRang("2016-03-01", "2016-04-01")
    listParams = []
    for num in date_rang:
        for key in appKeys:
            tmp = (key, random.randint(500,
                                       1000), random.randint(50000, 100000),
                   random.randint(8000, 15000), random.randint(60, 1800),
                   random.randint(3000, 6000), random.randint(60, 1800),
                   round(random.random(), 2), round(random.random(), 2),
                   round(random.random(),
                         2), num, DateUtil.getNowTime(), DateUtil.getNowTime())
            listParams.append(tmp)
    return tuple(listParams)
Beispiel #6
0
def sendContent(title, content):
    try:
        requests.get('http://95.163.200.245:11251/sendEmail/[' + du.getYMD() +
                     ':' + conf.hostname + ']:' + title + '/' + content + '/' +
                     default_receivers)
    except Exception as e:
        print("ERROR Send Check Mail!")
Beispiel #7
0
 def stu_selectcourse(self, studinfo, xuanke_counter=0):
     studenetId = studinfo['stu']['id']
     studentNo = studinfo['stu']['studentNo']
     semeId = str(int(studinfo['stu']['xueqi']['id']) + 1)  #本学期选下学期的课
     stu_plan_name = studinfo['stu']['planObj']['name']
     dateutil = DateUtil.DateUtil()
     semenum = dateutil.getSCTermNo(stu_plan_name)
     tobeelectlistinfo = self.get_stu_tobeelect(studinfo)
     if tobeelectlistinfo and len(tobeelectlistinfo) == 2:
         stu_cur_eleactive = tobeelectlistinfo[0]
         tobeelectlist = tobeelectlistinfo[1]
         if stu_cur_eleactive and len(
                 stu_cur_eleactive) > 0 and self.getifforceselectcourse(
                 ) != True:
             self.log('学生' + str(studentNo) + '已有选课记录,不再进行自动选课。', True)
         else:
             # 优选本学期的推荐课,判断是否为推荐选课
             tobeelectlist = self.selectCourseService.get_recommend_courselist(
                 studentNo)
             if xuanke_counter > 0:
                 # 在所有推荐选课列表中先选主修课再选选修课
                 #mainstudy_courselist=self.selectCourseService.get_recommend_courselist(studentNo,0)
                 #if len(mainstudy_courselist)>=xuanke_counter:
                 #    tobeelectlist=mainstudy_courselist[0:xuanke_counter]
                 #else:
                 #    selectstudy_courselist=self.selectCourseService.get_recommend_courselist(studentNo,1)
                 #    selectstudy_coursecount=len(selectstudy_courselist)
                 #    if selectstudy_coursecount>0:
                 #        selectstudycount=xuanke_counter-len(mainstudy_courselist)
                 #        if selectstudycount>selectstudy_coursecount:
                 #            selectstudycount=selectstudy_coursecount
                 #            mainstudy_courselist.extend(selectstudy_courselist[0:selectstudycount])
                 #        tobeelectlist =mainstudy_courselist
                 tobeelectlist = tobeelectlist[0:xuanke_counter]
             # 组织自动选课数据
             selectcourselist = []
             selectcoursetime = self.getcurrenttime()
             for course in tobeelectlist:
                 # 优选本学期的推荐课,判断是否为推荐选课,如果是则选择
                 courseid = course['courseId']
                 coursetype = '必修'
                 if course['type'] == 0:
                     coursetype = '必修'
                 if course['type'] == 1:
                     coursetype = '选修'
                 selectcouse = {
                     "coursePlanId": course['id'],
                     "courseD": course['courseD'],
                     "studentId": studenetId,
                     "studentNo": studentNo,
                     "courseId": courseid,
                     "planId": course['planId'],
                     "semeId": semeId,
                     "type": coursetype,
                     "time": selectcoursetime
                 }
                 selectcourselist.append(selectcouse)
             selectcourse_data = json.dumps(selectcourselist,
                                            ensure_ascii=False)
             self.submit_selectcourse(studinfo, selectcourse_data)
Beispiel #8
0
def createJpg(uid, needCreateJpg=True, jpgName="分析词云"):
    # get data directory (using getcwd() is needed to support running example in generated IPython notebook)
    dpath = path.dirname(__file__) if "__file__" in locals() else os.getcwd()

    # Read the whole text.
    txtFilePath = FileUtil.getTxtFilePath(uid)
    text = open(txtFilePath, encoding="utf-8").read()
    # print(text)

    # 设置字体,使其支持中文显示,需要提前下载对应的字体
    font = dpath + "\simfang.ttf"
    # Generate a word cloud image
    wordcloud = WordCloud(collocations=False,
                          font_path=font,
                          width=1400,
                          height=1400,
                          margin=2).generate(text)
    if needCreateJpg:
        # 把产生的词云保存进图片
        if not jpgName:
            jpgName = "default_" + DateUtil.nowNoSplit()
        if not jpgName.endswith(".jpg"):
            jpgName = jpgName + ".jpg"
        print("生成图片名:" + jpgName)
        file_pref = txtFilePath[0:txtFilePath.rfind((os.sep))]
        wordcloud.to_file(file_pref + jpgName)

    # Display the generated image:
    # the matplotlib way:
    plt.imshow(wordcloud, interpolation='bilinear')
    plt.axis("off")
    plt.show()
Beispiel #9
0
def update(end_date):
    indexes = bd.getStocks(True)
    for each in indexes:
        stock_code = each[0]
        stock_code_163 = each[3]
        start_date = each[5]

        if start_date is None:
            start_date = du.convertStringToDate("1990-01-01", "%Y-%m-%d")
        elif start_date == end_date:
            continue
        else:
            start_date = start_date + timedelta(1)

        data = bd.getStockData(stock_code_163, start_date, end_date)
        last_updated_date = data[0].split(",")[0]

        bd.insertBasicData(stock_code, data)
        bd.insertTechData(stock_code, data)
        bd.insertAnalysisData(stock_code, data)
        bd.updateMasterDate("LAST_UPDATED_DATE", last_updated_date, stock_code_163)

    stocks = bd.getStocks(False)
    for each in stocks:
        stock_code = each[0]
        stock_code_163 = each[3]
        stock_code_sina = each[4]
        start_date = each[5]

        if start_date is None:
            start_date = du.convertStringToDate("1990-01-01", "%Y-%m-%d")
        elif start_date == end_date:
            continue
        else:
            start_date = start_date + timedelta(1)

        data = bd.getStockData(stock_code_163, start_date, end_date)
        last_updated_date = data[0].split(",")[0]

        bd.insertBasicData(stock_code, data)
        bd.insertTechData(stock_code, data)
        bd.insertAnalysisData(stock_code, data)
        bd.updateMasterDate("LAST_UPDATED_DATE", last_updated_date, stock_code_163)

        rf = bd.getRecoveryFactor(stock_code_163, stock_code_sina, start_date)
        bd.insertRecoveryFactor(stock_code, rf)
Beispiel #10
0
def process(image_file):
    tags = exifread.process_file(image_file)

    for tag in tags.keys():
        # print "key:%s, value:%s" % (tag, tags[tag])
        if tag == "Image DateTime":
            diff_str, date_str = DateUtil.get_days(tags[tag])
            ImageUtil.set_text(image_file, diff_str, date_str)
Beispiel #11
0
def smartUpdate(end_date=date.today()):
    sql = "SELECT * FROM stockmaster where LAST_UPDATED_DATE < '" + du.convertDateToString(end_date, "%Y-%m-%d") + "'"
    result_set = dbu.query(sql)
    while len(result_set) > 0:
        for each in result_set:
            stock_code = each[0]
            index_indicator = each[2]
            stock_code_163 = each[3]
            stock_code_sina = each[4]
            start_date = each[5]

            logger.info("UPDATING STOCK, STOCK CODE IS " + stock_code)

            if start_date is None:
                start_date = du.convertStringToDate("1990-01-01", "%Y-%m-%d")
            elif start_date == end_date:
                continue
            else:
                start_date = start_date + timedelta(1)

            data = bd.getStockData(stock_code_163, start_date, end_date)

            if len(data) > 0:
                last_updated_date = data[0].split(",")[0]
                bd.insertBasicData(stock_code, data)
                logger.info("INSERT BASIC DATA COMPLETED")
                bd.insertTechData(stock_code, data)
                logger.info("INSERT TECH DATA COMPLETED")
                bd.insertAnalysisData(stock_code, data)
                logger.info("INSERT ANALYSIS DATA COMPLETED")
                bd.updateMasterDate("LAST_UPDATED_DATE", last_updated_date, stock_code_163)
                logger.info("LAST DATE UPDATED")

                if str(index_indicator) == "1":
                    rf = bd.getRecoveryFactor(stock_code_163, stock_code_sina, start_date)
                    bd.insertRecoveryFactor(stock_code, rf)
                    logger.info("INSERT RF DATA COMPLETED")
            else:
                logger.error("NO DATA IS RECEIVED FROM 163")

        result_set = dbu.query(sql)
        if len(result_set) > 0:
            logger.info("NOT ALL STOCKS ARE UPDATED, WAIT 10 MINUTES FOR NEXT UPDATE")
            tm.sleep(10*60)

    return "COMPLETED"
Beispiel #12
0
def get_month_maxdate(stockno):
    try:
        sql = "select max(date) maxdate from stock_month_data where code='"+stockno+"'"
        conn = MySQLdb.connect(host='localhost',user='******',passwd='123456',db='stock')
        cursor = conn.cursor()
        n = cursor.execute(sql)
        maxdate = ''
        for r in cursor:
             maxdate = r[0]
        cursor.close()
        conn.close
        if maxdate=='':
            stockDf =ts.get_stock_basics()
            sssj = str(stockDf.ix[stockno]['timeToMarket']) #上市日期YYYYMMDD
            return  dateutil.convertDate(sssj)
        return dateutil.get_next_day(maxdate)
    except Exception,e:
        print e.message
Beispiel #13
0
def sendCodeArr(codeArr):
    content = "_".join(codeArr) + "_共" + str(codeArr.__len__()) + "个"
    title = str(codeArr.__len__()) + "个"
    try:
        requests.get('http://95.163.200.245:11251/sendEmail/[' + du.getYMD() +
                     ':' + conf.hostname + ']:盘前选股_' + title + '/候选:' +
                     content + '/' + default_receivers)
    except Exception as e:
        print("ERROR Send Check Mail!")
Beispiel #14
0
def num2date(v):
    """
    Convert numerical value to python date.
    
    :param v: Numerical value of date.
    
    :returns: Python date
    """
    t = DateUtil.fromOADate(v)
    return pydate(t)
Beispiel #15
0
def sellIn0925():
    res = requests.get("http://95.163.200.245:11252/chicang/read")
    if res.text is None or res.text == "Nothing":
        return
    code = str(res.text)
    while True:
        time.sleep(5)
        if du.getHMS() > Config.SellTime:
            df = gs.getDataFrame(code)
            if df is None:
                return
            name = gs.getStockName(df)
            pre_close = str(round(float(df['pre_close'][0]), 2))
            sp = str(round(float(pre_close) * 0.91, 2))
            sellAction(code, name, sp, '100')
            requests.get("http://95.163.200.245:11252/chicang/deleteall")
            break
        else:
            print('[' + du.getHMS() + ']:sellIn0925 waitting...')
Beispiel #16
0
def date2num(t):
    """
    Convert python date to numerical value.
    
    :param t: Python date.
    
    :returns: Numerical value
    """
    tt = jdate(t)
    v = DateUtil.toOADate(tt)
    return v
Beispiel #17
0
def log(string):
    filename = _getFilename("LOG")
    try:
        if Config.IS_PRINT_CONSOLE == True:
            print(string)
        if Config.IS_PRINT_FILE == True:
            f = open('log/' + filename, 'a')
            f.write('[' + du.getYMDHMS() + "]: " + string + "\n")
            f.close()
    except:
        return
Beispiel #18
0
def calcTRIX(stock_code, date, period):
    global ITERATOR_COUNT
    TR = calcEMA(stock_code, date, period)

    pday = du.convertDateToString(bd.getStockDate(stock_code, date, 1), "%Y-%m-%d")
    ITERATOR_COUNT = 0
    TR_pday = calcEMA(stock_code, pday, period)
    print TR
    print pday
    print TR_pday
    return (TR - TR_pday) / TR_pday * 100
Beispiel #19
0
def get_qfq_maxdate(stockno):
    try:
        sql = "select max(date) maxdate from stock_qfq_data where code='"+stockno+"'"
        engine = create_engine('mysql://*****:*****@127.0.0.1/stock?charset=utf8')
        #df.to_sql('inst_detail', engine, if_exists='append')

        conn = MySQLdb.connect(host='localhost',user='******',passwd='123456',db='stock')
        cursor = conn.cursor()
        n = cursor.execute(sql)
        maxdate = ''
        for r in cursor:
             maxdate = r[0][0:10]
        cursor.close()
        conn.close
        if maxdate=='':
            stockDf =ts.get_stock_basics()
            sssj = str(stockDf.ix[stockno]['timeToMarket']) #上市日期YYYYMMDD
            return  dateutil.convertDate(sssj)
        return dateutil.get_next_day(maxdate)
    except Exception,e:
        print e.message
Beispiel #20
0
def dates2nums(dates):
    """
    Convert python dates to numerical values.
    
    :param dates: (*list*) Python dates.
    
    :returns: (*list*) Numerical values
    """
    values = []
    for t in dates:
        tt = jdate(t)
        values.append(DateUtil.toOADate(tt))
    return values
Beispiel #21
0
def nums2dates(values):
    """
    Convert numerical values to python dates.
    
    :param values: Numerical values of date.
    
    :returns: Python dates
    """
    tt = []
    for v in values:
        t = DateUtil.fromOADate(v)
        tt.append(pydate(t))
    return tt
Beispiel #22
0
def getRecoveryFactor(stock_code_163, stock_code_sina, start_date):
    url_base = 'http://vip.stock.finance.sina.com.cn/corp/go.php/vMS_FuQuanMarketHistory/stockid/'
    url_stock = stock_code_sina + '.phtml?'
    today = date.today()
    current_year = int(today.strftime("%Y"))
    current_quarter = du.getQuarter(int(today.strftime("%m")))
    start_year = int(start_date.strftime("%Y"))
    start_quarter = du.getQuarter(int(start_date.strftime("%m")))

    recovery_factor = []

    for year in range(start_year, current_year + 1):
        for quarter in range(1, 5):
            if (year <= start_year) and (quarter < start_quarter):
                continue
            if (year >= current_year) and (quarter > current_quarter):
                break
            url_year = 'year=' + str(year)
            url_quarter = '&jidu=' + str(quarter)
            url = url_base + url_stock + url_year + url_quarter
            #print url
            html = urllib.urlopen(url)
            content = html.read()
            html.close()
            soup = BeautifulSoup(content, 'html.parser')
            # print type(soup.find(id='FundHoldSharesTable'))
            for tr in soup.find(id='FundHoldSharesTable').find_all('tr')[2:]:
                row = [stock_code_163, stock_code_sina]
                for td in tr.find_all('td'):
                    for div in td.find_all('div'):
                        if len(div.find_all('a')) > 0:
                            row.append(div.a.contents[0].strip())
                        else:
                            row.append(div.contents[0].strip())
                recovery_factor.append(row)
    # print recoveryFactor
    return recovery_factor
Beispiel #23
0
def calcEMA(stock_code, date, period):
    if ITERATOR_COUNT >= MAX_ITERATOR:
        EXPMA = MA.calcMA(stock_code, date, period)
        # print "MIN Date: " +date+ " MA:"+ str(EXPMA)
        return EXPMA
    else:
        global ITERATOR_COUNT
        ITERATOR_COUNT = ITERATOR_COUNT + 1

        close_today = bd.getBasicData("CLOSE_TODAY", stock_code, date)
        pday = du.convertDateToString(bd.getStockDate(stock_code, date, 1), "%Y-%m-%d")
        EXPMA_pday = calcEMA(stock_code, pday, period)
        EXPMA = 2 * (close_today - EXPMA_pday) / (period + 1) + EXPMA_pday
        # print date + ": EXPMA: "+str(EXPMA_PDAY)+" CLOSE: " + str(CLOSE_TODAY) + " EXPMA = " +str(EXPMA)
        return round(EXPMA, 3)
Beispiel #24
0
def get_szzs_maxdate():
    try:
        sql = "select max(date) maxdate from stock_index_data where code='000001'"
        conn = MySQLdb.connect(host='localhost',user='******',passwd='123456',db='stock')
        cursor = conn.cursor()
        n = cursor.execute(sql)
        maxdate = ''
        for r in cursor:
             maxdate = r[0]
        cursor.close()
        conn.close
        if len(maxdate)>10:
           maxdate=maxdate[0:10]
        return dateutil.get_next_day(maxdate)
    except Exception,e:
        print e.message
Beispiel #25
0
def sellAction(code=None, name=None, price=None, posi='100'):
    if name is None:
        df = gs.getDataFrame(code)
        name = gs.getStockName(df)
        price = str(round(float(df['b1_p'][0]), 2))
        posi = '100'
    if du.getHMS() < '09:25:00':
        df = gs.getDataFrame(code)
        pre_close = str(round(float(df['pre_close'][0]), 2))
        price = round(float(pre_close) * 0.92, 2)
    config_words = code + "," + name + "," + posi + "," + str(price) + ",0"
    f_config = open('C:/auto/SellAction.txt', 'w')
    f_config.write(config_words)
    f_config.close()
    pm.sendSellDoneEmail(code)
    lu.log("SellAction: 已写入执行句子:" + config_words)
    f = open('persist.txt', 'w')
    f.write("")
    f.close()
Beispiel #26
0
def updateWithoutRF(end_date):
    stocks = bd.getStockCodes()
    for each in stocks:
        stock_code = each[0]
        stock_code_163 = each[3]
        start_date = each[5]

        if start_date is None:
            start_date = du.convertStringToDate("1990-01-01", "%Y-%m-%d")
        elif start_date == end_date:
            continue
        else:
            start_date = start_date + timedelta(1)

        data = bd.getStockData(stock_code_163, start_date, end_date)
        last_updated_date = data[0].split(",")[0]
        bd.insertBasicData(stock_code, data)
        bd.insertTechData(stock_code, data)
        bd.insertAnalysisData(stock_code, data)
        bd.updateMasterDate("LAST_UPDATED_DATE", last_updated_date, stock_code_163)
Beispiel #27
0
 def get_stu_courseplanlist(self,
                            login_name,
                            stu_plan_name,
                            stu_plan_id,
                            retrytime=None):
     dateutil = DateUtil.DateUtil()
     semenum = dateutil.getSCTermNo(stu_plan_name)
     request_url = 'https://jxjyxb.bucm.edu.cn/api/v1/student/courseplan/list_stu'
     post_data = {
         'page': 1,
         'pageSize': 100,
         'coursePlan.planId': stu_plan_id,
         'coursePlan.semenum': semenum
     }
     try:
         response = self.session.post(request_url,
                                      data=post_data,
                                      headers=self.headers)
         if response.status_code == 200:
             print('选课信息---' + response.text)
             stu_course_json = json.loads(response.text)
             stu_course_plan = stu_course_json['pager']['datas']
     except:
         self.log(neterror_msg, True)
         set_retrytime = int(self.get_retrytime())
         if retrytime is None:
             retrytime = int(set_retrytime)
         else:
             retrytime = int(retrytime) - 1
         if retrytime > 0:
             self.log('重复尝试第' + str(set_retrytime - retrytime + 1) + '次',
                      True)
             retryinterval = self.get_retryinterval()
             time.sleep(retryinterval)
             self.get_stu_courseplanlist(login_name, stu_plan_name,
                                         stu_plan_id, retrytime)
     return stu_course_plan
Beispiel #28
0
def analyzeAllStocks(date):
    stock_codes = bd.getStockCodes()
    for each in stock_codes:
        stock_code = each[0]
        analyze(stock_code, du.convertDateToString(date, "%Y-%m-%d"))
Beispiel #29
0
import BasicData as fd
from datetime import *
import DateUtil as du
import ROC

# Main function
if __name__ == '__main__':
    '''
    start_date = datetime.strptime("2016-02-01", '%Y-%m-%d')
    end_date = date.today()

    stocks = fd.getStocks(True)
    print stocks
    print "**********************************"
    stocks = fd.getStocks(False)
    print stocks
    print "**********************************"
    index = fd.getBasicData("0000001", start_date, end_date)
    print index
    print "**********************************"
    rf = fd.getRecoveryFactor("0600079", "600079", start_date)
    print rf
    print "**********************************"
    resultSet = ROC.getROC("000001", "2015-12-21")
    print resultSet[0][0]
    '''
    print du.convertDateToString(fd.getStockDate("000001", "2015-12-21", 1)[0][0], "%Y-%m-%d")
Beispiel #30
0
def sendListenStartEmail(receivers=default_receivers):
    if conf.IS_SEND_MAIL == False:
        return
    Async_req('http://95.163.200.245:11251/sendListenStartEmail/' +
              conf.hostname + '/' + du.getYMD() + '/' + receivers).start()
Beispiel #31
0
def sendSellDoneEmail(code="002197", receivers=default_receivers):
    if conf.IS_SEND_MAIL == False:
        return
    Async_req('http://95.163.200.245:11251/sendSellDoneEmail/' + code + '/' +
              conf.hostname + '/' + du.getYMD() + '/' + receivers).start()
Beispiel #32
0
def getHisDataFrame(code, date):
    preOneDay = du.getPreDayYMD(30, date)
    df = ts.get_k_data(code, preOneDay, date)
    return df
Beispiel #33
0
def startListenIsBigEmotionGood():
    queryWords = "非st;昨日涨停;昨日成交量>1000万;按昨日最终涨停时间升序排序前20;"
    w = execjs.eval("encodeURIComponent('" + queryWords + "')")
    url = 'https://www.iwencai.com/stockpick/search?typed=1&preParams=&ts=1&f=3&qs=pc_~soniu~stock~stock~history~query&selfsectsn=&querytype=stock&searchfilter=&tid=stockpick&w=' + w
    browser = None
    try:
        browser = webdriver.Chrome(
            os.path.abspath('.') + '\driver\chromedriver.exe')
        browser.get(url)
        time.sleep(4)
        browser.implicitly_wait(1)
        try:
            elem = browser.find_element_by_css_selector(
                '#resultWrap #showPerpage select option[value="50"]')
            if elem is not None:
                elem.click()
        except:
            lu.log("get_html_forWencai Execption")
        html = browser.execute_script(
            "return document.documentElement.outerHTML")
        browser.quit(
        )  # 关闭浏览器。当出现异常时记得在任务浏览器中关闭PhantomJS,因为会有多个PhantomJS在运行状态,影响电脑性能
        soup = BeautifulSoup(html, "html.parser")
        eles = soup.select(
            '#resultWrap .static_con_outer .tbody_table tr td.item div.em')
        index = 0
        codeArr = []
        while index < eles.__len__():
            o_str = eles[index].text.strip()
            if (o_str.isdigit()):
                codeArr.append(o_str)
            index = index + 1
    except Exception as e:
        browser.quit()
        return None

    while True:
        if du.getHMS() < '09:25:00':
            print("[" + du.getHMS() +
                  "] startListenIsBigEmotionGood: tik tok...")
            time.sleep(3)
            continue
        riskCount = 0
        for code in codeArr:
            #记录开盘涨跌幅,只记录一次
            if map_code_openrate_rel.keys().__len__(
            ) == 0 and du.getHMS() > "09:25:30" and du.getHMS() < "09:30:00":
                df = gs.getDataFrame(code)
                rate = gs.getRate(df)
                map_code_openrate_rel[code] = rate
            #记录竞价涨跌幅
            if du.getHMS() > "09:30:00":
                df = gs.getDataFrame(code)
                rate = gs.getRate(df)
                map_code_now_rel[code] = rate
            #计算riskCount
            if map_code_openrate_rel.keys().__len__(
            ) > 0 and map_code_now_rel.keys().__len__() > 0:
                for code in map_code_now_rel.keys():
                    r_now = float(map_code_now_rel[code])
                    r_open = float(map_code_openrate_rel[code])
                    #现在涨跌幅<0
                    if r_now < 0:
                        riskCount = riskCount + 1
                    if (r_now - r_open) < 0:
                        riskCount = riskCount + 1

        if map_code_openrate_rel.keys().__len__(
        ) == 0 or map_code_now_rel.keys().__len__() == 0:
            Config.isBigEmotionGood = False
        if riskCount > 6:
            Config.isBigEmotionGood = False
        else:
            Config.isBigEmotionGood = True

        time.sleep(30)
        print("[" + du.getHMS() +
              "] startListenIsBigEmotionGood: after cal tik tok...")
Beispiel #34
0
def dayreport_generate(importdate):
    try:
        starttime = time.localtime(time.time())
        conn = MySQLdb.connect(host='localhost',user='******',passwd='123456',db='stock',charset="utf8")
        cursor = conn.cursor()
        #importdate = time.strftime('%Y-%m-%d',time.localtime(time.time()))
            #importdate='2015-11-13'
        sql ="select * from stock_basic where code not in(select stockno from stock_day_report where importdate like'"+importdate+"%')"
        cursor.execute(sql)
        for stockrow in cursor.fetchall():
            stockno = stockrow[0]
            #stockno='600000'
            stockname=stockrow[1]
            print stockno+stockname
        #获得同花顺的相关数据
        #在这个地方增加循环的操作

            #http://stockpage.10jqka.com.cn/realHead_v2.html#hs_600061
            url = "http://stockpage.10jqka.com.cn/"+stockno
            request = urllib2.Request(url)
            response = urllib2.urlopen(request)
            content =  response.read()
            soup = BeautifulSoup(content,'html5lib')
            csvout  = csv.writer(sys.stdout)
            ###获得主营业务
            request = urllib2.Request("http://stockpage.10jqka.com.cn/"+stockno+"/operate/")
            response = urllib2.urlopen(request)
            contentZyyw =  response.read()
            soupZyyw = BeautifulSoup(contentZyyw,"html5lib")
            csvout1  = csv.writer(sys.stdout)
            cplxTag = soupZyyw.find("ul",class_="main_intro_list")
            if cplxTag==None:
                cplx = ""
            else:
                cplx =  cplxTag.li.p.text
            print cplx
            sshySql= "select * from stock_industry_classified where code=\'"+stockno+"\'"
            print sshySql
            cursor.execute(sshySql)
            sshy = ""
            for rowSshy in cursor.fetchall():
                sshy =  rowSshy[3].strip()
            print soup.find_all("dl", class_="company_details")
            for content1 in soup.find_all("dl", class_="company_details"):
                print "company_details"
                print content1
                for details in content1.find_all("dt"):
                    if details.string==unicode("所属地域:","utf-8"):
                        ssdy= details.next_sibling.next_sibling.string.strip()
                        print details.string+ssdy
                    elif details.string==unicode("涉及概念:","utf-8"):
                        sjgn = details.next_sibling.next_sibling["title"]
                        print sjgn
                    elif details.string==unicode("主营业务:","utf-8"):
                        zyyw = details.next_sibling.next_sibling.string
                        print zyyw
                    elif details.string==unicode("上市日期:","utf-8"):
                        sssj = details.next_sibling.next_sibling.string
                        print sssj
                    elif details.string==unicode("每股净资产:","utf-8"):
                        mgjzc = details.next_sibling.next_sibling.string[:-1]
                        print mgjzc[:-1]
                    elif details.string==unicode("每股收益:","utf-8"):
                        mgsy = details.next_sibling.next_sibling.string[:-1]
                        print mgsy[:-1]
                    elif details.string==unicode("净利润:","utf-8"):
                        jlr = details.next_sibling.next_sibling.string[:-2]
                        print jlr[:-2]
                    elif details.string==unicode("净利润增长率:","utf-8"):
                        jlrzzl = details.next_sibling.next_sibling.string[:-1]
                        print jlrzzl[:-1]
                    elif details.string==unicode("营业收入:","utf-8"):
                        yysr = details.next_sibling.next_sibling.string[:-2]
                        print yysr[:-2]
                    elif details.string==unicode("每股现金流:","utf-8"):
                        mgxjl = details.next_sibling.next_sibling.string[:-1]
                        print mgxjl[:-1]
                    elif details.string==unicode("每股公积金:","utf-8"):
                        mggjj = details.next_sibling.next_sibling.string[:-1]
                        print mggjj[:-1]
                    elif details.string==unicode("每股未分配利润:","utf-8"):
                        mgwfplr = details.next_sibling.next_sibling.string[:-1]
                        print mgwfplr[:-1]
                    elif details.string==unicode("总股本:","utf-8"):
                        zgb = details.next_sibling.next_sibling.string[:-1]
                        print zgb[:-1]
                    elif details.string==unicode("流通股:","utf-8"):
                        ltg = details.next_sibling.next_sibling.string[:-1]
                        print ltg[:-1]
            #从东方财富抓取数据
            if stockno[0:2]=="60":
                dfUrl = "http://quote.eastmoney.com/sh"+stockno+".html"
            else:
                dfUrl = "http://quote.eastmoney.com/sz"+stockno+".html"
            request = urllib2.Request(dfUrl)
            response = urllib2.urlopen(request)
            dfcontent =  response.read()

            dfSoup = BeautifulSoup(dfcontent,"lxml")

            csvout  = csv.writer(sys.stdout)
            hxTableTag = dfSoup.find("table",id="rtp2")
            print "hxtabletag"
            print hxTableTag
            if hxTableTag!=None:
                trContent = hxTableTag.find_all("tr")
                dtsyl = trContent[0].find_all("td")[1].text[6:]
                sjl = trContent[1].find_all("td")[1].text[4:]
                mlv = trContent[4].find_all("td")[0].text[4:][:-1]
                jlv = trContent[4].find_all("td")[1].text[4:][:-1]
                roe = trContent[5].find_all("td")[0].text[4:][:-1]
                fzl = trContent[5].find_all("td")[1].text[4:][:-1]
                zsz = trContent[6].find_all("td")[1].text[3:][:-1]
                print "zsz"+zsz
                ltsz = trContent[7].find_all("td")[1].text[3:][:-1]
                print "jlv" +trContent[4].find_all("td")[1].text[4:]
            #获得解禁时间
            jjSql = "select min(jjsj) jjsj from stock_jjsj where stockno='"+stockno+"' and jjsj>='"+importdate+"'"
            cursor.execute(jjSql)
            jjRow = cursor.fetchone()
            print jjRow
            if jjRow[0] ==None:
               jjsj = ""
            else:
               jjsj = jjRow[0]
            #获得上月收盘价
            #获得本日收盘价
            #获得上个月
            pre_month = dateutil.get_pre_month()
            print pre_month
            syspjSQL ="select * from stock_day_data where date=(select max(date) from stock_day_data where code='"+stockno+"' and left(date,7)='"+pre_month+"') and code='"+stockno+"' "
            brspjSQL = "select * from stock_day_data where date like'"+importdate+"%' and code='"+stockno+"'"
            cursor.execute(syspjSQL)
            syspjRow = cursor.fetchone()
            print syspjRow
            if syspjRow==None:
                syspj = ""
            else:
                syspj = str(syspjRow[4])

            if syspj is None :
                syspj=""
            #本日收盘价
            cursor.execute(brspjSQL)
            brspjRow = cursor.fetchone()
            print brspjRow
            if None==brspjRow:
                print "brspj"
                brspj = ""
            else:
                brspj = str(brspjRow[4])
            tenHolder = getTenHolder(stockno)
            if tenHolder.find("'") !=-1:
                         tenHolder = tenHolder.replace("'", "\\'")
            gdrs = getGdbhs(stockno)

            insertsql = "insert into stock_day_report (stockno,stockname,importdate,ssdy,sjgn,cplx,sshy,sssj,mgjzc,mgsy,jlr,jlrzzl,yysr,mgxjl,mggjj,mgwfplr,zgb,ltg," \
                        "zsz,ltsz,sjl,dtsyl," \
                        "mlv,jlv,roe,fzl,jjsj,syspj,brspj,tenholder,gdrs" \
                        ")             " \
                        "values(\'"+stockno+"\',\'"+stockname+"\',\'"+importdate+"\',\'"+ssdy+"\',\'"+sjgn+"\',\'"+cplx+"\',\'"+sshy+"\',\'"+sssj+"\',\'"+mgjzc+"\',\'"+mgsy+"\',\'"+jlr+"\',\'"+jlrzzl+"\',\'"+yysr+"\',\'"+mgxjl+"\',\'"+mggjj+"\',\'"+mgwfplr+"\',\'"+zgb+"\',\'"+ltg+"\'," \
                        "\'"+zsz+"\',\'"+ltsz+"\',\'"+sjl+"\',\'"+dtsyl+"\',\'"+mlv+"\',\'"+jlv+"\',\'"+roe+"\',\'"+fzl+"\',\'"+jjsj+"\',\'"+syspj+"\',\'"+brspj+"\',\'"+tenHolder+"\',\'"+gdrs+"\')"
            print insertsql
            cursor.execute(insertsql)
            conn.commit()
        cursor.close()


        df = pd.read_sql("select * from stock_day_report where importdate='"+importdate+"' and brspj!=0 order by sshy,ltg,zgb",conn)
        df.rename(columns={'stockno':'股票代码','stockname':'股票名称','sshy':'所属行业','sjgn':'涉及概念','brspj':'本日收盘价','syspj':'上月收盘价','ltg':'流通股','zgb':'总股本','jlr':'净利润','yysr':'营业收入','mgjzc':'每股净资产','mgsy':'每股收益','jlrzzl':'净利润增长率','mgxjl':'每股现金流','mggjj':'每股公积金','mgwfplr':'每股未分配利润','dtsyl':'动态市盈率','sjl':'市净率','ltsz':'流通市值','zsz':'总市值','jjsj':'解禁时间','mlv':'毛利率','jlv':'净利率','roe':'ROE','fzl':'负债率','importdate':'导入日期','sssj':'上市时间','cplx':'产品类型','ssdy':'所属地域','lrzy':'利润总额','tenholder':'十大持股人','gdrs':'股东人数'}, inplace=True)
        print df
        #首先执行相关数据导入操作
        df.to_csv('d:/'+importdate+'.csv',encoding='gbk', index=False)
        if mailutil.send_mail("每日股票报告", importdate +"report", r"d:/"+importdate+".csv"):
            print "1111"
        else:
            print "2222!"


    except Exception,e:
        print e.message
        print e
Beispiel #35
0
    def listenZhangting(self, codeArr):
        isEnd = False
        line = ''
        forbidden_line = ''
        forbidden_control_msg = {}
        forbidden_control_msg['count'] = 0
        forbidden_control_msg['limit'] = 3
        loopCount = 0
        rate_underZero_codes = []

        while True:

            if du.getHMS() > '11:30:00' and du.getHMS() < '12:59:30':
                time.sleep(10)
                print('sleeping...')

            obj = Action.getForbiddenCodeString(forbidden_line,
                                                forbidden_control_msg)
            forbidden_control_msg = obj['msg']
            forbidden_line = obj['line']
            # if self.threadLocal.buyCount == Config.positions.__len__():
            #     isEnd = True
            #     lu.log("----------------->仓位数组已使用完")
            if codeArr.__len__() == 0:
                isEnd = True
                lu.log("----------------->无监听标的")
            if self.isTime2Exit():
                isEnd = True
                lu.log("----------------->不在设置的交易时间内")
                time.sleep(3)
            if isEnd is True:
                break
            begintime = clock()
            i = 0
            if loopCount == 0 or loopCount % Config.LOOPCOUNT_2_REFRESH_NONEEDTOCHECKISZHANGTING == 0:
                print('重新分配监听优化数组,放弃监听')
                rate_underZero_codes = []
            while i < codeArr.__len__():
                code = codeArr[i]
                if code in line or code in forbidden_line:
                    i = i + 1
                    continue
                i = i + 1
                # 涨跌幅过滤
                if code in rate_underZero_codes:
                    continue
                dataFrame = self.ds.getDataFrame(code)
                if dataFrame is None:
                    continue
                if loopCount == 0 or loopCount % Config.LOOPCOUNT_2_REFRESH_NONEEDTOCHECKISZHANGTING == 0:
                    rate = self.ds.getRate(dataFrame)
                    if rate < Config.RATE_2_Listen:
                        print('统计入涨跌幅优化数组,放弃监听->' + code + ":" + str(rate))
                        rate_underZero_codes.append(code)
                    else:
                        print('进入监听名单->' + code + ":" + str(rate))
                # 涨跌幅过滤
                if code in rate_underZero_codes:
                    continue
                if self.ds.isZhangting(dataFrame) is False:
                    continue
                #Test
                # if loopCount >= 0:
                #     continue
                name = self.ds.getStockName(dataFrame)
                zhangtingprice = self.ds.getZhangtingPrice(dataFrame)
                if self.isShouldBuy():
                    #posi = Config.positions[self.threadLocal.buyCount]
                    posi = '100'
                    if posi != '0':
                        Action.buyAction(code, name, zhangtingprice, posi)
                        self.threadLocal.buyCount = self.threadLocal.buyCount + 1
                        isEnd = True
                        break
                    else:
                        lu.log(
                            '------------------------------------->posi == "0" 放弃买入'
                        )
                else:
                    lu.log('------------------------------------->未达到条件放弃买入')

                line = line + code + '~'
                break

            print('$$$$$$$$$$$$zhangtingcodes: ' + line +
                  ' - zhangtingcount: ' + str(line.count('~')))
            print(
                '$$$$$$$$$$$$spend------------------------------------------------>'
                + str(clock() - begintime))
            time.sleep(1)
            loopCount = loopCount + 1
            print(
                '$$$$$$$$$$$$loopC------------------------------------------------>'
                + str(loopCount) + "->" +
                str(Config.LOOPCOUNT_2_REFRESH_NONEEDTOCHECKISZHANGTING))
Beispiel #36
0
def risk(code, startYMD=du.getPreDayYMD(1)):
    days_ForCaculating = 20
    today = startYMD
    preOneDay = du.getPreDayYMD(days_ForCaculating + 10, startYMD)
    df = ts.get_k_data(code, preOneDay, today)
    pre_close = 0
    riskcount = 0
    yesterdayIsZhangting = False
    count = 0
    little_shangying_count = 0
    isHasPlus4PercentDay = False
    pre_o_rate = 0
    pre_h_rate = 0
    pre_c_rate = 0

    for x in range(len(df.index)):
        if x == 0:
            pre_close = df['close'].iloc[x]
            continue
        # code = df['code'].iloc[x]
        # date = df['date'].iloc[x]
        # low = df['low'].iloc[x]
        # volume = df['volume'].iloc[x]

        open = df['open'].iloc[x]
        close = df['close'].iloc[x]
        high = df['high'].iloc[x]

        # 当日最高阶幅度
        h_rate = round(float((high - pre_close) / pre_close) * 100, 2)
        # 当日收盘幅度
        c_rate = round(float((close - pre_close) / pre_close) * 100, 2)
        # 当日开盘幅度
        o_rate = round(float((open - pre_close) / pre_close) * 100, 2)
        # 保证取到14天的数据
        if count + days_ForCaculating < len(df.index):
            pre_close = df['close'].iloc[x]
            count = count + 1
            yesterdayIsZhangting = False
            if high == close and h_rate > 9.5 and o_rate > 3:
                yesterdayIsZhangting = True
            continue

        #! 板后统计开盘溢价
        if yesterdayIsZhangting == True:
            if o_rate > 0:
                #第一等级风险:虽然高开,但是一路低走,人气涣散
                if o_rate > 0 and (o_rate - c_rate) > 6:
                    riskcount = riskcount + (c_rate - o_rate) * 1000
                elif riskcount < 0:
                    riskcount = riskcount + o_rate * 1000
                else:
                    riskcount = riskcount + o_rate * 3
                #print("板后统计开盘溢价: " + date)
            else:
                riskcount = riskcount + o_rate
                #print("板后亏钱开盘: " + str(o_rate*1000))

            yesterdayIsZhangting = False
        #!第二等级风险:烂板天
        if h_rate > 9.5 and h_rate != c_rate and h_rate - c_rate > 5:
            #print("烂板: " + date)
            riskcount = riskcount + (c_rate - h_rate) * 1000
            #a = 1
        else:
            # ! 高开统计(非烂板基础上)
            if c_rate > 2 and o_rate > 1 and h_rate < 8:
                riskcount = riskcount + o_rate
                #print("高开高走统计: " + date)

        # !第三等级风险:长上影+长阴实体
        if h_rate - o_rate > 4 and o_rate - c_rate > 4:
            riskcount = riskcount + (c_rate - h_rate) * 1000

        if h_rate - o_rate > 2:
            if little_shangying_count > 0.618 * days_ForCaculating:
                riskcount = riskcount - 1
            little_shangying_count = little_shangying_count + 1

        # 统计这么多天来,是否存在实体涨幅大于4
        if c_rate > 4 and c_rate - o_rate > 2:
            isHasPlus4PercentDay = True
        if h_rate > 9.5 and (h_rate - c_rate) < 1:
            yesterdayIsZhangting = True
        pre_close = df['close'].iloc[x]
        pre_o_rate = o_rate
        pre_h_rate = h_rate
        pre_c_rate = c_rate
        count = count + 1

    if riskcount < 1 and riskcount > -1:
        riskcount = 0
    if isHasPlus4PercentDay == False:
        riskcount = riskcount - 10
    return riskcount
Beispiel #37
0
                bd.updateMasterDate("LAST_UPDATED_DATE", last_updated_date, stock_code_163)
                logger.info("LAST DATE UPDATED")

                if str(index_indicator) == "1":
                    rf = bd.getRecoveryFactor(stock_code_163, stock_code_sina, start_date)
                    bd.insertRecoveryFactor(stock_code, rf)
                    logger.info("INSERT RF DATA COMPLETED")
            else:
                logger.error("NO DATA IS RECEIVED FROM 163")

        result_set = dbu.query(sql)
        if len(result_set) > 0:
            logger.info("NOT ALL STOCKS ARE UPDATED, WAIT 10 MINUTES FOR NEXT UPDATE")
            tm.sleep(10*60)

    return "COMPLETED"


if __name__ == '__main__':
    end_date = date.today()

    if bd.isHoliday(du.convertDateToString(end_date, "%Y-%m-%d")) == "W":
        logger.info("TODAY IS WORKING DAY, CONTINUE")
        if smartUpdate(end_date) == "COMPLETED":
            bd.callTechUpdateProc()
            logger.info("CALL PROC TO UPDATE TECH DATA")
            tm.sleep(60*5)
            sa.analyzeAllStocks(end_date)
            logger.info("ANALYSIS COMPLETE")
    else:
        logger.info("PROGRAM EXITS BECAUSE OF HOLIDAY")
Beispiel #38
0
# -*- coding: utf-8 -*-

import traceback

# import hashlib
from DateUtil import *
from DbUtil import *

VIP_USE_TIMES = (5, 80, 600, 1300, 0)
# 月会员3次
# 季度10次
# 半年会员21次
# 年会员43次
# 永久会员
db = DbUtil()
date_util = DateUtil()


def is_use_forever(vip_type):
    if vip_type == VipType.forever:
        return True
    else:
        return False


# def get_use_times(vip_type):
# 	if vip_type in VipType:
# 		return VIP_USE_TIMES[vip_type.value]
# 	else:
# 		return 0
Beispiel #39
0
def getZhangTingCodeArr(date):
    preDate = du.getPreDayYMD(1, date)
    qw = '非st;'+preDate+'日涨跌幅;'+date+'日最大涨幅>9.89;'+preDate+'日涨跌幅<9'
    return getCodeArr(qw)