Общие вопросы по разработке > Как правильно выставить тейк-профит на часть позиции через BreakingStop?

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
геннадий66
Сообщения: 1
Зарегистрирован: 06 мар 2026, 19:34

Как правильно выставить тейк-профит на часть позиции через BreakingStop?

Непрочитанное сообщение геннадий66 » 01 апр 2026, 19:17

Добрый день.

Разрабатываю робота для фонда CASH в Альфа-Директ 4.0. Особенность инструмента: 1 лот = 10 паёв. Цена в стакане указана за 1 пай.

Логика:

Рассчитываю количество лотов для покупки:
lotsToBuy = Math.Floor(сумма / (цена_пая * 10))

После покупки выставляю тейк-профит на 90% купленных лотов через BreakingStop:

csharp
double stopPrice = цена_пая * 0.97;
double targetPrice = цена_пая * 1.01;
BreakingStop(stopPrice, targetPrice, lotsForSale, SignalPriceType.Price);
Проблема:

Для фондов, где 1 лот = 1 пай, этот код работает — заявки появляются в терминале.

Для CASH (1 лот = 10 паёв) заявки не создаются, хотя в логе стратегии пишет ✅ ТЕЙК-ПРОФИТ (BreakingStop).

Вопросы:

Как правильно передать количество лотов в BreakingStop для инструментов с лотностью 10?

Нужно ли передавать количество в паях, а не в лотах?

Если BreakingStop не поддерживает частичное закрытие при такой лотности, как правильно выставить тейк-профит на часть позиции?

Нужен рабочий пример кода.

Спасибо.

Maks
Сообщения: 60
Зарегистрирован: 15 июн 2020, 15:29
Благодарил (а): 8 раз
Поблагодарили: 30 раз

Re: Как правильно выставить тейк-профит на часть позиции через BreakingStop?

Непрочитанное сообщение Maks » 06 апр 2026, 13:33

геннадий66 писал(а):Если BreakingStop не поддерживает частичное закрытие при такой лотности

BreakingStop (и другие стопы в АИ) не поддерживает частичное закрытие ни при какой лотности. Нет там параметра lotsForSale.

Можно поставить отдельную тейк-профит заявку на нужное количество и пока она не исполнилась еще проверять условие цены для стоп-лосса. Выполнилось условие - снять тейк-профит и выставить закрытие нужного кол-ва по рынку, например (имитация стоплосса).
Если заявка тейкпрофит исполнилась полностью - условие стоплосса больше не проверять.

геннадий66 писал(а):BreakingStop(stopPrice, targetPrice, lotsForSale, SignalPriceType.Price);
Для фондов, где 1 лот = 1 пай, этот код работает

Сомнительно, что работает) оно даже не компилируется (нет варианта метода BreakingStop с 4 аргументами, lotsForSale явно лишний))

геннадий66 писал(а):Нужен рабочий пример кода.

Согласен!

gaponova_vik
Сообщения: 1
Зарегистрирован: Сегодня, 12:38

Re: Как правильно выставить тейк-профит на часть позиции через BreakingStop?

Непрочитанное сообщение gaponova_vik » Сегодня, 15:03

Коллеги, добрый день.
Сталкиваюсь с проблемой при попытке частичного закрытия позиции (продажа 90%, удержание 10%) в Альфа-Директ 4.0.
Суть:
Робот открывает позицию (EnterLong).
Нужно выставить лимитную заявку на продажу части лотов.
Метод EnterShortLimit(price, qty) в логах стратегии пишет об успехе, исключений не ловит.
Факт: В терминале (вкладка «Заявки») заявка не появляется, в стакане пусто.
Если использовать BreakingStop, заявка появляется, но закрывает 100% позиции, что ломает логику стратегии (мне нужно оставить 10%).
Минимальный пример кода:

Код: Выделить всё

// 1. Покупка (отрабатывает корректно)
EnterLong(100);

// 2. Расчет частичного закрытия
int qtyToSell = 90; // 90% от 100
double targetPrice = GetCurrentPrice() * 1.01;

// 3. Попытка продать часть
try
{
    // В логе: "Успешно", но в терминале тишина
    EnterShortLimit(targetPrice, qtyToSell);
}
catch (Exception e)
{
    // Ошибки нет
}

Вопрос к разработчикам и опытным пользователям:
Это баг шлюза для инструментов БПИФ (VTBL, CASH)?
Или есть другой корректный метод для частичного закрытия, который реально отправляет заявку в шлюз?
Версия АД4: [последняя ВЕРСИЯ].


Вернуться в «Общие вопросы по разработке»

Кто сейчас на конференции

Сейчас этот форум просматривают: barbaros и 6 гостей