def 连续N次股东户数减少(arr, count=1): currentDateTag = CONVERT.GetCurrentDateTag() arr = sorted(arr, key=lambda k: k["股东户数统计截止日Tag"], reverse=True) size = len(arr) count = count if count < size else size subArr = arr[:count] subArr = list( filter(lambda k: k["股东户数统计截止日Tag"] >= currentDateTag - 100, subArr)) #时间段要改进 if 0 == len(subArr): return False subArr股东户数增减比例 = list(map(lambda x: x["股东户数增减比例"], subArr)) subArr股东户数增减比例中位数 = median(subArr股东户数增减比例) find = True and 0 < len(subArr) for item in subArr: #print("%s %s %s"%(arr[0]["Code"],arr[0]["Name"],item["股东户数增减比例"])) if item["股东户数增减比例"] > 0: find = find and False break elif item["股东户数增减比例"] == 0: find = find and False break elif item["股东户数增减比例"] < 0 and subArr股东户数增减比例中位数 < 0: find = find and True return find pass
def 最新盈利能力指标(arr, count=3): arr = list(filter(lambda k: "每股指标Tag" in k, arr)) # currentDateTag = CONVERT.GetCurrentDateTag() arr = sorted(arr, key=lambda k: k["每股指标Tag"], reverse=True) size = len(arr) count = count if count < size else size subArr = arr[:count] subArr = list(filter(lambda k: k["每股指标Tag"] >= 20190331, subArr)) #时间段要改进 if 0 == len(subArr): return False subArr加权净资产收益率 = list(map(lambda x: x["加权净资产收益率(%)"], subArr)) subArr加权净资产收益率中位数 = median(subArr加权净资产收益率) find = True and 0 < len(subArr) for item in subArr: #print("%s %s %s"%(arr[0]["Code"],arr[0]["Name"],item["股东户数增减比例"])) if 6 < item["加权净资产收益率(%)"] and 0.5 <= item["每股经营现金流(元)"] and item[ "资产负债率(%)"] <= 50: find = find and True elif item["加权净资产收益率(%)"] == 0: find = find and False break elif item["加权净资产收益率(%)"] < 0: find = find and False break else: return False return find pass
def 最新N月内机构调研(arr,count=3): arr = list(filter(lambda k:"接待日期Tag" in k,arr)) # currentDateTag = CONVERT.GetCurrentDateTag() arr = sorted(arr, key = lambda k:k["接待日期Tag"],reverse=True) size = len(arr) count = count if count<size else size subArr = arr[:count] subArr = list(filter(lambda k:k["接待日期Tag"]>= 20191101,subArr)) #时间段要改进 if 0== len(subArr): return False subArr接待机构数量=list(map(lambda x:x["接待机构数量"],subArr)) subArr接待机构数量中位数 = median(subArr接待机构数量) find=True and 0<len(subArr) for item in subArr: #print("%s %s %s"%(arr[0]["Code"],arr[0]["Name"],item["股东户数增减比例"])) if 8<=item["接待机构数量"] and 8<=subArr接待机构数量中位数: find=find and True elif item["接待机构数量"]==0: find=find and False break elif item["接待机构数量"]<0: find=find and False break else: return False return find pass
def 最新盈利能力指标(arr, count=8): currentDateTag = CONVERT.GetCurrentDateTag() arr = sorted(arr, key=lambda k: k["盈利能力指标ag"], reverse=True) size = len(arr) count = count if count < size else size subArr = arr[:count] subArr = list(filter(lambda k: k["盈利能力指标Tag"] >= 20190930, subArr)) #时间段要改进 if 0 == len(subArr): return False subArr加权净资产收益率 = list(map(lambda x: x["加权净资产收益率(%)"], subArr)) subArr主力净流入净占比中位数 = median(subArr主力净流入净占比) find = True and 0 < len(subArr) for item in subArr: #print("%s %s %s"%(arr[0]["Code"],arr[0]["Name"],item["股东户数增减比例"])) if item["加权净资产收益率(%)"] > 0: find = find and False break elif item["主力净流入净占比"] == 0: find = find and False break elif item["主力净流入净占比"] < 0 and subArr主力净流入净占比中位数 < 0: find = find and True return find pass
def 涨跌幅P1大于一半(arr, count=20): currentDateTag = CONVERT.GetCurrentDateTag() arr = sorted(arr, key=lambda k: k["日期Tag"], reverse=True) size = len(arr) count = count if count < size else size subArr = arr[:count] subArr = list(filter(lambda k: k["日期Tag"] >= 20191215, subArr)) #时间段要改进 if 0 == len(subArr): return False subArr涨跌幅 = list(map(lambda x: x["涨跌幅"], subArr)) subArr涨幅绝对值大于P1小于P4 = list( filter(lambda x: abs(x["涨跌幅"]) > 1.0 and abs(x["涨跌幅"]) <= 4.0, subArr)) subArr涨幅绝对值大于P1小于P4中位数 = median( list(map(lambda x: x["涨跌幅"], subArr涨幅绝对值大于P1小于P4))) if 0.7 <= ( len(subArr涨幅绝对值大于P1小于P4) / len(subArr涨跌幅) ) and 0 < subArr涨幅绝对值大于P1小于P4中位数 and subArr涨幅绝对值大于P1小于P4中位数 < 0.2: return True return False pass
def callback(qName,input): #print(input) data=json.loads(input) code = data["Code"].strip() name = data["Name"].strip() tables = data["Tables"] if 3!=len(tables): return None table=data["Tables"][2] rows=table["body"] for row in rows: if 8== len(row): 序号 =CONVERT.StrToInt (row[0]) 机构名称 = row[1] 日期Tag = CONVERT.GetCurrentDateTag() 机构属性 = row[3] 持股总数 =CONVERT.StrToFloat(row[4]) 持股市值 = CONVERT.StrToFloat(row[5]) 占总股本比例 = CONVERT.StrToFloat( row[6]) 占流通股本比例= CONVERT.StrToFloat(row[7]) item={ "Code":code ,"Name":name ,"序号":序号 ,"日期Tag":日期Tag ,"机构属性":机构属性 ,"持股总数":持股总数 ,"持股市值":持股市值 ,"占总股本比例":占总股本比例 ,"占流通股本比例":占流通股本比例 } dictName="PreData:股票:%s:主力持仓"%code r.SortDictSave(dictName,json.dumps(item,ensure_ascii=False),日期Tag) print(item) pass