Кто как решает вопрос с заявками/сделками?

Страницы: 1
RSS
Кто как решает вопрос с заявками/сделками?
 
Я имею в виду "режим кентавра", когда робот торгует параллельно с юзером. Как обрабатываются возможные конфликты? Мои соображения такие.

0. Главный здесь юзер, у него на торговлю нет никаких ограничений.

1. Скрипт должен быть в куре всех действий юзера (и своих, разумеется) и ловить их по прерываниям OnTrade и OnOrder.

2. Я не уверен, что OnTrade вообще нужно обрабатывать - ведь OnOrder в этом случае всё равно должен придти - по нему, похоже, и можно всё посчитать.

3. Скрипт я вижу "одноразовым" - он не должен посылать заявок по данному тикеру, если не обработаны все предыдущие (пофиг, от робота или от юзера).

4. Сами заявки хранятся у брокера, а не в скрипте и даже не в Квике. С другой стороны, подавляющее большинство заявок (по крайней мере, МОИХ заявок), должны бы обрабатываться немедленно (я выставляю цену покупки или продажи соответствующим образом), и потому о них можно забыть сразу после исполнения, т.е. хранить именно в теле скрипта - от первого до последнего OnOrder.

Одним словом, я не знаю, как всё это дело лучше организовать. А кто-нибудь знает?
 
Ну что, так никто ничего и не посоветует?  :cry: Ведь заявки со сделками - это ЕДИНСТВЕННОЕ, что должно быть в ЛЮБОМ роботе, и потому этот механизм должен быть вылизан до блеска! Вплоть до включения его в язык. Ладно, излагаю то,  что я вижу сам, что собираюсь завтра реализовывать, когда биржа откроется.

1. Скрипт просто посылает заявку на покупку или продажу (sendTransaction) и никак не отслеживает это дело у себя - ведь то же самое может сделать и юзер.

2. О факте существования [зарегистрированной] заявки (от кого бы она ни исходила) скрипт узнаёт по приходу прерывания OnOrder, и тогда регистрирует её у себя. Предполагаем, что заявок может быть несколько на каждый тикер, т.е. это таблица Lua, в которой ключом является код заявки, а значением - код сделки (которое мы вначале обнуляем). В принципе, сюда же можно занести количество лотов и цену - на всякий пожарный.

3. Поскольку прерывания OnOrder, как и OnTrade, здесь приходят "пачками" (заявки у меня обычно вызывают два прерывания, сделки - три), то следующие прерывания OnOrder с тем же кодом просто игнорируем (если это не снятие заявки - в противном случае убиваем элемент таблицы заявок).

4. Я считаю (лучше сказать "надеюсь"), что прерывание OnTrade НЕ МОЖЕТ "потеряться" и придти после того, как пришла информация о другой сделке по той же заявке, а потому держу для каждой заявки только ОДНО поле для (текущей) сделки. Если оно приходит впервые - запоминаю его код по ключу текущей заявки и произвожу по ней действия по изменению своего портфеля и кошелька.

5. Если заявка полностью выполнена (или снята) убиваю заявку в скрипте - все необходимые действия уже произведены.


Кактотаг...
 
Цитата
Владимир написал:
Ну что, так никто ничего и не посоветует?  

Писателю десятка бестселлеров с богатейшим опытом разработки мега-систем в детских игрушках грешно советовать.
Так что уж как-нибудь сам выгребайся.
 
swerg, Ну да ну да... советчиков с растопыренными пальцами, "объяснявших", что 2 и "2" это разные вещи, было как собак нерезаных. а вот если головой подумать требуется... :smile:

Да выгребусь уж как-нибудь. С диалогом выгреб, а с подачей заявок да приходом квитанций и подавно.
 
О, сколько нам открытий чудных!..  :smile:

Syntax error while compiling C:\QUIK\my.lua 237: "goto q"  at line 205 jumps into the scope of local "Tr"

Такого я ещё не видывал нигде и никогда! Ну да, заполняемая таблица заявки у меня описана как
local Tr={
["TRANS_ID"]=tostring(k),
["ACTION"]="NEW_ORDER",
---

Но метка-то, блин, стоит ПОСЛЕ неё! Ладно, сделаем глобальной - авось, сожрёт...  :smile:
 
 
Сделал глобальной в мейне таблицу заявок: Tr={};
Инициализацию изменил, соответственно, на:
Tr.TRANS_ID=tostring(k);
Tr.ACTION="NEW_ORDER";
...
Заявка (по команде из всплывающего меню) прошла и даже исполнилась, "зато" теперь по OnOrder (отлов этой заявки) ругается на "attempt to concatenate a nil value (field 'CLIENT_CODE')". Раньше не ругалась. Я где-то читал, что CLIENT_CODE - необязательный параметр, но без него она у меня заявки не принимала. А теперь чего ей надобно? Может, имя поля какое другое? Может, она мне взад уже не отдаёт код клиента? Нет, не может - раньше ведь работало! Уффф! Большой перекур!  :shock:  
Страницы: 1
Читают тему (гостей: 1)
Наверх