Пример #1
0
def account_record_creat(token, report_date, db):
    """资产每日记录"""
    if not is_report:
        return True

    # 查询账户信息
    raw_data = {}
    raw_data['flt'] = {"account_id": token}
    db_data = DBData(db_name=SETTINGS['ACCOUNT_DB'],
                     db_cl=token,
                     raw_data=raw_data)
    account = db.on_query_one(db_data)

    if not account:
        return False

    # 创建每日账户记录
    account_daily = AccountRecord(account_id=account['account_id'],
                                  check_date=report_date,
                                  assets=account['assets'],
                                  available=account['available'],
                                  market_value=account['market_value'])
    raw_data = {}
    raw_data['flt'] = {'check_date': report_date}
    raw_data['data'] = account_daily
    db_data = DBData(db_name=SETTINGS['ACCOUNT_RECORD'],
                     db_cl=token,
                     raw_data=raw_data)
    db.on_replace_one(db_data)
Пример #2
0
def on_account_delete(token: str, db):
    """账户删除"""
    try:
        account = DBData(db_name=SETTINGS['ACCOUNT_DB'],
                         db_cl=token,
                         raw_data={})
        db.on_collection_delete(account)

        position = DBData(db_name=SETTINGS['POSITION_DB'],
                          db_cl=token,
                          raw_data={})
        db.on_collection_delete(position)

        order = DBData(db_name=SETTINGS['TRADE_DB'], db_cl=token, raw_data={})
        db.on_collection_delete(order)

        account_record = DBData(db_name=SETTINGS['ACCOUNT_RECORD'],
                                db_cl=token,
                                raw_data={})
        db.on_collection_delete(account_record)

        pos_record = DBData(db_name=SETTINGS['POS_RECORD'],
                            db_cl=token,
                            raw_data={})
        db.on_collection_delete(pos_record)

        return True
    except BaseException:
        return False
Пример #3
0
def calculate_result(token, db, start: str = None, end: str = None):
    """计算结果"""
    # 查询账户信息
    raw_data = {}
    raw_data['flt'] = {"account_id": token}
    db_data = DBData(db_name=SETTINGS['ACCOUNT_DB'],
                     db_cl=token,
                     raw_data=raw_data)
    account = db.on_query_one(db_data)

    if not account:
        return False

    captial = account['captial']
    cost = account['cost']
    tax = account['tax']
    slipping = account['slipping']

    # 资产记录表
    account_df = load_account_record(token, db, captial, start, end)

    # 持仓记录表
    pos_df = load_pos_record(token, db, start, end)

    # 交易记录表
    trade_df = load_trade_record(token, db, cost, tax, start, end)

    return captial, account_df, pos_df, trade_df
Пример #4
0
def pos_record_update_sell(token, db, symbol, pos):
    """更新持仓记录--卖出减仓"""
    if not is_report:
        return True

    query_flt = {'pt_symbol': symbol, 'is_clear': 0}
    data = query_pos_record_one(token, db, query_flt)
    if data:
        max_vol = data['max_vol']
        sell_price = data['sell_price_mean'] + (
            (pos['vol'] / max_vol) * pos['sell_price'])
    else:
        raise ValueError("持仓记录不存在")

    raw_data = {}
    raw_data["flt"] = {'pt_symbol': symbol, 'is_clear': 0}
    raw_data["set"] = {
        '$set': {
            'sell_price_mean': round(sell_price, P),
            'profit': pos['profit'],
            'last_sell_date': pos['date']
        }
    }
    db_data = DBData(db_name=SETTINGS['POS_RECORD'],
                     db_cl=token,
                     raw_data=raw_data)
    return db.on_update(db_data)
Пример #5
0
def on_account_add(account_info: dict, db):
    """创建账户"""
    token = get_token()

    # 账户参数
    param = {
        'capital': SETTINGS['CAPITAL'],
        'cost': SETTINGS['COST'],
        'tax': SETTINGS['TAX'],
        'slippoint': SETTINGS['SLIPPOINT'],
        'info': ""
    }

    # 更新账户参数
    param.update(account_info)

    account = Account(account_id=token,
                      assets=round(float(param['capital']), P),
                      available=round(float(param['capital']), P),
                      market_value=round(0.0, P),
                      capital=round(float(param['capital']), P),
                      cost=float(param['cost']),
                      tax=float(param['tax']),
                      slippoint=float(param['slippoint']),
                      account_info=param['info'])
    account_dict = copy.copy(account.__dict__)

    raw_data = {}
    raw_data['flt'] = {'account_id': token}
    raw_data['data'] = account
    db_data = DBData(db_name=SETTINGS['ACCOUNT_DB'],
                     db_cl=token,
                     raw_data=raw_data)
    if db.on_insert(db_data):
        return account_dict
Пример #6
0
def on_position_insert(order: Order, cost: float, db):
    """持仓增加"""
    profit = cost * -1
    available = order.traded
    if order.trade_type == TradeType.T_PLUS1.value:
        available = 0

    pos = Position(code=order.code,
                   exchange=order.exchange,
                   account_id=order.account_id,
                   buy_date=order.order_date,
                   volume=order.traded,
                   available=available,
                   buy_price=order.trade_price,
                   now_price=order.trade_price,
                   profit=profit)

    raw_data = {}
    raw_data['flt'] = {'pt_symbol': pos.pt_symbol}
    raw_data['data'] = pos
    db_data = DBData(db_name=SETTINGS['POSITION_DB'],
                     db_cl=order.account_id,
                     raw_data=raw_data)
    if db.on_insert(db_data):
        # 保存持仓记录
        return pos_record_creat(order.account_id, db, pos)
Пример #7
0
def pos_record_update_buy(token, db, symbol, pos: dict):
    """更新持仓记录--买入加仓"""
    if not is_report:
        return True

    # 查询持仓记录
    flt = {'pt_symbol': symbol, 'is_clear': 0}
    data = query_pos_record_one(token, db, flt)
    if data:
        new_max_vol = data['max_vol'] + pos['vol']
    else:
        raise ValueError("持仓记录不存在")

    raw_data = {}
    raw_data["flt"] = flt
    raw_data["set"] = {
        '$set': {
            'max_vol': new_max_vol,
            'buy_price_mean': pos['buy_price'],
            'profit': pos['profit']
        }
    }
    db_data = DBData(db_name=SETTINGS['POS_RECORD'],
                     db_cl=token,
                     raw_data=raw_data)
    return db.on_update(db_data)
Пример #8
0
def on_orders_clear(token, db):
    """订单数据清空"""
    raw_data = {}
    raw_data['flt'] = {}
    db_data = DBData(db_name=SETTINGS['TRADE_DB'],
                     db_cl=token,
                     raw_data=raw_data)
    db.on_collection_delete(db_data)
Пример #9
0
def on_position_delete(data: dict, db):
    """持仓删除事件"""
    raw_data = {}
    raw_data["flt"] = {'pt_symbol': data["symbol"]}
    db_data = DBData(db_name=SETTINGS['POSITION_DB'],
                     db_cl=data['token'],
                     raw_data=raw_data)
    db.on_delete(db_data)
Пример #10
0
def pos_record_clear(token, db):
    """持仓记录清空"""
    raw_data = {}
    raw_data['flt'] = {}
    db_data = DBData(db_name=SETTINGS['POS_RECORD'],
                     db_cl=token,
                     raw_data=raw_data)
    db.on_collection_delete(db_data)
Пример #11
0
def account_record_clear(token, db):
    """账户记录清空"""
    raw_data = {}
    raw_data['flt'] = {}
    db_data = DBData(db_name=SETTINGS['ACCOUNT_RECORD'],
                     db_cl=token,
                     raw_data=raw_data)
    db.on_collection_delete(db_data)
Пример #12
0
def on_position_clear(token: str, db):
    """持仓清空事件"""
    raw_data = {}
    raw_data['flt'] = {}
    db_data = DBData(db_name=SETTINGS['POSITION_DB'],
                     db_cl=token,
                     raw_data=raw_data)
    db.on_collection_delete(db_data)
Пример #13
0
def account_record_insert_many(token, record_list, db):
    """批量保存账户记录数据"""
    raw_data = {}
    raw_data['flt'] = {}
    raw_data['data'] = record_list
    db_data = DBData(db_name=SETTINGS['ACCOUNT_RECORD'],
                     db_cl=token,
                     raw_data=raw_data)
    return db.on_insert_many(db_data)
Пример #14
0
def account_record_creat(account_record, db):
    """资产每日记录"""
    raw_data = {}
    raw_data['flt'] = {'check_date': account_record.check_date}
    raw_data['data'] = account_record
    db_data = DBData(db_name=SETTINGS['ACCOUNT_RECORD'],
                     db_cl=account_record.account_id,
                     raw_data=raw_data)
    db.on_replace_one(db_data)
Пример #15
0
def pos_record_creat(pos_record, db):
    """创建持仓记录"""
    raw_data = {}
    raw_data['flt'] = {}
    raw_data['data'] = pos_record
    db_data = DBData(db_name=SETTINGS['POS_RECORD'],
                     db_cl=pos_record.account_id,
                     raw_data=raw_data)
    return db.on_insert(db_data)
Пример #16
0
def pos_record_insert_many(token, record_list, db):
    """批量保存持仓记录数据"""
    raw_data = {}
    raw_data['flt'] = {}
    raw_data['data'] = record_list
    db_data = DBData(db_name=SETTINGS['POS_RECORD'],
                     db_cl=token,
                     raw_data=raw_data)
    return db.on_insert_many(db_data)
Пример #17
0
def on_position_insert(pos: Position, db):
    """持仓增加"""
    raw_data = {}
    raw_data['flt'] = {'pt_symbol': pos.pt_symbol}
    raw_data['data'] = pos
    db_data = DBData(db_name=SETTINGS['POSITION_DB'],
                     db_cl=pos.account_id,
                     raw_data=raw_data)
    db.on_insert(db_data)
Пример #18
0
def pos_record_update_liq(data, db):
    """更新持仓记录--清仓"""
    raw_data = {}
    raw_data["flt"] = {'pt_symbol': data['symbol'], 'is_clear': 0}
    raw_data["set"] = {'$set': {'is_clear': 1}}
    db_data = DBData(db_name=SETTINGS['POS_RECORD'],
                     db_cl=data['token'],
                     raw_data=raw_data)
    return db.on_update(db_data)
Пример #19
0
def on_orders_insert_many(token, order_list, db):
    """批量保存订单数据"""
    raw_data = {}
    raw_data['flt'] = {}
    raw_data['data'] = order_list
    db_data = DBData(db_name=SETTINGS['TRADE_DB'],
                     db_cl=token,
                     raw_data=raw_data)
    return db.on_insert_many(db_data)
Пример #20
0
def on_account_avl_update(data: dict, db):
    """账户可用资金更新"""
    raw_data = {}
    raw_data["flt"] = {'account_id': data['token']}
    raw_data["set"] = {'$set': {'available': data['avl']}}
    db_data = DBData(db_name=SETTINGS['ACCOUNT_DB'],
                     db_cl=data['token'],
                     raw_data=raw_data)
    return db.on_update(db_data)
Пример #21
0
def on_position_avl_update(data: dict, db):
    """可用证券更新"""

    raw_data = {}
    raw_data["flt"] = {'pt_symbol': data['symbol']}
    raw_data["set"] = {'$set': {'available': data['avl']}}
    db_data = DBData(db_name=SETTINGS['POSITION_DB'],
                     db_cl=data['token'],
                     raw_data=raw_data)
    return db.on_update(db_data)
Пример #22
0
def on_buy_frozen(account, pay: float, db):
    """买入资金冻结"""
    available = account["available"] - pay
    raw_data = {}
    raw_data["flt"] = {'account_id': account["account_id"]}
    raw_data["set"] = {'$set': {'available': available}}
    db_data = DBData(db_name=SETTINGS['ACCOUNT_DB'],
                     db_cl=account["account_id"],
                     raw_data=raw_data)
    return db.on_update(db_data)
Пример #23
0
def on_sell_frozen(pos, vol: float, db):
    """卖出证券冻结"""
    available = pos["available"] - vol
    raw_data = {}
    raw_data["flt"] = {'pt_symbol': pos['pt_symbol']}
    raw_data["set"] = {'$set': {'available': available}}
    db_data = DBData(db_name=SETTINGS['POSITION_DB'],
                     db_cl=pos["account_id"],
                     raw_data=raw_data)
    return db.on_update(db_data)
Пример #24
0
def on_sell_cancel(order: Order, db):
    """卖出取消"""
    result, pos = query_position_one(order.account_id, order.pt_symbol, db)
    available = pos["available"] + order.volume - order.traded
    raw_data = {}
    raw_data["flt"] = {'pt_symbol': pos["pt_symbol"]}
    raw_data["set"] = {'$set': {'available': available}}
    db_data = DBData(db_name=SETTINGS['POSITION_DB'],
                     db_cl=pos["account_id"],
                     raw_data=raw_data)
    return db.on_update(db_data)
Пример #25
0
def query_pos_record_one(token, db, flt):
    """获取持仓记录"""
    raw_data = {}
    raw_data['flt'] = flt
    db_data = DBData(db_name=SETTINGS['POS_RECORD'],
                     db_cl=token,
                     raw_data=raw_data)
    pos_record = db.on_query_one(db_data)
    if pos_record:
        return pos_record
    else:
        return False
Пример #26
0
def pos_record_update_liq(token, db, symbol):
    """更新持仓记录--清仓"""
    if not is_report:
        return True

    raw_data = {}
    raw_data["flt"] = {'pt_symbol': symbol, 'is_clear': 0}
    raw_data["set"] = {'$set': {'is_clear': 1}}
    db_data = DBData(db_name=SETTINGS['POS_RECORD'],
                     db_cl=token,
                     raw_data=raw_data)
    return db.on_update(db_data)
Пример #27
0
def on_orders_exist(token: str, order_id: str, db):
    """查询订单是否存在"""
    raw_data = {}
    raw_data["flt"] = {'order_id': order_id}
    db_data = DBData(db_name=SETTINGS['TRADE_DB'],
                     db_cl=token,
                     raw_data=raw_data)
    order = db.on_select(db_data)
    if order.count():
        return True
    else:
        return False
Пример #28
0
def query_position_one(token: str, symbol: str, db):
    """查询某一只证券的持仓"""
    raw_data = {}
    raw_data["flt"] = {'pt_symbol': symbol}
    db_data = DBData(db_name=SETTINGS['POSITION_DB'],
                     db_cl=token,
                     raw_data=raw_data)
    pos = db.on_query_one(db_data)
    if pos:
        return True, pos
    else:
        return False, ""
Пример #29
0
    def on_orders_status_modify(self, order):
        """更新订单状态"""
        raw_data = {}
        raw_data['flt'] = {'order_id': order.order_id}
        raw_data["set"] = {'$set': {'status': Status.NOTTRADED.value}}
        db_data = DBData(
            db_name=SETTINGS['ORDERS_BOOK'],
            db_cl=self.market_name,
            raw_data=raw_data
        )

        return self.db.on_update(db_data)
Пример #30
0
def query_order_status(token: str, order_id: str, db):
    """查询订单情况"""
    raw_data = {}
    raw_data["flt"] = {'order_id': order_id}
    db_data = DBData(db_name=SETTINGS['TRADE_DB'],
                     db_cl=token,
                     raw_data=raw_data)
    order = db.on_query_one(db_data)

    if order:
        return True, order["status"]
    else:
        return False, "无此订单"