def add_stk(kind, name, tc): """ 增加持仓 :param name: :param tc: :return: """ # 判断输入的是代码是名称 if 'qh' in name: code = name[2:] elif name.isdigit(): code = name else: code = name2code(name) if code == '未知代码': text_append_color(tc, name + ':不识别的股票名字!请尝试使用股票代码!') return # 向配置文件中写入 增加持仓的stk代码 stk_now = read_config()[kind] if code not in stk_now: stk_now.append(code) write_config(kind, stk_now) text_append_color(tc, '增加“' + name + '”成功!') else: text_append_color(tc, '增加“' + name + '”失败!已存在!')
def add_opt_to_json_sub(input_str, json_file_url_, tc): # 返回字符串 return_str = [] # 已有文件,打开读取 if os.path.exists(json_file_url_): with open(json_file_url_, 'r') as _f: _opt_record = json.load(_f) else: _opt_record = {} # 解析输入 stk_name, opt, amount, p = input_str.split(' ') stk_code = name2code(stk_name) p, amount = float(p), float(amount) # 对输入格式进行检查 if amount % 100 != 0: tc.AppendText('格式错误!参考格式:\n美的集团 卖出 400 51.3') return if stk_code in _opt_record.keys(): opt_r_stk = _opt_record[stk_code] else: opt_r_stk = { 'b_opt': [], 'p_last': None, 'has_flashed_flag': True, 'total_earn': 0, 'last_prompt_point': -1 } if opt == '买入': opt_r_stk['b_opt'].append(dict(time=get_current_datetime_str(), p=p, amount=amount)) if opt == '卖出': if len(opt_r_stk['b_opt']) > 0: opt_r_stk, earn_this = sale_stk_sub(opt_r_stk, amount, p, tc) return_str.append('earn:' + str(earn_this) + '\n') opt_r_stk['p_last'] = p opt_r_stk['has_flashed_flag'] = True # 保存数据 _opt_record[stk_code] = opt_r_stk with open(json_file_url_, 'w') as _f: json.dump(_opt_record, _f) # 返回 return return_str
def cat_stk_b_opt_sub(stk_name, json_file_url): """ :param stk_name: :param json_file_url: :return: """ # 已有文件,打开读取 if os.path.exists(json_file_url): with open(json_file_url, 'r') as f: opt_record = json.load(f) else: return '没有记录文件!' if name2code(stk_name) not in opt_record.keys(): return '没有' + stk_name + '的数据!' if len(opt_record[name2code(stk_name)]['b_opt']) == 0: return stk_name + '没有操作记录!' return pd.DataFrame(opt_record[name2code(stk_name)]['b_opt']).sort_values(by='p', ascending=False).loc[:, ['time', 'p', 'amount']].to_string()
def add_real_trade_to_json_sub(input_str, json_file_url_, tc): # 返回字符串 return_str = [] # 解析输入 stk_name, opt, amount, p = input_str.split(' ') stk_code = name2code(stk_name) p, amount = float(p), float(amount) # 对输入格式进行检查 if amount % 100 != 0: tc.AppendText('格式错误!参考格式:\n美的集团 卖出 400 51.3') return if opt == '真买': rt.buy(stk_code, amount, p) if opt == '真卖': rt.sell(stk_code, amount, p) # 返回 return return_str
def delete_stk(kind, name, tc): """ 从持仓中删除 :param name: :param tc: :return: """ # 判断输入的是代码是名称 if name.isdigit(): code = name else: code = name2code(name) if code == '未知代码': text_append_color(tc, name + ':不识别的股票名字!请尝试使用股票代码!') return # 向配置文件中删除 增加持仓的stk代码 stk_now = read_config()[kind] if code in stk_now: stk_now.remove(code) write_config(kind, stk_now) text_append_color(tc, '删除“' + name + '”成功!') else: text_append_color(tc, '删除“' + name + '”失败!原先关注列表中没有 ' + name)
# coding=utf-8
def input_analysis(self, input_str): text_append_color(self.t3, '\n\n') if '增加持仓' in input_str: ipt_split = input_str.split(' ') # 向配置文件中写入 增加持仓的stk代码 StkConfig.add_stk(kind='buy_stk', name=ipt_split[1], tc=self.t3) elif '删除持仓' in input_str: ipt_split = input_str.split(' ') # 向配置文件中写入 增加持仓的stk代码 StkConfig.delete_stk(kind='buy_stk', name=ipt_split[1], tc=self.t3) elif '增加关注' in input_str: ipt_split = input_str.split(' ') # 向配置文件中写入 增加持仓的stk代码 StkConfig.add_stk(kind='concerned_stk', name=ipt_split[1], tc=self.t3) elif '查看记录' in input_str: ipt_split = input_str.split(' ') # 画图该stk的操作记录 plot_opt(stk_code=name2code(ipt_split[1]), tc=self.t3, opt_record=opt_record) elif '删除关注' in input_str: ipt_split = input_str.split(' ') StkConfig.delete_stk(kind='concerned_stk', name=ipt_split[1], tc=self.t3) elif '查看关注' in input_str: StkConfig.cat_stk(kind='concerned_stk', tc=self.t3) elif '查看持仓' in input_str: StkConfig.cat_stk(kind='buy_stk', tc=self.t3) elif '预测明日大盘' in input_str: # 启动数据处理线程,专用于处理数据,防止软件操作卡顿 index_predict_thread = threading.Thread(target=predict_tomorrow_index, args=(self.t3, False)) index_predict_thread.start() elif '清理' == input_str: self.t3.SetValue('') elif '帮助' == input_str: text_append_color(self.t3, total_cmd) elif ('买入' in input_str) | ('卖出' in input_str): add_opt(input_str, opt_record_file_url, self.t3) elif ('真买' in input_str) | ('真卖' in input_str): add_real_trade(input_str, opt_record_file_url, self.t3) elif '查看b记录' in input_str: cat_stk_opt_record( input_str=input_str, json_file_url=opt_record_file_url, tc=self.t3) elif '规则' in input_str: sc = SelectCmd() text_append_color(self.t3, sc.rule_input_pro(input_str)) elif '执行海选' == input_str: def sea_select_thread(tc): try: jq_login() sc = ExecuteSelectRole() sc.sea_select(tc) except Exception as e_: text_append_color(tc, '海选功能执行失败!原因:\n%s\n' % str(e_)) finally: text_append_color(tc, '\n请输入命令:\n', color=wx.YELLOW) # 启动数据处理线程,专用于处理数据,防止软件操作卡顿 sea_select_thread = threading.Thread(target=sea_select_thread, args=(self.t3,)) sea_select_thread.start() else: text_append_color(self.t3, '没听懂,请明示!')