Imersio Arrigo написал: Я правильно понимаю, что кроме меня сделки с этими номерами в таблице сделок никто не видит??
Верхний скриншот, вторая строка. Судя по всему на первом скриншоте сортировка по полю номер, а на втором - по времени.
Предлагаю в таблице вывести поле не дату торгов, а дату сделки. Есть подозрение что эта сделка вчерашняя, и дата там должна быть вчерашняя.
Действительно, сделка была вчерашняя. Сегодня проверил все сделки по ежедневным отчетам брокера -- все сделки есть. Почему мне брокер сказал, что сделок у меня отродясь не было -- загадка.
Просьба проверить, что в таблице сделок Рабочего места QUIK отсутствуют дополнительные пользовательские фильтры, такие же как включенный фильтр по коду бумаги. Дополнительно, рекомендуем обратиться к брокеру, сообщив номера указанных Вами двух сделок и уточнить, действительно ли они имели место быть. В случае сохранения проблемы, в директории с программой QUIK просьба создать пустой файл "quik_odbc.log" и продолжить работу. При повторении проблемы потребуется прислать этот файл нам на адрес: quiksupport@arqatech.com указав в письме ссылку на данную ветку форума. В письме приложите пожалуйста также новые скриншоты и укажите номера проблемных сделок.
Брокер мне сообщил, что сделок с такими номерами у меня не было. После создания файла quik_odbc.log нужно ли завершить работу quik и заново запустить его?
Добрый день. Терминал на компьютере всего один, брокер БКС, счет реальный, не демо-счет.
Вот скриншот таблицы сделок по инструменту GOLD-3.18:
На последних строках видно, что последняя продажа (открытие короткой позиции) была совершена 29.01.2018 в 18:04:46, закрыта короткая позиция 29.01.2018 в 21:03:17
Вот скриншот таблицы заявок по инструменту GOLD-3.18:
Последние строки показывают, что заявка на продажу 29.01.2018 в 18:04:46 была исполнена, заявка на покупку 29.01.2018 в 21:02:04 была снята, следующая заявка на покупку 29.01.2018 в 21:03:17 была исполнена.
В базу данных может записывать только терминал quik.
В базу данных делаю запрос в таблицу сделок:
SEL ECT distinct * FR OM trade WHERE paper_code = 'GDH8' AND date = '2018-01-29' ORDER BY "date", "time"
На скриншоте видно, что последняя продажа (открытие короткой позиции) была совершена 29.01.2018 в 18:04:46, затем была совершена покупка 29.01.2018 в 20:56:33 и затем была покупка 29.01.2018 в 21:03:17. Проблема в том, что сделки 29.01.2018 в 20:56:33 не было и в quik ее не показывает.
Доброе утро. Написал торгового робота, который умеет подавать заявки и снимать заявки. Этот торговый робот работает круглосуточно. Проблема в том, что сама биржа не работает круглосуточно. Из-за этого часто появляются сообщения "Ошибка создания заявки. [GW][3] "Сейчас эта сессия не идет."." Как определить средствами quik+lua возможно ли подавать заявки или нет?
Добрый вечер. Столкнулся с такой проблемой: написал скрипт, который должен работать так:
если нет заявок, то создаем заявку для открытия позиции
если есть заявка, то ни чего не делаем INFO[trade_data.sec_code]['tiks_waiting'] количество тиков
если INFO[trade_data.sec_code]['tiks'] количество тиков прошло, то отменяем заявку
если есть открытая позиция, то через INFO[trade_data.sec_code]['tiks'] количество тиков закрываем позицию.
Проблема в том, что событие OnAllTrade срабатывает не последовательно тик за тиком, а как-то параллельно. То есть может быть несколько тиков одновременно обрабатывает. Из-за этого мой скрипт может открыть сразу 5 позиций. Я пробовал при помощи таблицы INFO[trade_data.sec_code]['ignore_tiks'] сделать блокировку, но эта блокировка не помогает. Какие есть способы эту блокировку создать?
Код
is_run = true
-- глобальная таблица, в ней хранится информация о тиках и флаг блокировки
INFO = {
["SiU7"]={
['tiks']=4, -- Подсчет тиков, не надо трогать
['tiks_waiting']=4, -- подсчет тиков в ожидании сделки, не надо трогать
['ignore_tiks']=false, -- игнорируем тики, если выполняется какая-то операция, не надо руками трогать
['TIKS_IN_BAR']=10, -- Количество тиков в баре, можно изменять
['TIKS_NOTHING']=4, -- Количество тиков для запроса, можно изменять
['BARS']=5, -- Количество баров для анализа, можно изменять
['WAITING']=10}, -- Количество тиков после выставления заявки, можно изменять
}
TRADE_ACCOUNT = getItem("trade_accounts", 0) -- поменять цифру, если будет ругаться на счет
message(TRADE_ACCOUNT.trdaccid)
order_number = 1
function OnStop(signal)
stopped = true
end
function main()
while not stopped do
sleep(100)
end
end
-- Отменяем просроченную транзакцию, удаляется заявка
function cancel_transaction(trade_data, futures)
INFO[trade_data.sec_code]['tiks_waiting'] = 0
return
-- закрываем позицию, просто выставляется заявка на покупку
function close_position(trade_data, futures)
INFO[trade_data.sec_code]['tiks'] = 0
INFO[trade_data.sec_code]['tiks_waiting'] = 0
return
-- открываем позицию, просто выставляется заявка на продажу
function open_position(trade_data)
INFO[trade_data.sec_code]['tiks'] = 0
INFO[trade_data.sec_code]['tiks_waiting'] = 0
return
function OnAllTrade(trade_data)
if INFO[trade_data.sec_code] == nil then
return
end
if trade_data.sec_code ~= 'SiU7' then
return
end
local bind_available = false
-- сам способ пропускания тиков
if INFO[trade_data.sec_code]['ignore_tiks'] then
return
end
-- блок удаления неиспользованных заявок и закрытия сделок, если долго висит заявка
if getNumberOf("orders") > 0 then
for number_bind = 0, getNumberOf("orders") do
local futures = getItem("orders", number_bind)
if futures ~= nil and futures.sec_code == trade_data.sec_code and bit.band(futures["flags"], 1) == 1 then
-- удаление неиспользованной заявки
if INFO[trade_data.sec_code]['tiks_waiting'] >= INFO[trade_data.sec_code]['WAITING'] then
-- выставляем флаг запрета тиков, выполняем операцию отмены заявки, возвращаем обратно флаг запрета
INFO[trade_data.sec_code]['ignore_tiks'] = true
result = cancel_transaction(trade_data, futures)
INFO[trade_data.sec_code]['ignore_tiks'] = false
message('202')
if result == nil then
bind_available = false
else
message(result)
end
break
else
INFO[trade_data.sec_code]['tiks_waiting'] = INFO[trade_data.sec_code]['tiks_waiting'] + 1
bind_available = true
break
end
end
end
end
-- блок открытых позиций. Если подошло время, закрываем позиции
if not bind_available and getNumberOf("futures_client_holding") > 0 then
for index = 0, getNumberOf("futures_client_holding") do
local futures = getItem("futures_client_holding", index)
if futures ~= nil and futures.sec_code == trade_data.sec_code and futures.totalnet < 0 then
INFO[trade_data.sec_code]['tiks'] = INFO[trade_data.sec_code]['tiks'] + 1
bind_available = true
if INFO[trade_data.sec_code]['tiks'] >= (INFO[trade_data.sec_code]['TIKS_IN_BAR'] * INFO[trade_data.sec_code]['BARS']) then
-- выставляем флаг запрета тиков, выполняем операцию закрытия позиции, возвращаем обратно флаг запрета
INFO[trade_data.sec_code]['ignore_tiks'] = true
result = close_position(trade_data, futures)
INFO[trade_data.sec_code]['ignore_tiks'] = false
if result ~= nil then
message(result)
else
bind_available = false
end
else
INFO[trade_data.sec_code]['tiks'] = INFO[trade_data.sec_code]['tiks'] + 1
end
break
end
end
end
-- если есть заявка или открыта позиция, то позицию не открываем
if bind_available then
return
end
-- блок открытия позиций
INFO[trade_data.sec_code]['tiks_waiting'] = INFO[trade_data.sec_code]['tiks_waiting'] + 1
if INFO[trade_data.sec_code]['tiks_waiting'] >= INFO[trade_data.sec_code]['TIKS_NOTHING'] then
-- выставляем флаг запрета тиков, выполняем операцию открытия позиции, возвращаем обратно флаг запрета
INFO[trade_data.sec_code]['ignore_tiks'] = true
local result = open_position(trade_data)
INFO[trade_data.sec_code]['ignore_tiks'] = false
if result ~= nil then
message(result)
end
return
end
end
Спасибо, для меня было не очевидно, что я выгружаю через "Сервисы / Экспорт/импорт данных / Экспорт инструментов по ODBC" другую таблицу.
У меня есть пожелания к разработчикам: хотелось бы видеть в заголовке окна "Экспорт инструментов по ODBC" название того окна, которое будет выгружаться. Или это пожелание нужно оформить в форуме "Пожелания по развитию QUIK" ?
Нужно сделать автоматическую выгрузку таблицы обезличенных сделок. На СУБД создал такую таблицу:
Код
CRE ATE TABLE public.all_trades
(
paper character varying(50),
date timestamp without time zone,
price integer,
volume integer,
dir character varying(7)
)
Но при настройки экспорта мне предлагаются какие-то другие колонки:
Такое ощущение, что выгружаю абсолютно не ту таблицу
is_run = true
-- вызывается при нажатии кнопки "остановить" в диалоге
function OnStop(signal)
stopped = true
end
-- крутится в отдельном потоке, ничего не делает
function main()
while not stopped do
sleep(100)
end
end
-- выводим сообщение
function OnTrade(trade_data)
message('da')
end
C:\lua\test.lua:2: module 'socket.http' not found:
no field package.preload['socket.http']
no file '.\socket\http.lua'
no file 'C:\Open_Broker_QUIK_Junior\lua\socket\http.lua'
no file 'C:\Open_Broker_QUIK_Junior\lua\socket\http\init.lua'
no file 'C:\Open_Broker_QUIK_Junior\socket\http.lua'
no file 'C:\Open_Broker_QUIK_Junior\socket\http\init.lua'
no file 'C:\Open_Broker_QUIK_Junior\Include\socket\http.dll'
no file 'C:\Open_Broker_QUIK_Junior\Include\socket\http.lua'
no file 'C:\Open_Broker_QUIK_Junior\Include\socket\http.luac'
no file '.\socket\http.dll'
no file 'C:\Open_Broker_QUIK_Junior\socket\http.dll'
no file 'C:\Open_Broker_QUIK_Junior\loadall.dll'
no file 'C:\Open_Broker_QUIK_Junior\Include\socket.dll'
no file 'C:\Open_Broker_QUIK_Junior\Include\socket.lua'
no file 'C:\Open_Broker_QUIK_Junior\Include\socket.luac'
no file '.\socket.dll'
Исходный код:
Код
is_run = true
local http = require "socket.http"
function main()
message("Привед!")
end
function OnStop()
is_run = false
end
function OnTrade(trade_data)
end