量化交易机器人是什么?本质上,交易机器人是一个软件程序,能够间接与金融(通常应用API来获取和解释相干信息)进行交互,并且能够依据对市场数据的解释来公布交易订单。他们通过监控市场上的价格走势,并依据一套当时设置好的规定作出反应来做出这些决策。个别状况下,交易机器人会剖析市场上的交易数量、订单、价格和工夫等行为,并依据你的爱好来布局它们。

在策略设定好之后,机器人智能调配每一次进单条件,严格执行交易策略,交易策略,依据以后行情,开发对接v+hkkf5566实时进行云大数据调整。同时反对百种交易同时执行交易策略,每一个种类立线程,主动治理报价深度,策略计算,实时查看交易状况,实时执行。

// main.py import datetimeimport osimport reimport shutil from constant import Exchange import pandas as pd# pd.set_option('display.max_columns', None)# pd.set_option('display.max_rows', None) from base_dict import dateToContract, clear_off_trading  class HftDataPath:     @classmethod    def data_path(cls, date_str: str, exchange: Exchange) -> str:        path_str: str = ''        if exchange == Exchange.DCE:            path_str = f'{cls.source_data_dir()}/ht_dce_L2-{date_str}.log'        elif exchange == Exchange.SHFE:            pass        elif exchange == Exchange.CZCE:            pass        elif exchange == Exchange.CFFEX:            pass        else:            pass         return path_str      @classmethod    def source_data_dir(cls) -> str:        # return "C:/Users/tqz_trader/Desktop/hft_data_parser"        return "E:\海通期货\大连L2\ITfuwu_dce_l2\ITfuwu_dce_l2_2021\ht_dce_L2-2021_05"     @classmethod    def output_data_dir(cls) -> str:        # return "C:/Users/tqz_trader/Desktop/hft_data_parser/output_data"        return f'{cls.source_data_dir()}/output_data'     @classmethod    def output_main_data_dir(cls) -> str:        # return "C:/Users/tqz_trader/Desktop/hft_data_parser/output_main_data"        return f'{cls.source_data_dir()}/output_main_data'     def __init__(self, date_str: str, exchange: Exchange, filter_option: bool = True):        path = HftDataPath.data_path(date_str=date_str, exchange=exchange)        # path = f'ht_dce_L2-{date_str}.log'        # path = f'test_{path}'        assert os.path.exists(path), f'{path} not exists.'     def split_by_symbol(self) -> {str: pd.DataFrame()}:        assert self.__data is not None, f'__data is None'         self.__rets_map: dict = {}        for symbol in list(set(self.__data.Symbol.tolist())):            sub_data = self.__data[self.__data['Symbol'] == symbol]            sub_data.reset_index(inplace=True)            del sub_data['index']             self.__rets_map[symbol] = sub_data         return self      def dump_to_csv(self):        assert self.__rets_map is not None, f'__rets_map is None'         # check output 目标目录 是否存在        target_dir = HftDataPath.output_data_dir()        if os.path.exists(path=target_dir) is False:            os.mkdir(target_dir)         # check 种类&对应日期 目标目录 是否存在        symbol_dir_map: {str: str} = {}        date_str = self.__date_str.replace("_", "")        for symbol in self.rets_map().keys():            symbol_dir = f'{target_dir}/data{re.match(r"^[a-zA-Z]{1,3}", symbol).group()}00'            if os.path.exists(path=symbol_dir) is False:                os.mkdir(symbol_dir)             symbol_date_dir = f'{symbol_dir}/{date_str}'            if os.path.exists(path=symbol_date_dir) is False:                os.mkdir(symbol_date_dir)             symbol_dir_map[symbol] = symbol_date_dir         # write to csv        for symbol, symbol_df in self.rets_map().items():            target_path = f'{symbol_dir_map[symbol]}/{symbol}_{date_str}.csv'            symbol_df.to_csv(target_path, index=False)      def data(self) -> pd.DataFrame():        return self.__data      def rets_map(self) -> {str: pd.DataFrame()}:        return self.__rets_map      def __reset_format(self):        assert self.__data is not None, f'__data is None.'         # Date        self.__data['Date'] = self.__date_str.replace('_', '')         # Time, Symbol        self.__data.rename(columns={'UpdateTime': 'Time'}, inplace=True)        self.__data.rename(columns={'ContractID': 'Symbol'}, inplace=True)         # HighLimit, LowLimit        self.__data['HighLimit'] = 1000000        self.__data['LowLimit'] = 0         # LocalTime, timestamp        self.__data['LocalTime'] = self.__data.Time        self.__data['LocalTime'] = self.__data.LocalTime.str.replace(':', '', regex=True)        self.__data['LocalTime'] = self.__data.LocalTime.str.replace('.', '', regex=True)        self.__data['timestamp'] = self.__data.LocalTime         # LocalNS        self.__data["LocalNS"] = pd.to_datetime(self.__date_str.replace('_', '-') + ' ' + self.__data['Time']).apply(            lambda x: x.value)  class HftDataManager:     @classmethod    def parser(cls, start_date_str: str, end_date_str: str, exchange: Exchange):        """        clear source hft data        :param start_date_str: begin date of source file        :param end_date_str: end date of source file        :param exchange: enum of exchang        """        start_date, end_date = datetime.datetime.strptime(start_date_str, '%Y_%m_%d').date(), datetime.datetime.strptime(end_date_str, '%Y_%m_%d').date()         while True:            if start_date > end_date:                break             format_date_str = str(start_date).replace("-", "_")            if os.path.exists(path=HftDataPath.data_path(date_str=format_date_str, exchange=exchange)):                HftDataOperator(date_str=format_date_str, exchange=exchange).split_by_symbol().dump_to_csv()             print(f'date({start_date}) parser over.')            start_date += datetime.timedelta(days=1)     @classmethod    def refresh_main_contracts_dir(cls, target_contracts: list, start_date_str: str, end_date_str: str):        """        refresh main contract's dir        :param target_contracts: target contracts which need refresh        :param start_date_str: begin date of source file        :param end_date_str: end date of source file        """         source_dir = HftDataPath.output_data_dir()        assert os.path.exists(path=source_dir), f'{source_dir} not exist.'         target_dir = HftDataPath.output_main_data_dir()        if os.path.exists(path=target_dir) is True:            shutil.rmtree(target_dir)        os.mkdir(target_dir)         for contract in target_contracts:            start_date, end_date = datetime.datetime.strptime(start_date_str,'%Y_%m_%d').date(), datetime.datetime.strptime(end_date_str, '%Y_%m_%d').date()             source_sub_dir = f'{source_dir}/data{contract}'            target_sub_dir = f'{target_dir}/data{contract}'            if os.path.exists(path=target_sub_dir) is False:                os.mkdir(target_sub_dir)             while True:                if start_date > end_date:                    break                 format_date_str = str(start_date).replace('-', '')                main_contract = dateToContract(instrument=contract, date=format_date_str)                 source_main_contract_dir = f'{source_sub_dir}/{format_date_str}'                target_main_contract_dir = f'{target_sub_dir}/{format_date_str}'                if os.path.exists(path=source_main_contract_dir):                    os.mkdir(target_main_contract_dir)                 source_main_contract_path = f'{source_main_contract_dir}/{main_contract}_{format_date_str}.csv'                target_main_contract_path = f'{target_main_contract_dir}/{main_contract}_{format_date_str}.csv'                 if os.path.exists(path=source_main_contract_path):                    shutil.copy(src=source_main_contract_path, dst=target_main_contract_path)                     # clear main contract data.                    target_df = pd.read_csv(target_main_contract_path)                     clear_off_trading(target_df, "timestamp")                    target_df = target_df.drop_duplicates(subset='timestamp', keep='first', inplace=False)                    target_df = target_df.reset_index(drop=True)                     target_df.to_csv(target_main_contract_path, index=False)                 start_date += datetime.timedelta(days=1)  if __name__ == '__main__':    _start_date_str = "2021_05_14"    _end_date_str = "2021_05_24"     HftDataManager.parser(start_date_str=_start_date_str, end_date_str=_end_date_str, exchange=Exchange.DCE)     # HftDataManager.refresh_main_contracts_dir(    #     target_contracts=['v00', 'eg00'],    #     start_date_str=_start_date_str,    #     end_date_str=_end_date_str    # )