Прошу совета с TAKE_PROFIT_AND_STOP_LIMIT_ORDER, Прошу совета с TAKE_PROFIT_AND_STOP_LIMIT_ORDER
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.12.2015 11:02:32
Цитата
Sergey Gorokhov пишет: Информацию о посланных транзакциях Вы можете логировать самостоятельно средствами Lua
В спорной ситуации брокер может просто заявить, что транзакция на сервер не пришла. И эту карту ничем не перебьёшь. К тому же, транзакции выполненные вручную, нельзя "перехватить". Поэтому зарегистрируйте пожелание, чтобы отправленные транзакции также логировались на рабочем месте средствами самой системы.
Надо делать так, как надо. А как не надо - делать не надо.
Корректность тиковых данных
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.12.2015 09:42:29
Данную проблему поднимал почти год назад: . Проблема в том, что на сервере QUIK нет никакого контроля качества принимаемой информации. И, если в результате какого-либо сбоя на одном из узлов передачи данных между шлюзом биржи и сервером QUIK часть данных "потеряется", то это так и останется незаметным для сотрудников брокера, пока (и если) кто-нибудь из бдительных пользователей не сообщит им об этом. Проблема отсутствия части сделок в ТВС, и как следствие - части данных на графиках, - явление не редкое: по одному только инструменту более 2% в год.
Надо делать так, как надо. А как не надо - делать не надо.
Нулевые позиции
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
10.12.2015 19:19:48
Цитата
Alexey Ivannikov пишет: Как вариант - учитывать время проведения клиринга в своём алгоритме.
Можно, но есть множество причин, по которым данный вариант не является надёжным. Поэтому давайте сделаем так, чтобы не нужно было гадать: есть данные - транслируем, нет данных - не транслируем. Спасибо.
Надо делать так, как надо. А как не надо - делать не надо.
Старатель пишет: Это биржа шлёт эти нули или QUIK сам их подставляет?
Добрый день.
Второе.
Очевидно, что, когда принималось решение о такой подставе замене, должно было предусмотреть вариант чтения текущей позиции. Поделитесь, пожалуйста, решением однозначного определения текущей позиции по инструменту, в случае, когда мы видим в таблице ноль. Ну, т.е., по каким признакам можно понять, что размер позиции ещё не определён и нужно ждать колбэка?
Надо делать так, как надо. А как не надо - делать не надо.
InsertRow
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
05.12.2015 16:50:22
Цитата
NUMBER InsertRow(NUMBER t_id, NUMBER key) Примечание: При добавлении данных в новую таблицу в первую очередь выполните данную функцию с параметром «key» равным «-1». При этом строка добавится в конец таблицы.
Почему при добавлении в новую таблицу key должен быть равен -1? Что произойдёт, если добавлять в новую таблицу с другим, отличным от -1, значением?
Надо делать так, как надо. А как не надо - делать не надо.
Нулевые позиции
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
04.12.2015 17:09:02
В таком случае, можем мы рассчитывать, что это недоразумение будет исправлено в ближайшем обновлении версии терминала в рамках ?
Цитата
Sergey Gorokhov пишет: Дословно оно звучит так "чтобы во всех колбеках возвращающих таблицы, при отсутствии значения параметра передавать nil вместо "0"
Надо делать так, как надо. А как не надо - делать не надо.
Нулевые позиции
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
04.12.2015 10:43:58
Цитата
Alexey Ivannikov пишет: Тут нужно смотреть каждый конкретный случай
Вот конкретный пример, который у вас будет воспроизводиться всегда: Получаем текущие позиции из таблицы futures_client_holding:
Код
{startnet=1, totalnet=1}
Затем в 18:45:20 приходит колбек
Код
{startnet=0, totalnet=0}
Это биржа шлёт эти нули или QUIK сам их подставляет?
Надо делать так, как надо. А как не надо - делать не надо.
Нулевые позиции
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
03.12.2015 19:25:53
Иногда, например во время клиринга, в таблицах QUIK транслируются нули вместо реальных позиций. Эти нули присылает биржа или QUIK сам подставляет их вместо null?
Как можно понять, когда там действительно нули, а когда позиции пока ещё не загружены?
Надо делать так, как надо. А как не надо - делать не надо.
запретить всплывающие окна сообщений
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
01.12.2015 18:20:17
Цитата
Sergey Gorokhov пишет: На нашем форуме уже подымался этот вопрос и на него был ответ
С точки зрения получения доступа к данным Рабочего Места QUIK,
Эко вы завернули Понятно, что для использования в личных целях вы не можете ничего запретить. Здесь же я спрашиваю, могу ли я или кто-то другой по написать скрипт, который будет выполнять функции, до которых у ваших программистов не доходят руки (и не скоро, наверное дойдут). К примеру, при старте QUIK (или по нажатию "горячих клавиш") открывать окно "Доступные скрипты" (или управлять другими окнами) и свободно распространять его на просторах интернета?
Надо делать так, как надо. А как не надо - делать не надо.
запретить всплывающие окна сообщений
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
01.12.2015 17:35:00
Цитата
тот самый пишет: т.е. такая ситуация: в данный момент, есть куча проектов, наработок - но их нельзя продавать/распространять из-за страха юридических последствий....
тот самый пишет: Вы, по сути, запрещаете нам нормальное использование возможностей LUA C API
Никто ничего не запрещает. Пользуйтесь на здоровье, но только на свой страх и риск.
вы не запрещаете пользоваться как в своих личных целях, так и в распространяемых продуктах?
Надо делать так, как надо. А как не надо - делать не надо.
Торговые счета, trade_accounts
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
01.12.2015 12:23:34
Прокомментируйте, пожалуйста, следующую ситуацию:
Цитата
trdacc_type NUMBER Тип депозитарного счета
Надо делать так, как надо. А как не надо - делать не надо.
Обрезается текст в Окне сообщений
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
30.11.2015 08:55:38
Надо делать так, как надо. А как не надо - делать не надо.
Торговые счета, trade_accounts
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
29.11.2015 13:23:46
Как можно однозначно определить к какой секции относится тот или иной счёт: фондовой, срочной, валютной?
Цитата
тот самый пишет: пользователям приходиться играть в шерлоков холмсов
Спасибо за ваше "расследование", но тема соответствия номера параметра trdacc_type строковому описанию не раскрыта. Полагаю, справедливо было бы предоставить слово представителям компании разработчика.
Надо делать так, как надо. А как не надо - делать не надо.
Вызов доступных скриптов LUA кнопкой и горячими клавишами
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
29.11.2015 13:12:15
Или хотя бы сохранение состояния и позиции окна в файле настроек
Надо делать так, как надо. А как не надо - делать не надо.
Использовать 7.0 у брокеров где 6.хх, Каковы риски, что может поломаться?
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
29.11.2015 11:41:57
А что за ошибка "Неверная версия протокола"? У брокера сервер QUIK ниже версии 5.0?
Надо делать так, как надо. А как не надо - делать не надо.
А, всё понял: вы взяли из pdf, а я из chm, Ну и что можно сказать, если даже в самом Руководстве пользователя QUIK информация разная?
Надо делать так, как надо. А как не надо - делать не надо.
Торговые счета, trade_accounts
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
29.11.2015 10:57:44
Цитата
тот самый пишет: Тип счета депо Тип депозитарного счета. Возможные значения:
Откуда вы взяли эту таблицу? У меня другая таблица (из того же Руководства, Раздел 5):
Цитата
Тип депозитарного счета. Возможные значения:
«Не определен»;
«Счет владельца»;
«Корреспондентский счет»;
«Счет ДУ»;
«Эмиссионный счет»;
«Клиентский счет»;
«Счет по умолчанию для валютного рынка»;
Только порядок перечисления строковых значений не соответствует числовым значениям параметра trdacc_type таблицы trade_accounts. Нужно именно однозначное соответствие.
Надо делать так, как надо. А как не надо - делать не надо.
Торговые счета, trade_accounts
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
29.11.2015 01:14:30
Цитата
trdacc_type NUMBER Тип депозитарного счета
Где можно подробнее узнать о значениях этого параметра?
Надо делать так, как надо. А как не надо - делать не надо.
Массовая отправка заявок на сервер QUIK
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
26.11.2015 11:14:54
Это говорит только о производительности рабочего места Далее появляется объект с неизвестными нам свойствами в виде трассы до сервера QUIK, который не позволяет сделать каких-либо объективных выводов о производительности самого сервера, поскольку не известно, с какой частотой эти транзакции попадали к нему на обработку.
Надо делать так, как надо. А как не надо - делать не надо.
Массовая отправка заявок на сервер QUIK
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
26.11.2015 10:17:39
Цитата
Старатель пишет: Добавлю, что при этом заявки выставлялись на сервере примерно по 250 в секунду.
Это результат в моменты низкой активности на тестовом контуре. Во время более активных периодов результат хуже: менее 100 заявок в сек.
Надо делать так, как надо. А как не надо - делать не надо.
Массовая отправка заявок на сервер QUIK
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
26.11.2015 10:13:07
Добавлю, что при этом заявки выставлялись на сервере примерно по 250 в секунду.
Надо делать так, как надо. А как не надо - делать не надо.
Массовая отправка заявок на сервер QUIK
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
26.11.2015 10:09:15
Если речь именно про транзакции, то отправить их можно более 1000 в секунду. Так на тестовом QUIK я отправлял 12-14 тыс. транзакций за одну секунду. Другое дело, что заявки по ним выставляются в течение нескольких секунд. А ответ по всем транзакциям приходит так вообще в течение более минуты.
Надо делать так, как надо. А как не надо - делать не надо.
Да Close() не удаляет параметр из списков. Такова текущая реализация. Ранее мы уже регистрировали от другого пользователя пожелание по данной теме. Можем зарегистрировать еще одно от Вас.
Давайте зарегистрируем. А то в текущем виде смысла нету в :Close(). Это с таким же успехом можно просто удалить сам объект ds = nil.
Надо делать так, как надо. А как не надо - делать не надо.
Антонио пишет: Видим, что потоки в переменных не сохраняются, а какое-то время живут как локальные переменные. При выходе из скрипта потоки не закрываются с помощью DS:close(). Вопрос 1 : Это нормально не хранить и не закрывать после себя потоки ?
А зачем закрывать? Мы потом с этими данными работаем.
При включённой настройке "Исходя из настроек открытых пользователем таблиц" функция CreateDataSource добавляет параметр в списки принимаемых параметров. Метод :Close() не удаляет этот параметр из списков. Таким образом, :Close() не влияет на возможность получения данных при работе с ними через getParamEx.
Это нормальная ситуация?
Надо делать так, как надо. А как не надо - делать не надо.
Вопросы по версии QUIK 7.0.1.5
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
21.11.2015 20:30:07
Разговор не про "Карман транзакций"
Надо делать так, как надо. А как не надо - делать не надо.
Работает. Но эту комбинацию вы помните, я помню. А кто-то никогда и не пользовался горячими клавишами. Пункт меню всё же не будет лишним
Надо делать так, как надо. А как не надо - делать не надо.
Вопросы по версии QUIK 7.0.1.5
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
21.11.2015 09:58:39
Не нашёл в меню "Выполнить транзакцию"
Надо делать так, как надо. А как не надо - делать не надо.
По-разному определяется размер таблицы, #table может выдавать разные значения
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
20.11.2015 09:36:42
Код
function table.len(tab)
-- Подсчёт количества элементов в таблице
local n = 0
for _,_ in pairs(tab) do n = n + 1 end
return n
end
Надо делать так, как надо. А как не надо - делать не надо.
Проблемы с обновлением Спектры, Проблемы после обновления Спектры и изменения механизма ГО
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
19.11.2015 11:19:26
Если происходит "переворот" позиции, то также блокируются средства на сумму отрицательной вариационной маржи по закрываемой позиции:
Надо делать так, как надо. А как не надо - делать не надо.
Списки кодов классов и бумаг
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
19.11.2015 11:05:28
Цитата
Sergey Gorokhov пишет: Можно использовать OnParam с дополнительной проверкой
Такой вариант не подходит: в настройках не установлено "Добавлять новую бумагу во все таблицы"
Цитата
Sergey Gorokhov пишет: К сожалению именно такого колбэка нет.
Понял, спасибо. Надеюсь доделаете.
Надо делать так, как надо. А как не надо - делать не надо.
как изменить время компьютера средствами lua без cmd?
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
19.11.2015 09:26:26
Сама os.execute вызывает окно командной строки, которое вылазит на первый план и, если, к примеру, вы работаете в полноэкранном приложении, норовит его свернуть.
Надо делать так, как надо. А как не надо - делать не надо.
getParamEx
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
18.11.2015 22:13:07
Скрытый текст
Ну вот и поговорили Если есть желание, можете скинуть мне информацию в ЛС
Надо делать так, как надо. А как не надо - делать не надо.
getParamEx
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
18.11.2015 21:37:59
Скрытый текст
Я догадливый Но не трусь вконтакте.
Надо делать так, как надо. А как не надо - делать не надо.
Надо делать так, как надо. А как не надо - делать не надо.
getParamEx
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
18.11.2015 21:18:11
Скрытый текст
Цитата
тот самый пишет: такое ощущение, что кто-то решил написать справку из вопросов и ответов форума по всей QLUA:)))))
Ну, если все зарегистрированные участники этого форума скинутся хотя бы по 100 руб./мес, то я напишу и буду поддерживать в актуальном состоянии расширенную справку по QLua с описаниями особенностей работы некоторых функций, с нормальными примерами по всем функциям и известными багами на сегодняшний день
Надо делать так, как надо. А как не надо - делать не надо.
getParamEx
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
18.11.2015 21:07:13
Цитата
тот самый пишет: с такими выражениями - надо быть аккуратным в QLUA с его "ленивыми вычислениями"
Именно, с учётом "ленивого" правильного вычисления это выражение является корректным.
Цитата
тот самый пишет: а вообще, надо полный пример для теста и разбора. т.е. с указанием класса и кода бумаги и т. и т. п.
Зачем? Любой код бумаги подставляете.
Вот так выглядит таблица, возвращаемая getParamEx, если искомый параметр ("tradingstatus") не задан в списках:
Надо делать так, как надо. А как не надо - делать не надо.
Дистрибутив программы
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
18.11.2015 20:59:28
Спасибо. В техподдержку-то я не догадался заглянуть: искал в "Продукты и услуги - QUIK"
Надо делать так, как надо. А как не надо - делать не надо.
getParamEx
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
18.11.2015 20:55:43
является ли выполнение условия
Код
result=="1" and param_image~="" and param_type~="0"
необходимым и достаточным, чтобы быть уверенным, что значение параметра получено?
Надо делать так, как надо. А как не надо - делать не надо.
getParamEx
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
18.11.2015 20:10:11
Вот такой код:
Код
local status = getParamEx(class_code, sec_code, "tradingstatus")
message(status.param_value)
выводит "0.000000". Но мы уже наученные - понимаем, что ноль в QUIK - это не всегда ноль. Проверяем тип данных, чтобы не был равен 0:
Код
message(status.param_type)
выводит 2. Вроде, нормально. Ан, нет: для параметра "tradingstatus" тип должен быть 4. Значит данный параметр Квиком не получен. И так для многих параметров.
Но надо сделать так, чтобы можно было однозначно определить, без гаданий, получен ли параметр торговой системой или нет.
Надо делать так, как надо. А как не надо - делать не надо.
CreateDataSource
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
18.11.2015 18:07:45
Цитата
тот самый пишет: getParamEx и CreateDataSource - абсолютно никак не связаны.
Оказывается, связаны.
Цитата
Sergey Gorokhov пишет: Это работает только если включена настройка "Исходя из настроек открытых пользователем таблиц"
Если включена настройка "Исходя из настроек открытых пользователем таблиц", то CreateDataSource автоматически добавляет бумагу/параметр в список получаемых параметров.
Таким образом, с помощью getParamEx можно будет получить значения параметров. (Выше я был не прав: CreateDataSource всё же не совсем бесполезна в этой ситуации).
Правда, ds:Close() бумагу уже не из списка не удаляет.
Надо делать так, как надо. А как не надо - делать не надо.
Списки кодов классов и бумаг
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
18.11.2015 14:47:00
Добрый день. В руководстве QLua к QUIK v.7 добавилось описание функции OnConnected, из которого стало ясно, что колбэк, вызываемый при получении нового класса уже существует. Есть ли колбек, вызываемый при получении новой бумаги в существующем классе?
Надо делать так, как надо. А как не надо - делать не надо.
Дистрибутив программы
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
18.11.2015 14:36:42
Дайте, пожалуйста, ссылку на страницу со списком дистрибутивов программы, утилит, библиотек, справочных руководств... А то на сайте заблудился...
Надо делать так, как надо. А как не надо - делать не надо.
QUIK (версия 7.0.1.5), function OnTrade(trade), трехкратный вызов на одно событие.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
17.11.2015 10:10:26
Цитата
Sergey Gorokhov пишет: Про nil, его нет и не было, мы зарегистрировали пожелание. Дословно оно звучит так "чтобы во всех колбеках возвращающих таблицы, при отсутствии значения параметра передавать nil вместо "0"
Я бы уточнил: как 0 (ноль), так и "" (пустая строка) - оба значения сейчас могут трактоваться двусмысленно.
Вот в случае этой реализации и может возникнуть дополнительный колбэк, в зависимости от текущей реализации. Если сейчас после колбэка со значением <0 = null (параметра нет)> не отправляется повторный колбэк со значением <0 = 0 (параметр заполнен)>, то при реализации указанного выше предложения будет возникать дополнительный колбэк.
Цитата
Sergey Gorokhov пишет: Да сейчас это действительно так и способ решить проблему уже озвучивался "используйте комментарий"
Уже писал, что часто - это не выход из положения:
Цитата
Sergey Gorokhov пишет: У пользователя может быть куча других роботов, алго-приводов и пр., где параметры транзакций уже давно жёстко заданы производителем.
Цитата
Sergey Gorokhov пишет: Далее, предлагается разделить понятия nil и 0, а именно в базе записывать "0" (как сейчас) а в описанных выше случаях, при приезде сделки отправлять клиенту nil и далее делать поиск правильного trans_id. На что не однократно прозвучал ответ, что в такой реализации для отправки trans_id=0 будет лишний колбэк, которого сейчас нет.
При реализации конкретно этого предложения никаких лишних колбэков возникать не будет. Выше уже показал, когда может возникнуть дополнительный колбэк.
Цитата
Sergey Gorokhov пишет: А лишние колбэки, судя по этой ветке форума, никому не нравятся.
А какая нам теперь разница, сколько колбэков обрабатывать: 3 или 4 или сколько там будет? Для нас важно чёткое понимание получили ли мы интересующие нас данные или ещё нет.
Надо делать так, как надо. А как не надо - делать не надо.
Как правильно обработать событие "закрылась очередная новая свеча" ?
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
16.11.2015 18:14:31
CreateDataSource(), SetUpdateCallback(), T()
Цитата
s_mike@rambler.ru пишет: в скрипте: getNumCandles на очередной итерации вернула большее значение, чем на предудыщей итерации скрипта
Принцип тот же: время последнего события больше предыдущего.
Надо делать так, как надо. А как не надо - делать не надо.
Старатель пишет: Является ли следующая ситуация сбоем на сервере: когда "сделка приехала раньше ответа на транзакцию" и в этом случае в первом колбеке trans_id=0 даже, если транзакция была подана не через интерфейс ?
Данная ситуация не является сбоем, это "частный случай" Да, в этом случае первым приедет trans_id=0 даже, если транзакция была подана не через интерфейс.
Так какого вы мне тут расписываете на 3-х страницах?!
Я вам говорю, что получив колбек с trans_id=0 (сюда можно вписать название любого другого обновляемого параметра), я не могу быть уверенным, что значением этого параметра действительно является 0 (ноль). И меня (думаю и других пользователей QUIK) не волнует, что эта ситуация маловероятна в условиях штатной работы сервера.
Получив trans_id=0 (сюда можно вписать название любого другого обновляемого параметра), я должен выполнить определённую задачу. А что потом, когда эта "маловероятная" ситуация произойдёт, я буду просить биржу откатить сделки обратно, потому что Sergey Gorokhov сказал мне, что это "маловероятно"?
Надо делать так, как надо. А как не надо - делать не надо.
QUIK (версия 7.0.1.5), function OnTrade(trade), трехкратный вызов на одно событие.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
16.11.2015 12:33:50
Цитата
Sergey Gorokhov пишет: Частный случай когда сделка приехала раньше ответа на транзакцию тоже возможен.
Мне не понятны ваши трактовки "частный"/"общий" случай.
Является ли следующая ситуация сбоем на сервере: когда "сделка приехала раньше ответа на транзакцию" и в этом случае в первом колбеке trans_id=0 даже, если транзакция была подана не через интерфейс?
Я действительно уже многократно задаю один и тот же вопрос. Но я не получаю на него прямого ответа! Перестаньте уже вилять в конце концов.
Надо делать так, как надо. А как не надо - делать не надо.
QUIK (версия 7.0.1.5), function OnTrade(trade), трехкратный вызов на одно событие.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
16.11.2015 12:10:26
Цитата
Sergey Gorokhov пишет: Мы можем зарегистрировать пожелание "отличать сделки порожденные транзакцией выставленной через интерфейс от выставленной через Lua" без конкретики озвученной в Вашем предложении. Устроит такой вариант закрытия темы?
Как меня может устроить такой вариант, если в вашем предложении нет никакой конкретики? И потом, почему обязательно Lua? Сервер знает, что транзакция подана через Lua, а не Api или QPILE?
Надо делать так, как надо. А как не надо - делать не надо.
QUIK (версия 7.0.1.5), function OnTrade(trade), трехкратный вызов на одно событие.
Старатель пишет: OnTrade всегда приходит с заполненным полем trans_id?
Нет не всегда, в частности из-за сбоя на сервере может приехать 0, а потом правильный trans_id или он может вообще не приехать.
Цитата
Старатель пишет: Если trans_id=0 в сделке, означает ли это, что сделка была совершена вручную?
В общем случае да, в частном см. выше.
Вы сейчас извиваетесь, как уж на сковородке. Таким образом, теперь вы сами свои же о повторной приходе колбека OnTrade необходимостью отправлять дополнительные параметры, в частности uid и trans_id?
Или (задам опять прямой вопрос, на который вы так не хотите давать прямого ответа, хотя вопрос выше был итак достаточно чётким):
Может ли в штатной ситуации trans_id прийти незаполненным (в текущей реализации это означает ноль) в первом колбеке?
На всякий случай, привожу ссылку на ответ более компетентного сотрудника, как это работает в 6-й версии:
Надо делать так, как надо. А как не надо - делать не надо.