File config_tool.py of Package fint-bot
#!/usr/bin/env python3
"""
Утилита для управления конфигурацией торгового робота
"""
import sys
from config_manager import config_manager, ConfigManager
def main():
"""Основная функция утилиты"""
print("=" * 50)
print("УТИЛИТА УПРАВЛЕНИЯ КОНФИГУРАЦИЕЙ")
print("=" * 50)
if len(sys.argv) < 2:
print("Использование:")
print(" python config_tool.py show - показать текущую конфигурацию")
print(" python config_tool.py wizard - запустить мастер настройки")
print(" python config_tool.py set <section> <key> <value> - установить параметр")
print(" python config_tool.py reset - сбросить к настройкам по умолчанию")
print(" python config_tool.py validate - проверить конфигурацию")
return
command = sys.argv[1]
if command == "show":
config_manager.show_config()
elif command == "wizard":
ConfigManager.create_config_wizard()
elif command == "set":
if len(sys.argv) != 5:
print("Ошибка: для set нужны section, key и value")
print("Пример: python config_tool.py set strategy fast_window 12")
return
section = sys.argv[2]
key = sys.argv[3]
value = sys.argv[4]
# Преобразование типов
try:
# Пробуем преобразовать в число
if value.lower() in ['true', 'false']:
value = value.lower() == 'true'
else:
try:
if '.' in value:
value = float(value)
else:
value = int(value)
except ValueError:
pass # Оставляем как строку
config_manager.update_config(section, key, value)
except Exception as e:
print(f"Ошибка установки параметра: {e}")
elif command == "reset":
confirm = input("Вы уверены, что хотите сбросить конфигурацию к настройкам по умолчанию? (да/нет): ")
if confirm.lower() in ['да', 'yes', 'y']:
default_config = config_manager.get_default_config()
config_manager.save_config(default_config)
print("Конфигурация сброшена к настройкам по умолчанию")
elif command == "validate":
print("Проверка конфигурации...")
# Проверяем обязательные параметры
errors = []
if not config_manager.config.trading.ticker:
errors.append("Тикер не указан")
if not config_manager.config.trading.class_code:
errors.append("Код класса не указан")
if config_manager.config.strategy.risk_per_trade > 0.1:
errors.append(f"Риск на сделку ({config_manager.config.strategy.risk_per_trade}) слишком высок")
if config_manager.config.strategy.daily_loss_limit > 0.2:
errors.append(f"Дневной лимит убытков ({config_manager.config.strategy.daily_loss_limit}) слишком высок")
if errors:
print("Обнаружены ошибки:")
for error in errors:
print(f" - {error}")
else:
print("Конфигурация валидна")
else:
print(f"Неизвестная команда: {command}")
if __name__ == '__main__':
main()