den4ik2003

Untitled

Dec 22nd, 2025
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.88 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. """
  3. Скрипт для запуска PriceTargeting стратегии
  4. """
  5.  
  6. import json
  7. import signal
  8. import sys
  9. from typing import Optional
  10. from types import FrameType
  11.  
  12. from pydmm_strategy.price_targeting import PriceTargeting
  13. from pydmm_api_models.strategy.price_targeting import PriceTargetingConfig
  14. from pydmm_api_models.common import Client
  15.  
  16. # Глобальная переменная для бота
  17. bot: Optional[PriceTargeting] = None
  18.  
  19. def handler_timeout(signum: int, frame: Optional[FrameType]) -> None:
  20. """Обработчик таймаута graceful shutdown"""
  21. print('handler_timeout...')
  22. import os
  23. os._exit(137)
  24.  
  25. def handler_sigterm(signum: int, frame: Optional[FrameType]) -> None:
  26. """Обработчик сигнала SIGTERM для graceful shutdown"""
  27. print(f'run_price_targeting.py get signal {signum}')
  28. signal.signal(signal.SIGALRM, handler_timeout)
  29. signal.alarm(5)
  30.  
  31. global bot
  32. if bot is not None:
  33. try:
  34. bot.graceful_stop()
  35. except Exception as e:
  36. print(f'bot: graceful_stop() exception -> {e}')
  37.  
  38. sys.exit(143)
  39.  
  40. # Регистрация обработчиков сигналов
  41. signal.signal(signal.SIGTERM, handler_sigterm)
  42.  
  43. def create_example_config() -> PriceTargetingConfig:
  44. """
  45. Создает пример конфигурации PriceTargeting для демонстрации
  46. """
  47. # Минимальная конфигурация для запуска - только с target_price
  48. config = PriceTargetingConfig(
  49. group="TEST", # Название символа для примера
  50. group_clients=[], # Можно добавить клиентов если нужно
  51. cooldown=1.0,
  52. target_volatility=0.01,
  53. target_price=50000.0, # Фиксированная цена для BTC
  54. is_internal=False,
  55. use_trades=False,
  56. buy_percent_amt=50.0,
  57. sell_percent_amt=50.0,
  58. half_detach=False,
  59. offset_from_target=0.0,
  60. followed_asset=None, # Отключаем отслеживание актива
  61. following_rate=1.0,
  62. target_market=None # Без целевого рынка
  63. )
  64. return config
  65.  
  66. def main():
  67. """Основная функция запуска"""
  68. global bot
  69.  
  70. # Устанавливаем переменную окружения для тестирования
  71. import os
  72. os.environ['LAUNCH_CACHE_DIR'] = '/tmp/.launch-cache'
  73.  
  74. # Также устанавливаем в pydmm.config если возможно
  75. try:
  76. import pydmm.config
  77. pydmm.config.LAUNCH_CACHE_DIR = '/tmp/.launch-cache'
  78. except:
  79. pass
  80.  
  81. try:
  82. print("Запуск PriceTargeting стратегии...")
  83.  
  84. # Создаем конфигурацию
  85. config = create_example_config()
  86.  
  87. print(f"Конфигурация: group={config.group}, target_price={config.target_price}, followed_asset={config.followed_asset}")
  88.  
  89. # Создаем необходимые директории и файлы
  90. import os
  91. # Директория для логов (создаем в /tmp для тестирования)
  92. log_dir = f"/tmp/.launch-cache/{config.group}"
  93. os.makedirs(log_dir, exist_ok=True)
  94.  
  95. # Директория для телеметрии (создаем в /tmp для тестирования)
  96. pt_telemetry_dir = f"/tmp/pt_telemetry/{config.group}"
  97. os.makedirs(pt_telemetry_dir, exist_ok=True)
  98.  
  99. # Создаем симлинки в /mnt для совместимости
  100. mnt_log_dir = f"/mnt/.launch-cache/{config.group}"
  101. mnt_pt_dir = f"/mnt/pt_telemetry/{config.group}"
  102.  
  103. os.makedirs(os.path.dirname(mnt_log_dir), exist_ok=True)
  104. os.makedirs(os.path.dirname(mnt_pt_dir), exist_ok=True)
  105.  
  106. if os.path.exists(mnt_log_dir) or os.path.islink(mnt_log_dir):
  107. os.remove(mnt_log_dir)
  108. if os.path.exists(mnt_pt_dir) or os.path.islink(mnt_pt_dir):
  109. os.remove(mnt_pt_dir)
  110.  
  111. os.symlink(log_dir, mnt_log_dir)
  112. os.symlink(pt_telemetry_dir, mnt_pt_dir)
  113.  
  114. # Создаем экземпляр PriceTargeting
  115. bot = PriceTargeting(config)
  116.  
  117. print("PriceTargeting инициализирован успешно")
  118. print("Запуск event loop...")
  119.  
  120. # Запускаем основной цикл
  121. bot.run_event_loop()
  122.  
  123. except KeyboardInterrupt:
  124. print("Получен сигнал прерывания")
  125. except Exception as e:
  126. print(f"Ошибка при запуске: {e}")
  127. import traceback
  128. traceback.print_exc()
  129. finally:
  130. print("Завершение работы")
  131.  
  132. if __name__ == "__main__":
  133. main()
  134.  
Advertisement
Add Comment
Please, Sign In to add comment