Exemple #1
0
def get_table_list(mysql_handler: MySqlHandler, content: Content) -> List:
    """
    通过前缀名,从数据库获取对应的数据表名称列表
    """
    mysql_handler.set_cursor_type(Cursor)
    tables = mysql_handler.get_tables(content.value, False)
    tables = [item[0] for item in tables]
    mysql_handler.set_cursor_type(DictCursor)
    return tables
Exemple #2
0
def create_table(mysql_handler: MySqlHandler, content: Content) -> None:
    """
    通过前缀名创建数据库表格
    content: 'setting' or 'data' or 'follow_data'
    """
    create_func = content_map[content]['create_func']
    fields_list = create_func()
    for (table_name, field_dict) in fields_list:
        mysql_handler.create_table(table_name, field_dict)
    logger.info(f"{content.value}:数据表创建成功")
Exemple #3
0
def clear_server_data(mysql_handler: MySqlHandler, content: Content):
    """
    清除数据库数据
    """
    tables = get_table_list(mysql_handler, content)
    if tables:
        for table in tables:
            mysql_handler.drop_table(table)
        logger.info(f"{content.value}所有数据表删除成功")
    else:
        logger.info(f"{content.value}没有数据表")
Exemple #4
0
def cta_data_to_server(mysql_handler: MySqlHandler) -> None:
    """
    推送本地cta数据到数据库
    """
    modified_time = get_file_modified_time(CTA_DATA_FILENAME)
    for strategy_name, data in cta_data.items():
        row = dict()
        row['strategy_name'] = strategy_name
        row['last_modified_time'] = modified_time
        row.update(data)

        table_name = strategy_to_table_name(strategy_name, Content.CTA_DATA)

        # delete first.
        mysql_handler.delete(table_name, get_cond_dict(strategy_name))
        # insert
        mysql_handler.insert(table_name, row)
        logger.info(f"策略{strategy_name}:数据同步到远程成功")
Exemple #5
0
def get_server_modified_time(mysql_handler: MySqlHandler,
                             content: Content) -> datetime:
    """获取数据库数据最新修改时间"""
    tables = get_table_list(mysql_handler, content)
    table_name = tables[0]

    server_record = mysql_handler.query_all(table_name,
                                            order_field='last_modified_time',
                                            order_by='DESC')
    server_time = server_record[0]['last_modified_time']
    return server_time
Exemple #6
0
def cta_setting_to_server(mysql_handler: MySqlHandler) -> None:
    """
    推送本地cta配置到数据库
    """
    modified_time = get_file_modified_time(CTA_SETTING_FILENAME)
    for strategy_name, settings in cta_settings.items():
        row = dict()
        row['strategy_name'] = strategy_name
        row['class_name'] = settings['class_name']
        row['vt_symbol'] = settings['vt_symbol']
        row['last_modified_time'] = modified_time
        row.update(settings['setting'])

        table_name = strategy_to_table_name(strategy_name, Content.CTA_SETTING)
        # print(table_name)

        # delete first.
        mysql_handler.delete(table_name, get_cond_dict(strategy_name))
        # insert
        mysql_handler.insert(table_name, row)
        logger.info(f"策略{strategy_name}:配置同步到远程成功")
Exemple #7
0
def follow_data_from_server(mysql_handler: MySqlHandler) -> dict:
    """
    从数据库获取跟随数据
    """
    server_data = dict()

    # sync ids
    ids_list = mysql_handler.query_all('follow_data_trade_ids')
    # print(ids_list)
    if ids_list[0]['follow_id'] == 'empty':
        ids_dict = dict()
    else:
        ids_dict = defaultdict(list)
        for row_dict in ids_list:
            follow_id = row_dict['follow_id']
            order_id = row_dict['order_id']
            ids_dict[follow_id].append(order_id)
    # print(ids_dict)

    # sync pos
    pos_list = mysql_handler.query_all('follow_data_positions')
    # print(pos_list)
    if pos_list[0]['vt_symbol'] == 'empty':
        pos_dict = dict()
    else:
        pos_dict = dict()
        for row_dict in pos_list:
            vt_symbol = row_dict['vt_symbol']
            pos_dict[vt_symbol] = dict()

            for key in ['vt_symbol', 'last_modified_time']:
                row_dict.pop(key)
            pos_dict[vt_symbol].update(row_dict)
    # print(pos_dict)

    server_data['tradeid_orderids_dict'] = ids_dict
    server_data['positions'] = pos_dict
    # print(server_data)
    return server_data
Exemple #8
0
def cta_data_from_server(mysql_handler: MySqlHandler) -> dict:
    """
    从数据库获取cta数据
    """
    tables = get_table_list(mysql_handler, Content.CTA_DATA)
    server_data = dict()
    for table in tables:
        table_res = mysql_handler.query_all(table)
        # print(table_res)
        for row_dict in table_res:
            strategy_name = row_dict['strategy_name']
            server_data[strategy_name] = dict()
            for key in ['strategy_name', 'last_modified_time']:
                row_dict.pop(key)
            server_data[strategy_name].update(row_dict)

    # print(server_data)
    return server_data
Exemple #9
0
def cta_setting_from_server(mysql_handler: MySqlHandler) -> dict:
    """
    从数据库获取cta配置
    """
    tables = get_table_list(mysql_handler, Content.CTA_SETTING)
    server_settings = dict()
    for table in tables:
        table_res = mysql_handler.query_all(table)
        # print(table_res)
        for row_dict in table_res:
            strategy_name = row_dict['strategy_name']
            server_settings[strategy_name] = dict()
            temp = server_settings[strategy_name]
            temp['class_name'] = row_dict['class_name']
            temp['vt_symbol'] = row_dict['vt_symbol']

            for key in ['vt_symbol', 'strategy_name', 'last_modified_time']:
                row_dict.pop(key)
            temp['setting'] = row_dict
    # print(server_settings)
    return server_settings
Exemple #10
0
def main():
    logger.info(f"连接数据库 {mysql_setting['host']}:{mysql_setting['port']}")
    mysql = MySqlHandler()
    mysql.connect(**mysql_setting)

    logger.info("数据库连接等待...")
    for i in reversed(range(5)):
        logger.info(f"等待倒计时:{i}")
        sleep(1)

    try:
        init()
        # for content in [Content.CTA_SETTING, Content.CTA_DATA, Content.FOLLOW_DATA]:
        #     sync(mysql, content)
        sync(mysql, Content.FOLLOW_DATA)
    except:
        traceback.print_exc()
        mysql.close_db()
Exemple #11
0
from sync.sync_script import (init, sync,
                              get_strategy_to_class_name, strategy_to_table_name,
                              strategy_to_class_name_map, content_map,
                              get_cta_data_fields, get_cta_setting_fields, get_follow_data_fields,
                              create_table, get_table_list, clear_server_data,
                              is_local_exist, is_remote_exist, get_local_modified_time, get_server_modified_time,
                              cta_setting_to_server, cta_data_to_server, follow_data_to_server,
                              cta_setting_from_server, cta_data_from_server, follow_data_from_server)

mysql_setting.update(load_json(MYSQL_SETTING_FILENAME))

mysql_setting['host'] = "192.168.0.107"
print(mysql_setting)

init()
mysql = MySqlHandler()
mysql.connect(**mysql_setting)

print("数据库连接等待时间...")
sleep(3)
print("数据库连接等待结束")


class TestUtility(unittest.TestCase):
    def setUp(self) -> None:
        pass

    def test_to_dash_format(self):
        print(to_dash_format('_dfHeoo'))
        print(to_dash_format('NormalWorld'))
        print(to_dash_format('HHello'))
Exemple #12
0
def follow_data_to_server(mysql_handler: MySqlHandler) -> None:
    """
    推送跟随数据到数据库
    """
    modified_time = get_file_modified_time(FOLLOW_DATA_FILENAME)

    # sync trade ids
    id_table_name = 'follow_data_trade_ids'
    mysql_handler.delete_all(id_table_name)
    trade_ids = follow_data['tradeid_orderids_dict']

    if not trade_ids:
        row = dict()
        row['follow_id'] = 'empty'
        row['order_id'] = 'empty'
        row['last_modified_time'] = modified_time
        mysql_handler.insert(id_table_name, row)
    else:
        for trade_id, order_list in trade_ids.items():
            row = dict()
            row['follow_id'] = trade_id
            row['last_modified_time'] = modified_time
            for order in order_list:
                row['order_id'] = order
                mysql_handler.insert(id_table_name, row)
    logger.info(f"跟随单ID:数据同步到远程成功")

    # sync positions
    pos_table_name = 'follow_data_positions'
    mysql_handler.delete_all(pos_table_name)
    positions = follow_data['positions']
    if not positions:
        row = dict()
        row['source_long'] = 0
        row['source_short'] = 0
        row['target_long'] = 0
        row['target_short'] = 0
        row['vt_symbol'] = 'empty'
        row['last_modified_time'] = modified_time
        mysql_handler.insert(pos_table_name, row)
    else:
        for vt_symbol, pos_dict in positions.items():
            row = dict()
            row['vt_symbol'] = vt_symbol
            row['last_modified_time'] = modified_time
            row.update(pos_dict)

            # insert
            mysql_handler.insert(pos_table_name, row)
    logger.info(f"跟随单仓位:数据同步到远程成功")
Exemple #13
0
def is_remote_exist(mysql_handler: MySqlHandler, content: Content) -> bool:
    """
    远程数据是否存在
    """
    return mysql_handler.is_table_exists(content.value, precise=False)