Сергей Парахин (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Снятие всех заявок в таблице
 
Есть задача удаления всех лимитированных заявок в таблице. Написал такой код

client...
code...
n=GET_NUMBER_OF("ORDERS")

        FOR i FROM 1 to n
       trade = GET_ITEM ("ORDERS", i)    
          schet=GET_VALUE (trade,"ACCOUNT")
          sec_t=GET_VALUE (trade, "SECCODE")    
   if schet=client
if sec_t=code
status_limit=GET_VALUE(trade,"STATUS")
tip_operation=GET_VALUE (trade,"OPERATION")
balance=GET_VALUE (trade,"BALANCE")
order_number=GET_VALUE (trade,"NUMBER")
end if
end if
        END FOR
   

if status_limit="ACTIVE"
trans_params = set_value (trans_params, "ACTION", "KILL_ORDER")
trans_params = set_value (trans_params, "ORDER_KEY", order_number)
trans=SEND_TRANSACTION (30,trans_params)

message("Заявка снята.Остаток "&balance,1)
end if

Заявку снимает, но только последнюю активную в таблице. Остальные не снимает. Что я делаю не так ?
Куда деваются секунды ?
 
Здравствуйте ! При выполнении скрипта QPILE в таблице скрипта вывожу значение SERVERTIME через  GET_INFO_PARAM. Это нормально, что секунды могут замереть, а потом перескочить сразу на 2-3 секунды ? Что это означает ? Происходит в это время задержка в выполнении скрипта ? Не хватает мозгов у компа ? Или медленный интернет канал ? В информационном окне  и в левом нижнем углу интерфейса время бежит четко без задержек. Локальное время на компе совпадает со временем сервера. Стоит ли с этим заморачиваться ?
[ Закрыто] Отказ от поддержки встроенного языка QPILE, Отказ от поддержки встроенного языка QPILE
 
Да, попадос. Сколько я с QPILE разбирался, а теперь тратить время на понимание LUA. А я не профессиональный программист.Все настроено, работает без сбоев на удаленном сервере, я туда почти не заглядываю, только смс приходят о сделках. Для моих алгоритмов скорости QPILE хватает. Сказать разработчикам что есть в QPILE и чего нет в LUA, к сожалению, не могу. Так что остается только воздух сотрясать и надеется на лучшее.  
Проблемы с обновлением Спектры, Проблемы после обновления Спектры и изменения механизма ГО
 
Добавлю, что я выставляю лимитированную заявку по заранее известной цене (NEW_ORDER). Т.е. есть некий сигнал, скажем на шорт. Робот рассчитывает уровень входа от текущей цены на некоторое количество пунктов и ставит заявку по этой цене. Ни о каких рыночных заявках речи не идет. Да и насколько я помню, на ФОРТСе нет рыночных заявок.
Проблемы с обновлением Спектры, Проблемы после обновления Спектры и изменения механизма ГО
 
А вот что мне ответил брокер, сославшись на материалы биржи  8)
--------------------------------------------------------------------------
Сергей посмотрите пожалуйста этот материал от биржи
давайте попробуем прояснить вашу ситуацию..


Обращаем Ваше внимание, вследствие п.3 списка изменений
ТС срочного рынка МБ ( http://www.moex.com/n10696/?nt=0) -
если срочный контракт приобретается/продается дороже/дешевле расчетной
цены,
то ГО под такую заявку (позицию) теперь будет больше чем БГО.
ГО теперь рассчитывается по формуле БГО + abs(РЦ-цена заявки).

Если к Вам обращаются клиенты, которые не могут выставить заявку с
диагностикой
"Ошибка создания заявки. [FORTS][332] "Нехватка средств по лимитам
клиента"
-
рекомендуем проверить достаточность средств по указанной формуле, учитывая
указываемую клиентом цену.
Аналогичная диагностика может возникать в случае выставления клиентом
рыночных заявок на срочном рынке. Вызвано это тем, что при выставлении
рыночной заявки на этом рынке, QUIK автоматически подставляет в качестве
цены заявки существенно отличающиеся от расчетной цены
максимальную/минимальную возможные цены по конкретному контракту.
---------------------
Переводя на русский. Берем цену нашей заявки, находим разницу с ценой последнего клиринга. С помощью функции abs получаем модуль числа. Полученный результат прибавляем к БГО, транслируемому в квик. Профит. Попробую так, поскольку по вышеприведенным формулами с радиусом курса все равно заявки отвергаются по ошибке 332.
Проблемы с обновлением Спектры, Проблемы после обновления Спектры и изменения механизма ГО
 
Добавлю. Только что получил ответ на форуме биржи. Не знаю, компетентен ли он, но привожу его:
-------------------------
В quick транслируется ГО при покупке фьючерса по расчетной цене:
ГО = 2 * L * (MinStepPrice/ MinStep) * (1 + R / 100) = 8560 * (12.81 / 100) * 1.16 = 12 721,92 (различия в последних знаках из-за большой точности расчета переменных)
При заключении сделок по цене отличной расчетной, ГО может отличаться. Ваша формула рассчитывает фактическое ГО при покупке фьючерсного контракта по цене Ц.
----------------------
http://forum.moex.com/viewtopic.asp?t=30287
Проблемы с обновлением Спектры, Проблемы после обновления Спектры и изменения механизма ГО
 
Цитата
Stanislav Tvorogov пишет:
Цитата
Сергей Парахин пишет:
А может быть такое, что ГО, рассчитанное по методике из файла http://moex.com/a1463 получается меньше, чем транслирует квик в таблице текущих значений. Пример на 30.10.15 время 17:30.
Кот. клиринга (РЦ)=84270
макс. возм цена=88550
мин.возм. цена=79990
2L=88550-79990=8560
ст. шага цены=12,81 (округлим)
шаг цены=10
На основе параметров Si рассчитываем радиус курса 1+R= 1,16. Для надежности округляем радиус курса до 1,2.
Выставляем заявку на лонг по 83770,т.е. покупка по цене, ниже расчетной. Из таблички это формула:
ГО=(2L-(РЦ-Ц))*(MinStepPrice/StepPrice)*1+R
ГО=(8560-(84270-83770)*(12,81/10)*1,2=12 380,16
Квик же нам транслирует ГО 12 721,92.
Верен ли мой расчет ? И правильно ли я понимаю, что в некоторых случаях ГО может быть ниже, чем показывает квик ?
Добрый день,

Для проверки Вашего расчета рекомендуем обратиться к Вашему брокеру так как у него, возможно, сохранена информация по параметрам инструмента на указанный Вами момент времени, которой у нас, к сожалению, нет. При затруднении брокера с ответом необходимо инициировать его обращение к нам.
Здравствуйте ! В верности исходных данных я не сомневаюсь. Вопрос в другом. Может ли быть такое, что по новым правилам ГО, рассчитываемое по приведенным формулам, ниже ГО, транслируемого в квик ? Брокеру я писал, они мне прислали ровно ту же табличку из файла с сайта биржи. Вы мне скажите, мой пример расчета ГО верен или нет для случая ПОКУПКИ НИЖЕ РАСЧЕТНОЙ ЦЕНЫ ?
Меня смущают эти формулировки из файла с формулами:
-----------------------------
Увеличение гарантийного обеспечения по фьючерсам для некоторых сделок  
Действующий подход  
При покупке фьючерса выше расчетной цены или продаже фьючерса ниже расчетной цены в ходе торгов предоставляется скидка по гарантийному обеспечению
(ГО) – оно  ограничивается величиной 2L, где L – это диапазон от расчетной цены до нижнего/верхнего лимита колебания цен сделок 1 .
Новый подход
При покупке фьючерса выше расчетной цены или продаже фьючерса ниже расчетной цены в ходе торгов скидка не предоставляется, максимальное ГО может
составить 3L:
----------------------------------------
Т.е. можно сделать вывод, что сейчас ГО увеличивается только при ПОКУПКЕ ВЫШЕ расчетной цены или ПРОДАЖЕ НИЖЕ расчетной цены ? В противоположных случаях по прежнему предоставляется скидка ? Хотя и ранее об этих скидках я ничего не знал. Просто в коде qpile брал ГО из таблицы, накидывал 10% и путем деления стоимости портфеля на это ГО  получал количество лотов на вход. Сейчас это превратилось в черный ящик. Например, при такой же "накидке" в 10% на ГО из квика, лонг может давать открыть, а шорт нет. В другой день, наоборот. Т.е., например, в одну сторону дает 5 лотов, обратно только 4, хотя предыдущие позиции были прибыльными. При этом в стоимости портфеля по новым правилам я стал учитывать, помимо накопленной маржи (до клиринга), также и текущую маржу. Новые правила это разрешают.
Проблемы с обновлением Спектры, Проблемы после обновления Спектры и изменения механизма ГО
 
А может быть такое, что ГО, рассчитанное по методике из файла http://moex.com/a1463 получается меньше, чем транслирует квик в таблице текущих значений. Пример на 30.10.15 время 17:30.
Кот. клиринга (РЦ)=84270
макс. возм цена=88550
мин.возм. цена=79990
2L=88550-79990=8560
ст. шага цены=12,81 (округлим)
шаг цены=10
На основе параметров Si рассчитываем радиус курса 1+R= 1,16. Для надежности округляем радиус курса до 1,2.
Выставляем заявку на лонг по 83770,т.е. покупка по цене, ниже расчетной. Из таблички это формула:
ГО=(2L-(РЦ-Ц))*(MinStepPrice/StepPrice)*1+R
ГО=(8560-(84270-83770)*(12,81/10)*1,2=12 380,16
Квик же нам транслирует ГО 12 721,92.
Верен ли мой расчет ? И правильно ли я понимаю, что в некоторых случаях ГО может быть ниже, чем показывает квик ?  
Два теминала от разных провайдеров и один робот qpile
 
Здравствуйте ! Запустил тут на одной машине два терминала от разных брокеров. Загрузил в оба терминала робота на qpile. В настройках робота,как положено, указаны торговые счета для каждого брокера. В остальном код робота совершенно одинаков - название переменных, условия входа/выхода и т.д. Также одинаково обозначены идентификатор цены на графиках в разных терминалах. В результате роботы начали бодаться друг с другом. Вход в позу осуществляется по лимитированной заявке, которая выставляется заранее и либо она сработает, либо нет. Далее следует сигнал заявка снимается и ставится противоположная и т.д. Так вот конфликта в выставлении/снятии заявок нет. Но как только цена доходит до заявки и оба робота входят в позицию, один аварийно закрывает позицию (есть такое условие по одной из переменных). Если закрывать портфель в любом из терминалов, тогда все работает четко.
Вопрос. Может ли существовать конфликт одинакового кода на qpile, запущенного одновременно в двух разных терминалах на одном  ПК ? Или мне надо переименовать все переменные в одном из кодов ? Или это из-за одинакового названия идентификатора цены в настройках графика ?
Что предпочесть при выборе провайдера VDS ?, многоядерность или оперативки побольше
 
Да там вся засада с нагрузкой на процессор. Если среднесуточная нагрузка превышает 40%, то могут урезать производительность. Или вообще заблокировать. На моем локальном компе с WinXP Home (4 гига оперативки, AMD Athlon 2 Ггц 2 ядра) часто бывает, что quik грузит проц на 50 и более процентов. Правда, при этом запущены еще и другие задачи. В общем, включил пока 4 гига оперативки и одно ядро процессора. За прошедшие сутки средняя загрузка ЦПУ на сервере составила 6%. Т.е. пока очень даже хорошо. Правда кроме квика и radmina там ничего больше нет.
Что предпочесть при выборе провайдера VDS ?, многоядерность или оперативки побольше
 
Здравствуйте ! Минимальные системные требования читал. Все же, что важнее при выборе провайдера VDS для квика под WIndows Server 2012 R2. При одинаковой стоимости какую конф-ю выбрать:
1)  Intel Xeon, 2.6ГГц - 4 ядра,2 гига опертивки;
2)  Intel Xeon, 2.6ГГц - 1 ядро, 4 гига оперативки.
Или вообще хватит 2 ядра и 2 оперативки ?
Будут крутиться два портфеля на qpile.  
А это нормально ?, Нужно остановить скрипт, чтобы обновился totalnet ?
 
Цитата
swerg пишет:
А если поставить 1..2 секунды? откуда именно 5? неужели к вам так долго приходит ответ и изменение позиций? (в терминале вы ведь видите изменение?)
Да это так, на всякий случай. Можно и 2 секунды поставить. Главное, максимально быстро отправить заявку, а том хоть 10 секунд пусть скрипт отдыхает. Подумал, что можно проще сделать. Ввести переменную poza. Как только зявку ушла, не дожидаясь ее исполнения, переводить ее в true. Вышли из позиции, соответственно, переводим ее в false. Без колбэков. Пока немного трудновато понять логику событийного программирования после qpile. Учитывая еще то, что я не профессиональный программист. Имею только базовые знания из институтского курса.
Тут еще вылезла другая проблема. Мой брокер (Сбербанк КИБ) не разрешает переворачивать позицию в одной заявке, если ГО в 2 раза меньше чистой позиции.Пример. На счете 30 тыс. ГО по фьючу РТС 22 тыс. Чтобы мне перевернуться из лонга в шорт, я должен сначала одной заявкой продать лонг, а другой заявкой открыть шорт. Это что вручную при вводе заявки, что на qpile. На qpile понятно. В синхронном режиме посылаешь в одном цикле сначала одну заявку, тут же следом в этом же цикле вторую. И все срабатывает. Но это очень долго. Цена может улететь. И вот тут уже придется разбираться с колбэками. Как вариант, с тем, что предложил green_X5
А это нормально ?, Нужно остановить скрипт, чтобы обновился totalnet ?
 
Я что-то после qpile пребываю в легком шоке. Сегодня целый день убил, чтобы понять, почему робот продолжает входить в позицию, хотя уже одна заявку улетела. В цикле на вход, помимо торгового условия есть проверка на наличие позиции по фьючерсу. Код на получение позиции такой (подсмотрел тут на форуме))):

function GetTotalNet(stroka)
  local i = 0
  local futures = {}
     while futures.sec_code ~= stroka do
        futures = getItem("futures_client_holding", i)
        i = i+1
     end
  return futures.totalnet
end

Далее в майне вызываем эту функцию и присваиваем переменной значение local total_net=GetTotalNet(тут пишем код бумаги).
Т.е. если total_net=0 и еще другие условия, то входим в позицию. На купиле это работало. Тут же я долго не мог понять, почему скрипт набирает позицию до упора, пока не выскочит сообщение "превышен лимит по инструменту". Логическим путем пришел к выводу, что после посылки лимитированной заявки (которая уходит по рынку) и ее исполнения, нужно остановить скрипт, чтобы позиция успела обновиться в таблице. В конце цикла на вход ставлю паузу в 5 секунд. Только тогда все заработало как нужно.
Это нормально ? Или у меня код кривой на получение позиции и можно как-то ускорить процесс ?
Как быстрее войти в сделку, Как быстрее получить нужно значение цены или графика для выполнения условия
 
Цитата
Серж пишет:
Цену чего? Последней сделки или текущей котировки?
А что быстрее получим ? Собственно все равно, с чем сравнивать значение параболика, лишь бы быстрее сформировался сигнал и полетела заявка.
Как быстрее войти в сделку, Как быстрее получить нужно значение цены или графика для выполнения условия
 
Здравствуйте ! Пытаюсь разобраться с языком QLUA на примере простых стратегий. Например, параболик САР. При перескоке цены параболиком, открываем позицию. Вход на текущей свече. Вопрос. Откуда брать цену, чтобы получить ее максимально быстро по сравнению с кодом на qpile (там я беру цену последней сделки из таблицы текущих параметров):
1) Также из таблицы текущих параметров
2) Из таблицы всех сделок, отфильтровав по нужному инструменту.
3) Напрямую из стакана. Только там будем сравнивать бид или оффер с параболиком, а не цену последней сделки.
4) Напрямую с графика цены через GetNumCandles и далее как в примере с индикаторами ?
Или для Lua это не принципиально ? И в любом случае результат будет одинаковым ?

Какой самый скоростной способ получения данных с индикатора, того же параболика, например ? Или способ только один через GetNumCandles и далее.
Страницы: 1
Наверх