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

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
dkostiunin
Сообщения: 38
Зарегистрирован: 10 июн 2017, 20:50
Благодарил (а): 1 раз

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

Непрочитанное сообщение dkostiunin » 09 июл 2017, 12:58

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

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

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

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


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

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

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

Непрочитанное сообщение evge » 09 июл 2017, 14:15

Активной будет только одна заявка, пока она не исполнится, ещё заявку выставить не получится. Такие ограничения.

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

dkostiunin
Сообщения: 38
Зарегистрирован: 10 июн 2017, 20:50
Благодарил (а): 1 раз

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

Непрочитанное сообщение dkostiunin » 09 июл 2017, 16:14

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

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

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

Непрочитанное сообщение evge » 09 июл 2017, 16:28

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

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

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

dkostiunin
Сообщения: 38
Зарегистрирован: 10 июн 2017, 20:50
Благодарил (а): 1 раз

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

Непрочитанное сообщение dkostiunin » 09 июл 2017, 17:51

Так вот и есть проблема в этом.
Если написать CancelActiveOrders
После EnterLonglimit
То он никогда не исполнится так как робот ожидает исполнения заявки на лонг.
А после исполнения и снимать ничего не надо.
Если же поставить до EnterLonglimit то тоже исполняется так как все то же ожидание исполнения

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

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

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

dkostiunin
Сообщения: 38
Зарегистрирован: 10 июн 2017, 20:50
Благодарил (а): 1 раз

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

Непрочитанное сообщение dkostiunin » 09 июл 2017, 17:58

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

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

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

Непрочитанное сообщение evge » 09 июл 2017, 18:49

dkostiunin писал(а):Если написать CancelActiveOrders
После EnterLonglimit


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

dkostiunin
Сообщения: 38
Зарегистрирован: 10 июн 2017, 20:50
Благодарил (а): 1 раз

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

Непрочитанное сообщение dkostiunin » 09 июл 2017, 19:03

Это я понял поэтому и пытался использовать код

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

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


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

dkostiunin
Сообщения: 38
Зарегистрирован: 10 июн 2017, 20:50
Благодарил (а): 1 раз

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

Непрочитанное сообщение dkostiunin » 10 июл 2017, 23:29

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


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

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

Сейчас этот форум просматривают: Google [Bot] и 22 гостя