Страница 1 из 1

Проблема при создании Стратегия докупки при превышении порога

Добавлено: 27 ноя 2025, 12:17
Sargon
Хочу сделать стратегию на Long по инструменту TGLD.
Основной параметр это уровень при котором необходимо докупать измеряется в рублях (Int)
При превышении баланса на субщете выше уровеня порога. Баланс должен быть равен или больше уровень порога + стоимость одного лота (который может быть кратен х1,х10,х100 - зависит от инструмента)
При этом покупать доступный минимум.
Пример
цена лота 13 р.
Уровень баланса 5000 р.
При росте до 5013 и более покупаем сколько можем.
Идея была сделать индикатор баланса включить его в формулу стратегии что бы условием стратегии было привышение порога.

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

function Initialize()
{
// Область определения параметров индикатора

// Обязательные параметры:
   IndicatorName = "BalanceAccaunt";   // Задайте название индикатора и сохраните с данным именем
   PriceStudy = false;   // Рисовать в области цены (true – да, false – нет)
   AddInput("Input", Inputs.Price);   // Input - входной ряд (Inputs.Price) или свечи (Inputs.Candle)
 AddSeries("BalanceAccaunt", DrawAs.Line, Color.Red);   // Задаем вид линии индикатора A
}

function Evaluate()
{
// Область расчета значения индикатора

 BalanceAccaunt = GetCurrentBalance(RazdelGroupType.MICEX);;   // Присваиваем значение = баланс средств
}


Согласно доке на форуме
Но компилятор ругается
GetCurrentBalance отсутсвует в текущем контексте Ж-(

Re: Проблема при создании Стратегия докупки при превышении порога

Добавлено: 27 ноя 2025, 12:31
evge
Добрый день,

Только в стратегиях доступно, в индикаторах нет.

Re: Проблема при создании Стратегия докупки при превышении порога

Добавлено: 27 ноя 2025, 13:18
Sargon
Спасибо то есть GetCurrentBalance(RazdelGroupType.MICEX) это корректный запрос?

Re: Проблема при создании Стратегия докупки при превышении порога

Добавлено: 27 ноя 2025, 14:33
Sargon
Евгений подскажите пожалуйста Советник не открывает не одной сделки, баланс при тесте указываю 10000. Порог 5000. Поидеи должен открывать на разницу порядка 370 лотов сразу. Но тишина.

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

function Initialize()
{
   StrategyName = "MNT";
    // Уровень баланса, выше которого средства считаются "свободными" для покупки.
    // Измеряется в рублях.
    AddParameter("ThresholdLevel", 5000, "Уровень баланса для покупки (RUB)", 0);
    AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 1;
   ShortLimit = -1;
}

function OnUpdate()
{
    // --- Получение данных о балансе ---
    var currentBalanceInfo = GetCurrentBalance(RazdelGroupType.MICEX);
    var currentBalance = currentBalanceInfo.Balance;

    // --- Получение данных об инструменте ---
    var quote = GetQuote(Input1);
    var currentPrice = quote.Last;
    var lotSize = LotSize();

// --- Проверка на корректность данных ---
    if (currentPrice <= 0 || lotSize <= 0)
    {
        ShowMessage("Ошибка: Некорректная цена или размер лота.");
        return;
    }

    // --- Расчет стоимости одного лота ---
    var lotCost = currentPrice * lotSize;
   
    // Вычисляем, сколько средств доступно для покупки сверх порога
    var deltaBalance = (double)currentBalance - (double)ThresholdLevel.Value + (double)lotCost;
   
    // --- Проверка условия для покупки ---
    if (deltaBalance >= 0)
    {
     // Вычисляем, сколько лотов акций/контрактов можно купить на эти средства (шт.)
     var lots = (int)Math.Floor(deltaBalance / lotCost);
     if (lots > lotSize) EnterLong(lots );
    }

}