| | |
| | | buy_nums += int(_val["num"]) * int(total_datas[i]["re"]) |
| | | elif L2DataUtil.is_limit_up_price_buy_cancel(_val): |
| | | buy_nums -= int(_val["num"]) * int(total_datas[i]["re"]) |
| | | if buy_nums < sell1_volumn: |
| | | return False, "纯买量({})小于卖1量{} 卖1时间:{}".format(buy_nums, sell1_volumn, sell1_time) |
| | | if buy_nums < sell1_volumn * 0.49: |
| | | return False, "纯买量({})小于卖1量的49%{} 卖1时间:{}".format(buy_nums, sell1_volumn, sell1_time) |
| | | except Exception as e: |
| | | logging.exception(e) |
| | | |
| | | # 量比超过1.1的不能买 |
| | | # 量比超过1.3的不能买 |
| | | volumn_rate = l2_trade_factor.L2TradeFactorUtil.get_volumn_rate_by_code(code) |
| | | if volumn_rate >= 1.3: |
| | | return False, "最大量比超过1.3不能买" |
| | |
| | | for key in codes_index: |
| | | if codes_index.get(key) == 0: |
| | | first_codes.append(key) |
| | | |
| | | for key in first_codes: |
| | | state = trade_manager.get_trade_state(key) |
| | | if state == trade_manager.TRADE_STATE_BUY_SUCCESS: |
| | | # 老大已经买成功了 |
| | | return False, "老大{}已经买成功,老二无需购买".format(key) |
| | | # 暂时注释掉 |
| | | # for key in first_codes: |
| | | # state = trade_manager.get_trade_state(key) |
| | | # if state == trade_manager.TRADE_STATE_BUY_SUCCESS: |
| | | # # 老大已经买成功了 |
| | | # return False, "老大{}已经买成功,老二无需购买".format(key) |
| | | # |
| | | # # 有9点半涨停的老大才能买老二,不然不能买 |
| | | # # 获取老大的涨停时间 |
| | |
| | | |
| | | # 是否为新获取到的位置 |
| | | if buy_single_index is None: |
| | | place_order_count = trade_data_manager.placeordercountmanager.get_place_order_count(code) |
| | | continue_count = 3 |
| | | # 前2次的信号连续笔数为3,后面为2 |
| | | if place_order_count > 2: |
| | | continue_count = 2 |
| | | # 有买入信号 |
| | | has_single, _index = cls.__compute_order_begin_pos(code, max( |
| | | compute_start_index - 2 if new_add else compute_start_index, 0), 3, compute_end_index) |
| | | compute_start_index - 2 if new_add else compute_start_index, 0), continue_count, compute_end_index) |
| | | buy_single_index = _index |
| | | if has_single: |
| | | num = 0 |
| | |
| | | cls.debug(code, "数据处理完毕,下单, 数据截图时间-{}", capture_time) |
| | | # 数据已经处理完毕,如果还没撤单就实际下单 |
| | | if need_cancel: |
| | | if cls.cancel_buy(code, "分钟级大单撤销"): |
| | | if cls.cancel_buy(code, "S级大单撤销"): |
| | | # 执行撤单成功 |
| | | pass |
| | | else: |
| | |
| | | |
| | | buy_single_time_seconds = L2DataUtil.get_time_as_second(total_datas[buy_single_index]["val"]["time"]) |
| | | |
| | | # 可以触发买 |
| | | # 可以触发买,当有涨停买信号时才会触发买 |
| | | trigger_buy = True |
| | | place_order_count = trade_data_manager.placeordercountmanager.get_place_order_count(code) |
| | | max_space_time = 2 |
| | | if place_order_count <= 0: |
| | | max_space_time = 2 |
| | | elif place_order_count <= 1: |
| | | max_space_time = 6 - 1 |
| | | else: |
| | | max_space_time = 9 - 1 |
| | | |
| | | if place_order_count>3: |
| | | place_order_count = 3 |
| | | # 间隔最大时间依次为:3,9,27,81 |
| | | max_space_time = pow(3,place_order_count + 1) - 1 |
| | | for i in range(compute_start_index, compute_end_index + 1): |
| | | data = total_datas[i] |
| | | _val = total_datas[i]["val"] |
| | |
| | | @classmethod |
| | | def need_cancel(cls, code, buy_single_index, buy_exec_index, start_index, end_index, need_cancel=True): |
| | | average_num, average_up_count, a_start_index, a_end_index = cls.__get_average_data(code) |
| | | L2TradeDataProcessor.cancel_debug(code,"s级是否需要撤单,数据范围:{}-{} 平均大单信息-({},{},{},{})",start_index,end_index,average_num, average_up_count, a_start_index, a_end_index) |
| | | if average_num is None: |
| | | return False, None |
| | | total_data = local_today_datas[code] |
| | |
| | | if need_cancel: |
| | | # 计算买撤大单暂比 |
| | | cancel_datas = cls.__get_cancel_datas(code) |
| | | |
| | | if cancel_datas is not None and len(cancel_datas) > 0: |
| | | L2TradeDataProcessor.cancel_debug(code, "s级大单 取消数量:{}", len(cancel_datas)) |
| | | cancel_rate_threshold = 0.49 |
| | | place_order_count = trade_data_manager.placeordercountmanager.get_place_order_count(code) |
| | | if place_order_count <= 1: |
| | | cancel_rate_threshold = 0.49 |
| | | elif place_order_count <= 2: |
| | | ancel_rate_threshold = 0.549 |
| | | cancel_rate_threshold = 0.549 |
| | | else: |
| | | ancel_rate_threshold = 0.59 |
| | | cancel_rate_threshold = 0.59 |
| | | cancel_indexs = [] |
| | | for index in cancel_datas: |
| | | cancel_indexs.append(int(index)) |
| | |
| | | cls.place_order_success(code, buy_single_index, buy_exec_index) |
| | | # 执行是否需要计算average |
| | | cls.compute_average_big_num(code, buy_single_index, buy_single_index, datas[3]) |
| | | for i in range(buy_single_index, datas[4]): |
| | | cancel, cancel_data = cls.need_cancel(code, i, i) |
| | | |
| | | cancel, cancel_data = cls.need_cancel(code, buy_single_index, buy_exec_index, buy_single_index, buy_exec_index, |
| | | False) |
| | | |
| | | for i in range(buy_exec_index + 1, datas[4]): |
| | | cancel, cancel_data = cls.need_cancel(code, buy_single_index, buy_exec_index, i, i) |
| | | if cancel: |
| | | print("需要撤单", cancel, cancel_data["index"]) |
| | | break |
| | | |
| | | @classmethod |
| | | def test(cls): |
| | | cls.__test(("000716", 410, 420, 461, 536)) |
| | | cls.__test(("000909", 607, 646, 646, 694)) |
| | | # 代码 买入信号起始点 买入信息执行位置 计算末位 最远计算位置 |
| | | # cls.__test(("002793", 292, 308, 314, 410)) |
| | | |
| | |
| | | if place_order_count <=1: |
| | | cancel_rate_threshold=0.49 |
| | | elif place_order_count <=2: |
| | | ancel_rate_threshold = 0.549 |
| | | cancel_rate_threshold = 0.549 |
| | | else: |
| | | ancel_rate_threshold = 0.59 |
| | | cancel_rate_threshold = 0.59 |
| | | cancel_indexs = [] |
| | | for index in cancel_datas: |
| | | cancel_indexs.append(int(index)) |
| | |
| | | # AverageBigNumComputer.test() |
| | | # LongAverageBigNumComputer.test() |
| | | # L2TradeDataProcessor.test() |
| | | load_l2_data("600213") |
| | | |
| | | buy_index, buy_data = l2_data_util.get_buy_data_with_cancel_data(local_today_datas["600213"][84], |
| | | local_today_num_operate_map.get( |
| | | "600213")) |
| | | print(buy_index, buy_data) |
| | | SecondAverageBigNumComputer.test() |
| | | # load_l2_data("600213") |
| | | # |
| | | # buy_index, buy_data = l2_data_util.get_buy_data_with_cancel_data(local_today_datas["600213"][84], |
| | | # local_today_num_operate_map.get( |
| | | # "600213")) |
| | | # print(buy_index, buy_data) |