Пример #1
0
    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 + '”失败!已存在!')
Пример #2
0
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
Пример #3
0
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()
Пример #4
0
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
Пример #5
0
    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)
Пример #6
0
# coding=utf-8
Пример #7
0
    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, '没听懂,请明示!')