| | |
| | | |
| | | # 持仓记录 |
| | | class PositionManager: |
| | | __redisManager = redis_manager.RedisManager(2) |
| | | |
| | | @classmethod |
| | | def __get_redis(cls): |
| | | return cls.__redisManager.getRedis() |
| | | |
| | | # 保存代码的量 |
| | | @classmethod |
| | | def __save_code_volume(cls, code, volume): |
| | | cls.__get_redis().setex(f"available_position_{code}", tool.get_expire(), f"{volume}") |
| | | |
| | | @classmethod |
| | | def get_code_volume(cls, code): |
| | | val = cls.__get_redis().get(f"available_position_{code}") |
| | | if not val: |
| | | return 0 |
| | | return int(val) |
| | | |
| | | @classmethod |
| | | def add(cls, datas): |
| | | mysqldb = mysql_data.Mysqldb() |
| | | try: |
| | | if datas: |
| | | # 统计可用量 |
| | | volume_dict = {} |
| | | for d in datas: |
| | | if d["securityID"] not in volume_dict: |
| | | volume_dict[d["securityID"]] = 0 |
| | | volume_dict[d["securityID"]] = volume_dict[d["securityID"]] + d["availablePosition"] |
| | | for k in volume_dict: |
| | | cls.__save_code_volume(k, volume_dict[k]) |
| | | |
| | | for d in datas: |
| | | _id = f"{d['investorID']}-{d['tradingDay']}-{d['securityID']}" |
| | | # 查询是否有数据 |
| | |
| | | # 新增数据 |
| | | mysqldb.execute( |
| | | "insert into hx_trade_position values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')" % ( |
| | | _id, d["tradingDay"], d["investorID"], d["securityName"], d["securityID"], |
| | | _id, d["investorID"], d["tradingDay"], d["securityName"], d["securityID"], |
| | | d["historyPos"], d["historyPosFrozen"], d["todayBSPos"], d["todayBSPosFrozen"], |
| | | d["historyPosPrice"], |
| | | d["totalPosCost"], d["prePosition"], d["availablePosition"], d["currentPosition"], |
| | |
| | | finally: |
| | | pass |
| | | |
| | | @classmethod |
| | | def get_volume_by_code(cls, code): |
| | | mysqldb = mysql_data.Mysqldb() |
| | | mysqldb.select_one(f"select currentPosition from hx_trade_position where securityID='{code}'") |
| | | |
| | | |
| | | # 成交记录 |
| | | class DealRecordManager: |
| | |
| | | force_sell = codes_data["force"] |
| | | # TODO 强制卖策略 |
| | | if volume == 0: |
| | | # TODO 获取持仓的量 |
| | | pass |
| | | # 查询持仓量 |
| | | volume = huaxin_trade_record_manager.PositionManager.get_code_volume(code) |
| | | if volume <= 0: |
| | | raise Exception("代码无持仓") |
| | | |
| | | if not price: |
| | | # 获取现价 |
| | | prices = HistoryKDatasUtils.get_now_price([code]) |