опиши что делает этот код и сделай симуляцию разных ситуаций.   import time

# Предположим, что active_instruments и get_current_datetime_formatted определены где-то
active_instruments = {}

def get_current_datetime_formatted():
    return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

def trailing_stop_fixed_levels_to_open_position(price, instrument, base_price, x_percent, start_multiplier=1.3, multiplier_step_param=0.2): # Renamed multiplier_step to avoid conflict
    data = active_instruments[instrument]

    # Инициализация полей, если их нет
    if 'last_stop_time' not in data:
        data['last_stop_time'] = None
    if 'last_peak_time' not in data:
        data['last_peak_time'] = None # Будет None при первом вызове
    if 'second_chance' not in data:
        data['second_chance'] = False

    # Начальная настройка уровней, если они не были установлены (помечены как 0.0)
    # Это важно для первого вызова функции для данного инструмента
    if data.get('tm_multiplier', 0.0) == 0.0 and \
       data.get('tm_next_level', 0.0) == 0.0 and \
       data.get('tm_first_level', 0.0) == 0.0:

        data['tm_multiplier'] = start_multiplier
        # Начальный стоп - это базовая цена. Трейлинг начнется, если цена пойдет выше следующего уровня.
        data['tm_first_level'] = base_price
        data['tm_next_level'] = round(
            base_price * ((x_percent * data['tm_multiplier']) / 100) + base_price, 10
        )
        # last_peak_time должен быть None, чтобы первое обновление уровня могло произойти без задержки, если цена уже выше
        data['last_peak_time'] = None
        print(f"{get_current_datetime_formatted()} {instrument} [INIT] Initial level: {data['tm_next_level']:.10f}, Initial stop: {data['tm_first_level']:.10f}, Initial Multiplier: {data['tm_multiplier']}")


    # Адаптивный шаг (используем multiplier_step_param из аргументов, чтобы не путать с локальной переменной)
    current_multiplier_step = multiplier_step_param # По умолчанию
    if data['tm_multiplier'] <= 1.6:
        current_multiplier_step = 0.3
    # else: current_multiplier_step остается multiplier_step_param (0.2 по умолчанию)

    # Если цена опускается ниже следующего уровня (но еще не достигла стопа),
    # это считается "пиком" перед возможным откатом. Обновляем время последнего пика.
    if price < data['tm_next_level']:
        data['last_peak_time'] = time.time()

    # Обновляем уровни, если цена перескакивает вперёд
    # Условие по времени: (data['last_peak_time'] is None) для первого раза или если цена долго не опускалась,
    # ИЛИ прошло достаточно времени с момента последнего опускания ниже tm_next_level.
    while price >= data['tm_next_level'] and \
          (data['last_peak_time'] is None or (time.time() - data['last_peak_time']) > 5):
        # Сдвигаем стоп на текущий уровень (который был tm_next_level)
        data['tm_first_level'] = data['tm_next_level']

        # Поднимаем уровень
        data['tm_multiplier'] += current_multiplier_step
        data['tm_next_level'] = round(
            base_price * ((x_percent * data['tm_multiplier']) / 100) + base_price, 10)

        print(f"{get_current_datetime_formatted()} {instrument} [LEVEL UP] New level: {data['tm_next_level']:.10f}, New stop: {data['tm_first_level']:.10f}, Multiplier: {data['tm_multiplier']}")
        # После успешного LEVEL UP, сбрасываем last_peak_time, чтобы следующий LEVEL UP мог произойти сразу, если цена продолжит расти.
        # Или, если цена немного откатит, но останется выше нового tm_first_level, то last_peak_time обновится выше.
        data['last_peak_time'] = None # Позволяет цепочку LEVEL UP без 5-секундной задержки между ними

    # Проверка на откат (срабатывание стопа)
    if price < data['tm_first_level']:
        # Проверяем, прошло ли достаточно времени с последней проверки стопа (или это первая проверка)
        if data['last_stop_time'] is None or (time.time() - data['last_stop_time']) > 5:
            # Только сейчас обновляем last_stop_time, так как мы активно рассматриваем стоп
            data['last_stop_time'] = time.time()

            if data['second_chance']:
                print(f"{get_current_datetime_formatted()} {instrument} [STOP] Трейлинг-стоп сработал на уровне {data['tm_first_level']:.10f} при цене {price}")
                # Опционально: сбросить состояния для следующего трейлинга, если инструмент снова войдет в отслеживание
                # data['tm_multiplier'] = 0.0
                # data['tm_next_level'] = 0.0
                # data['tm_first_level'] = 0.0
                # data['second_chance'] = False
                # data['last_peak_time'] = None
                # data['last_stop_time'] = None
                return True # СТОП
            else:
                print(f"{get_current_datetime_formatted()} {instrument} [SECOND CHANCE] Цена {price} опустилась ниже стопа {data['tm_first_level']:.10f}. Даем второй шанс.")
                data['second_chance'] = True
                return False # Пока не стоп, дан второй шанс
        # else: # Если прошло < 5 секунд, ничего не делаем, ждем
            # print(f"{get_current_datetime_formatted()} {instrument} [STOP IGNORED] Цена {price} ниже стопа {data['tm_first_level']:.10f}, но прошло <5сек с последней проверки.")

    # Если цена поднялась выше следующего уровня (tm_next_level),
    # это означает значительный прогресс, поэтому сбрасываем флаг "второго шанса".
    # Это условие важно, так как если цена просто поднялась выше tm_first_level,
    # но не достигла tm_next_level, "второй шанс" должен оставаться активным.
    if price >= data['tm_next_level']:
        if data['second_chance']: # Если был дан второй шанс и цена восстановилась до следующего уровня
            print(f"{get_current_datetime_formatted()} {instrument} [SECOND CHANCE RESET] Цена {price} поднялась выше следующего уровня {data['tm_next_level']:.10f}. Второй шанс сброшен.")
        data['second_chance'] = False

    # data['last_stop_time'] = time.time() # Убрано отсюда, перенесено в блок проверки стопа

    return False # Нет сигнала к стопу