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

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
геннадий66
Сообщения: 2
Зарегистрирован: 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
Зарегистрирован: 15 апр 2026, 12:38

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

Непрочитанное сообщение gaponova_vik » 15 апр 2026, 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: [последняя ВЕРСИЯ].

геннадий66
Сообщения: 2
Зарегистрирован: 06 мар 2026, 19:34

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

Непрочитанное сообщение геннадий66 » Вчера, 20:25

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

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

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

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

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

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

Согласен!

Добрый день.
Разрабатываю робота для торговли фондами (AKMB, VTBL и др.).
Задача:
Покупаю N лотов через EnterLong(N)
Нужно выставить лимитную заявку на продажу 90% купленных лотов по целевой цене (тейк-профит)
Оставшиеся 10% оставить в портфеле для накопления
Проблема:
BreakingStop не поддерживает частичное закрытие (нет параметра объёма)
EnterShortLimit(price, qty) при наличии длинной позиции открывает шорт, а не закрывает лонг
В документации не нашёл функцию для размещения лимитной заявки на ЗАКРЫТИЕ части длинной позиции
Вопросы:
Какая функция в AD 4.0 используется для выставления лимитной заявки на продажу при наличии длинной позиции?
Как правильно закрыть ЧАСТЬ позиции (не всю)?
Нужно ли использовать ClosePosition() или есть отдельная функция для лимитных заявок на закрытие?
Как отслеживать статус выставленной заявки (исполнена/отменена)?
Пример нерабочего кода:

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

EnterLong(100);  // Купил 100 лотов
EnterShortLimit(2.01, 90);  // Хотел продать 90 лотов по 2.01, но это открывает шорт!

Нужен рабочий пример кода для:
Покупки 100 лотов
Выставления лимитки на продажу 90 лотов по целевой цене
Оставления 10 лотов в портфеле
Спасибо.


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя