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

проблема с лимитной заявкой

Добавлено: 09 июл 2017, 12:58
dkostiunin
Не получается реализовать алгоритм "выставление лимитной заявки с снятием и перевыставленим на следющющем баре .
Для проверки работы упростил код до нельзя(убрал команду на снятие заявки)

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

AddParameter("Qty", 1, "Qty ", 1);
        AddInput("Input1", Inputs.Candle, -3, true, "RIZ7=ФОРТС");
        LongLimit = 4;
        ShortLimit = -4;
}

function OnUpdate()
{
       EnterLongLimit(GetBid(), Qty);
}


Робот ведь должен каждый бар по новой код исполнять. То есть если у меня 4 контракта задано на максимум, робот робот в течение 4 баров должен выставить 4 заявки по биду.
По факту выставляет только одну заявку. И видимо ждет исполнения. Проверял не на советнике, а на реальном счету, чтоб видно было как он заявку ставит.
Почему так? Есть какая нибудь возможность это обойти?

Re: проблема с лимитной заявкой

Добавлено: 09 июл 2017, 14:15
evge
Активной будет только одна заявка, пока она не исполнится, ещё заявку выставить не получится. Такие ограничения.

Выставлять заявки по очереди, после исполнения.

Re: проблема с лимитной заявкой

Добавлено: 09 июл 2017, 16:14
dkostiunin
Странно, достаточно абсурдное ограничение получается.
Если применять EnterLong limit - пока не исполнится - останавливается работа всего робота. И при этом не получится её снять, кроме как вручную остановив робот.
По идее это же просто команда на установление заявки, почему сделали что робот зависит от факта её исполнения, где логика

Re: проблема с лимитной заявкой

Добавлено: 09 июл 2017, 16:28
evge
Заявка будет висеть пока не изменятся условия и ваш робот может решить выставить заявку по другой цене.
Для этого надо отменить установленную заявку и выставить с новой ценой.

CancelActiveOrders(LeaveStop) – снять активные заявки.
LeaveStop – булевая переменная, управляющая снятием стопа к позиции.
• true – оставить стоп к позиции.
• false – снять все.

Снимаем этой командой заявку, ставим по новой цене.
Условия могут изменяться, что выставлять придётся в противоположную строну, но ничто не мешает в ту же по другой цене.

Re: проблема с лимитной заявкой

Добавлено: 09 июл 2017, 17:51
dkostiunin
Так вот и есть проблема в этом.
Если написать CancelActiveOrders
После EnterLonglimit
То он никогда не исполнится так как робот ожидает исполнения заявки на лонг.
А после исполнения и снимать ничего не надо.
Если же поставить до EnterLonglimit то тоже исполняется так как все то же ожидание исполнения

Вообще я рассчитывал на простейший алгоритм
CancelActiveOrders(false);
PriceBid = GetBid()+GetPriceStep();
EnterLongLimit(PriceBid, Qty);

К сожалению он не работает.
Все застревает на EnterLonglimit

Как ранее и писал проверял на реальном роботе не советник

Re: проблема с лимитной заявкой

Добавлено: 09 июл 2017, 17:58
dkostiunin
Да, забыл написать.
Если остановить робот,(причём не путем "остановить робот и снять все заявки"а просто остановить нажав на знает стоп) то заявка автоматом снимается(хотя вроде как и не должна), но что характерно, после повторного запуска (нажатия на зна чек старт) робот не ставит новую заявку больше.
То ли я чего то не понимаю и не учитываю, то ли это какой то глюк у диспетчера роботов.

Re: проблема с лимитной заявкой

Добавлено: 09 июл 2017, 18:49
evge
dkostiunin писал(а):Если написать CancelActiveOrders
После EnterLonglimit


Внутри одной итерации (исполнение OnUpdate) CancelActiveOrders необходимо выполнять перед командой на открытие позиции, а не после.
т.е. приказать снять активные заявки (неисполненные), выставленные ранее.

Re: проблема с лимитной заявкой

Добавлено: 09 июл 2017, 19:03
dkostiunin
Это я понял поэтому и пытался использовать код

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

CancelActiveOrders(false);
PriceBid = GetBid()+GetPriceStep();
EnterLongLimit(PriceBid, Qty);


Здесь снятие заявок до а не после и именно он не работает

Re: проблема с лимитной заявкой

Добавлено: 10 июл 2017, 23:29
dkostiunin
Разобрался с переставлением лимитных заявок. Мой код работает. Дмитрий Еремин объяснил. Может кому поможет. Просто если не объяснить, то в жизни не догадаешься.
Робот работает по барам. В не зависимости от таймфрейма - бар формируется только если сделки есть. На инструментах, где сидят одни маркетмейкеры, и переставляют непрерывно заявки , не совершая при этом сделок, робот не работает, так как нет баров.
А я как раз и хотел создать маркетмейкерский алгоритм. Вообщем таким способом не получается.