from public_module.tqz_extern.tools.position_operator.position_operator import TQZJsonOperator
from back_tester_branch.back_tester_source_data import BackTesterFutureConfigPath
class TQZRefreshFutureStrategiesSetting:
    @classmethod
    def refresh_ma_strategies(cls, tq_main_contracts: list, strategy_template_name: str, fast_ma: int = 30, slow_ma: int = 250):
        pos_result = TQZJsonOperator.tqz_load_jsonfile(jsonfile=BackTesterFutureConfigPath.future_pos_result_path())
        strategies_setting = TQZJsonOperator.tqz_load_jsonfile(jsonfile=BackTesterFutureConfigPath.future_strategies_setting_path())
        for tq_m_symbol in tq_main_contracts:
            tq_sym = tq_m_symbol.split('@')[1]
            strategy_name = f'{tq_sym}.{strategy_template_name}'
            assert tq_sym in pos_result.keys(), f'bad tq_sym({tq_sym})'
            strategies_setting[strategy_name] = {
                "class_name": strategy_template_name,
                "vt_symbol": tq_sym,
                "setting": {
                    "class_name": strategy_template_name,
                    "fast_window": fast_ma,
                    "slow_window": slow_ma,
                    "lots_size": pos_result[tq_sym]["std_pos"]
                }
            }
        TQZJsonOperator.tqz_write_jsonfile(content=strategies_setting, target_jsonfile=BackTesterFutureConfigPath.future_strategies_setting_path())
    @classmethod
    def refresh_renkoWave_strategies(cls, tq_main_contracts: list, strategy_template_name: str, fast_ma: int = 30, slow_ma: int = 250):  # noqa
        pos_result = TQZJsonOperator.tqz_load_jsonfile(jsonfile=BackTesterFutureConfigPath.future_pos_result_path())
        strategies_setting = TQZJsonOperator.tqz_load_jsonfile(jsonfile=BackTesterFutureConfigPath.future_strategies_setting_path())
        for tq_m_symbol in tq_main_contracts:
            tq_sym = tq_m_symbol.split('@')[1]
            strategy_name = f'{tq_sym}.{strategy_template_name}'
            assert tq_sym in pos_result.keys(), f'bad tq_sym({tq_sym})'
            strategies_setting[strategy_name] = {
                "class_name": strategy_template_name,
                "vt_symbol": tq_sym,
                "setting": {
                    "class_name": strategy_template_name,
                    "fast_window": fast_ma,
                    "slow_window": slow_ma,
                    "lots_size": pos_result[tq_sym]["std_pos"],
                    "renko_size": pos_result[tq_sym]["renko_size"]
                }
            }
        TQZJsonOperator.tqz_write_jsonfile(
            content=strategies_setting,
            target_jsonfile=BackTesterFutureConfigPath.future_strategies_setting_path()
        )
if __name__ == '__main__':
    content = TQZJsonOperator.tqz_load_jsonfile(jsonfile=BackTesterFutureConfigPath.future_back_tester_setting_path())
    _strategy_template_name = content['future_strategy_template']
    _tq_main_contracts = content['tq_main_contracts']
    if _strategy_template_name == "DoubleMaStrategy":
        TQZRefreshFutureStrategiesSetting.refresh_ma_strategies(tq_main_contracts=_tq_main_contracts, strategy_template_name=_strategy_template_name)
    elif _strategy_template_name == "RenkoWaveStrategy":
        TQZRefreshFutureStrategiesSetting.refresh_renkoWave_strategies(tq_main_contracts=_tq_main_contracts, strategy_template_name=_strategy_template_name)
    elif _strategy_template_name == "TQZRenkoWaveStrategy":
        pass
    else:
        pass
    # TQZRefreshFutureStrategiesSetting.refresh_ma_strategies()
    # TQZRefreshFutureStrategiesSetting.refresh_renkoWave_strategies()