Нужные функции

Здесь буду выкладывать функции, которые могут пригодиться:

math_round() -- Округляет число до указанной точности
GetClassBySec() -- Возвращает код класса по коду бумаги
GetServerDateTime() -- Возвращает текущую дату/время сервера в виде таблицы datetime
StrToTime() -- Приводит время из строкового формата ЧЧ:ММ к формату datetime
CheckDemo() -- Узнать является ли терминал демо от компании Arqa, или демо брокера Открытие
GetTotalnet() -- Получает текущую чистую позицию по инструменту
GetEffectivePosPrice() -- Получает эффективную цену позиции по инструменту
GetFreeMoney() -- Возвращает доступные средства
GetCorrectPrice() -- Приводит переданную цену к требуемому для транзакции по инструменту виду
GetPriceForMarketOrder() -- Возвращает корректную цену для рыночной заявки по текущему инструменту
SetOrder() -- Выставляет обычную лимитную заявку
SetMarketOrder() -- Выставляет рыночную (по сути) заявку
CheckOrder() -- Проверяет наличие в системе заявки с определенным ID транзакции
GetOrderNum() -- Возвращает номер заявки по ее ID транзакции
WaitOrderComplete () -- Ожидает исполнения заявки по ID транзакции
Set_SL() -- Выставляет 'Стоп лимит' заявку
SetTP() -- Выставляет 'Тейк профит' заявку
SetTP_SL() -- Выставляет 'Тейк профит и Стоп лимит' заявку
CheckStopOrder() -- Проверяет наличие в системе стоп-заявки с определенным ID транзакции
GetStopOrderNum() -- Возвращает номер стоп-заявки по ее ID транзакции
CheckStopOrderActive() -- Проверяет по номеру активна ли стоп-заявка
KillOrder() -- Снимает заявку
Kill_SO() -- Снимает стоп-заявку
StackFIFO() -- Создает объект стека FIFO(Первым вошел, первым вышел)

Добавить комментарий

Нужные функции: 88 комментариев

  1. Дмитрий здравствуйте!
    Вопрос, можно ли использовать следующий код для получение объеиа по инструменту? Если нет, то почему.
    LotSize=0.0;
    for i = 0,getNumberOf('depo_limits') - 1 do
    local depo_limit = getItem("depo_limits", i)
    if depo_limit.sec_code==SEC_CODE and depo_limit.currentbal>LotSize then LotSize=depo_limit.currentbal end
    end

  2. Дмитрий здравствуйте.

    У Вас случайно не было ли такого что depo_limits.awg_position_price возвращала бы цену деленную на 100 ?
    У меня на демо тесте вылетает такая ошибка, на реале нету возможности испытать это. Задал вопрос Арки, но они уже пол недели молчат...
    т.е. допустим открылся по цене 1 000, а depo_limits. awg_position_price = 10.

      1. Благодарю Вас за ответ.

        Вполне возможно, что это ошибка моей версии терминала (судя по ответу техподдержки) на всякий случай скину сюда ссылку на вопрос, вдруг местным завсегдатым будет полезно (если еще кто нибудь наткнется на подобное) (https://forum.quik.ru/forum10/topic3445/)

  3. Дмитрий здравствуйте,
    У меня вопрос по выставлению стопа (делаю функцию сейчас которая отдельно стоп и отдельно тейк выставляла бы)
    Я запутался в заполнении таблицы. а именно с полями

    STOPPRICE - по чему у Вас при стоп лоссе на покупку там минимальная цена фьюча используется, а в тейке наоборот

    MARKET_STOP_LIMIT и MARKET_TAKE_PROFIT - почему у Вас они отмечены как Не рыночные ? стопы и тейки же для ограничения убытка по рынку бить должны на сколько я их воспринемаю (или же у Вас делается жмуляция рыночной заявки для фьючей если да, то будет ли этот же метод работать на акциях ?)

    PRICE - опять же немого мудренно для меня, по чему она опять как то высчитывается из цен STOPPRICE ?

    Я для себя хочу сделать просто функцию, в которую заношу цену активации, а далее стоп (или тейк) срабатывают как обычный стоп или же тейк, для ограничения убытка по позиции. Заполнил следующие поля (и описал свои условия срабатывания) : TRANS_ID, CLASSCODE, SEC_CODE, ACCOUNT, ACTION, QUANTITY, OPERATION, STOP_ORDER_KIND.
    Причем последнее поле для стопа оставил без внимания, а для тейка - поставил как "TAKE_PROFIT_STOP_ORDER"

    Мне нужно еще описанные поля заполнить как я понимаю ( PRICE, STOPPRICE, MARKET_STOP_LIMIT и MARKET_TAKE_PROFIT ) и вот они то как раз и вызвали затруднение... надеюсь на Вашу помощь) Благодарю заранее)

    1. Здравствуйте! Я обычно эмулирую рыночную заявку, т.е. рыночных заявок вообще не существует, по идее, рыночная заявка это просто заявка по очень "плохой" цене, которая при выставлении в стакан исполнится по первой встречной заявке. Они там что-то меняют постоянно, раньше по фьючам нельзя было рыночную заявку отправлять, сейчас можно стало, по этому я использую универсальный подход. По поводу PRICE, это цена заявки (реальной), которая выставится в стакан при достижении цены стопа условия STOPPRICE для стопа и STOPPRICE2 для тейкпрофит-стоп. Так как я ее тоже условно рыночной делаю, то проще отступить сколько-то от стоп-цены. А вообще, самый простой способ разобраться, это повыставлять программно разные заявки на демке и посмотреть как они исполняются. Значения параметров с примерами есть в файле справки info.chm, там раздел что-то типа "Работа с другими приложениями", "Импорт транзакций через API", "Параметры транзакций", "Примеры строк"

      1. То есть получается следующая схема:

        Допустим мне нужно поставить стоп для лонга (или тейк для шорта) по цене 150.

        SL:
        1) Ставится цена активации - STOPPRICE = 150
        2) При достижении этой цены 150 ставится PRICE = 100 и далее робот рубит по рынку пока не проталкнет весь объем или же не дойдет до 100

        TP:
        1) Ставится цена активации - STOPPRICE = 150
        2) При достижении этой цены 150 ставится PRICE = 200 и далее робот рубит по рынку пока не проталкнет весь объем или же не дойдет до 200

        Я верно схему понял ? За ссылки благодарю, по изучаю завтра как торги начнутся.

  4. Дмитрий здравствуйте.
    А почему в примерах функций практически везде есть блок который в цикле дожидается результата ? (при подписки на котировки к примеру, или же при удалении стоп ордеров) ?
    Разве это не синхронный запрос ? На сколько я понимаю, этот код выполняется в контексте одного потока и по этому следующая строчка кода не должна выполняться пока не будет выполнено действие (удаление ордера к примеру или же готовая структура с подпиской на котировки. )

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