Хех, сколько эпитетов и все мне любимому. Горжусь. Переход на личность, попытка вывода на эмоции. Теперь по закону жанра нужно передернуть и подменить понятия. Долго ждать не пришлось
Цитата
shr540i написал: вот прям черным по белому написано в инструкции что именно так он для нужного типа заявок и делает:
Кому лень идти по ссылке, может и поверить. А если не лениться и почитать дальше, увидим как раз то, о чем велась речь:
Цитата
Помимо них существуют ордера «Стоп Лосс» и «Тейк Профит».
Тейк Профит предназначен для получения прибыли при достижении ценой финансового инструмента прогнозируемого уровня. Исполнение данного ордера приводит к полному закрытию позиции. Он всегда связан с открытой позицией либо с отложенным ордером. Ордер можно установить только вместе с рыночным или отложенным ордером. При проверке условия этого ордера для длинных позиций используется Bid-цена (ордер всегда устанавливается выше текущей цены Bid), а при проверке коротких позиций — Ask-цена (ордер всегда устанавливается ниже текущей цены Ask).
Стоп Лосс предназначен для минимизации потерь в том случае, если цена финансового инструмента начала двигаться в убыточном направлении. Если цена инструмента достигнет этого уровня, позиция полностью закроется автоматически. Такой ордер всегда связан с открытой позицией либо с отложенным ордером. Он выдается на установку брокерской компании только вместе с рыночным или отложенным ордерами. При проверке условия этого ордера для длинных позиций используется Bid-цена (ордер всегда устанавливается ниже текущей цены Bid), а при проверке коротких позиций — Ask-цена (ордер всегда устанавливается выше текущей цены Ask).
Где тут лимитничек выставляется? По какой цене? Как "позиция полностью закроется автоматически", если в стакане нет ничего? Брокер себе заберет? По какой цене? Какой номерок будет у сделки?
Сергей написал: Чем это отличается от торговли на бирже напрямую с участниками?
В этом вся и суть спича моего. Попробую еще раз, подробнее.
МТ проектировался для дилерского рынка, особенность этого рынка - работа по типу "обменника", дилер дает котировку, пользователь с ней соглашается и получается сделка, либо не соглашается и ничего не происходит. Неважно, откуда дилер эту котировку берет, с межбанка транслирует или сам выдумывает, в моменте предложение дилера актуально. Он может, конечно, передумать и дать реквоту, но это скорей исключение, правда ведь? От таких бегут. На этом основана простота работы стопа (тейкпрофиты тоже к стопам отнесем) в МТ. Обратите внимание, стоп на продажу в МТ отслеживает бид (а на покупку - оффер), это значит, когда стоп "сработал", имеется гарантированное предложение от дилера провести сделку по этой цене, и все, что остается, это зарегистрировать факт сделки. Вот отсюда вся простота и наглядность.
В противоположность дилерскому, биржевой рынок ничего не гарантирует, да никто ж с этим и не спорит. Стопов как таковых на мамбе нет, квик их эмулирует со своего сервера, выставляя совершенно обычную заявку при срабатывании стопа и, как минимум, должен позволять указать все допустимые атрибуты генерируемой заявки (и квик позволяет). Давайте предположим, что некто поставил в МТ "биржевой только по рынку" стоп по неликвиду, стоп сработал, вылетевшая заявка съела весь стакан, а дальше МТ что сделает? Бидов нет, куда лить остаток? Брокер себе заберет? А по какой цене? Или вообще не исполнит остаток? Пропадает дилерская гарантия исполнения и пропадает весь смысл таких "простых" стопов, как для юзера, так и для брокера. По-квиковски вопросов нет, стояло "поставить в стакан" - ну и встанет остаток в стакан, стояло "все или ничего" - ну и не исполнится значит, сам хотел, к брокеру какие вопросы.
Еще раз, я не говорю что кто-то "плохой", я говорю, что МТ проектировался под другие условия и там он (надеюсь) хорош. То, что в нем предложено для биржевых рынков, никакой критики не выдерживает в сравнении с тем же квиком. Это мы еще не касались частностей типа облигаций, репо, адресных сделок, айсбергов, мейкерских заявок, исполнения контрактов и многого другого, что в квике есть с рождения (или почти с рождения), а в МТ о таком и не слыхивали. Несомненно, все это можно и в МТ добавить, только получится в результате, видимо, квик. Так же, как если допилить скетчап до автокада, то получится автокад (и не факт, что более удобный, а может и менее).
Относительно юая - в любом случае все допустимые операции он должен позволять сделать, какие из функций "редко нужны", а какие "часто" - это от юзкейса зависит, скажем, банковский трейдер не хотел бы, чтобы от случайного клика вываливалась без подтверждения заявка на пару ярдов, а как раз стаканная дрызготня и пара лишних секунд его интересуют сильно меньше.
Уметь-то он может и умеет в принципе, вопрос кто риски будет на себя брать. Вот у бкс по ссылке выше читаем
Цитата
В режиме биржевого исполнения торговые операции выводятся во внешнюю торговую систему. Операции выполняются по текущим рыночными ценам.
То есть в других режимах не выводятся, логично? Там же и про стопы есть, почитал, как они активируются увидел, а как исполняются - нет, судя по всему, по рынку и лупят. Т.е. хуже, чем в квике. Тогда почему эту игрушку постоянно приводят в качестве примера арке? Красивенький юай перебивает содержательную часть в голове юзера?
Цитата
shr540i написал: раз вы пользуетесь может подскажете?
Не пользуюсь и никогда не пользовался, когда-то (во времена 4) смотрел, что там можно потырить в плане реализации и ничего не потырил в итоге.
Цитата
shr540i написал: как только вы выберете первые 200-300К
Выбрать чужие 300к и снять свои 300к все же разные вещи. Затем, даже если я их выбрал, это еще не значит, что я в них сижу теперь. Тема обширная, не хотелось бы в ней вязнуть.
В принципе изначальный посыл о замене алгоритма расчета цены исполнения был логичен и понятен, но вот эти беспрестанные сравнения квика с МТ меня подбесили и заставили влезть в эту, лично мне фиолетовую, тему.
shr540i написал: А по поводу раутинга заявок в MT, это прям точно известно что он не выводит их на биржу напрямую? И где про это поподробнее можно почитать (вообще про кишки MT)?
Я почитал регламент открывашки (единственного найденного брокера с МТ). В частности про валютную секцию рекомендую.
являются кухнями в полном смысле этого слова. У нас механизм обувания домохозяек (пока еще) по-другому устроен.
Цитата
shr540i написал: Когда в стакане всегдапо 3-4 ляма зеленых (в пересчете) с каждой стороны тяжело продавить рынок на большую сумму
Вы б еще ордерлог пошукали на предмет ГДЕ эти лямы стоят. Вблизи рынка суета мелкими лотами на манер наперсточников, прибрать эту мелочь на секунду спешл фор ю (если вы с хорошим объемом залетаете) не вопрос вообще.
Цитата
shr540i написал: весь сыр бор тут именно о том что у АРКИ нет полноценных лимитных тейк-профитов
У арки есть "стоп-цена по другой бумаге", которая как раз является полноценным лимитным тейк-профитом. Вот эта штука с тралом, которую тут все поносят под именем тейк-профит, она вообще непонятно зачем существует и моя б воля я б ее вообще убрал из квика.
МТ это дилерский рынок, вы в курсе? Дилер вам дает котировку, вы с ней соглашаетесь или нет. И стопы и тейкпрофиты там - это когда вы заранее соглашаетесь на сделку "если такая котировка будет". А мамба это биржевой рынок, там вам никто ничего не должен, ни арка, ни брокер, ни сама мамба, вы торгуете с другими участниками, не с дилером и даже не с биржей, эти другие участники вам могут показать тик по 1000 и подставить сразу после него бид по 10, вы лупанете по рынку и продадите за 10, и это правильно. Абсолютно без разницы, произойдет это "вручную" или автоматически как результат исполнения стопа или тейкпрофита. Арка ничего с этим сделать никогда не сможет, сколько б тут песен о главном ни пелось.
Боюсь те, кто этим смог бы грамотно воспользоваться, могут это сами и сделать, как автор идеи, в частности. Всем остальным буратинам это не нужно и вредно.
Я не делаю такого вывода. Чтобы понятно было, давайте разделим вопросы. Во-первых, продублировать прямой доступ к бирже мимо мамбовской бухгалтерии арке никто не позволит, тут же у мамбы найдется партнер полояльнее. То есть вот эти чудеса сразу откладываем в сторону, нужно оно или нет, его не будет (бесплатно по крайней мере), все, вопрос закрыт. Во-вторых, я не зря спрашивал, какого рода апи к клиенту вы хотите видеть. Варианта два на самом деле, либо квик затаскивает себе в процесс вашу длл и без особого оверхеда дергает колбеки на разные события, либо маршалит эти вызовы в ваш процесс. Первое в квике есть в двух видах - плагин апи (затаскивает нативную длл, непубличный) и луа (затаскивает скрипт, а уж он может нативную длл затащить). Второе это как раз вот этот обсуждаемый ужас с out-of-process com, да еще не дай бог с диспинтерфейсами, как в упомянутом экселе. Это просто своими руками взять и хороших тормозов добавить всему клиенту (а не только трем юзерам, которым этот апи нужен). Если вам мое мнение интересно, не нужно плодить зоопарк интерфейсов, надо допилить луа до ума и всем будет хорошо, оверхед там небольшой, нативный код поддерживается, маршалить в свой процесс можете как угодно, хоть тот же ком-сервер в своей длл делайте, а кто-то хочет пайп, а кто-то хочет сокет, а кому-то и из квика нормально.
Дохнет сервер в конце торгового дня, квик подключается на другой, очистка сессии, перезалив всей ТВС за день, тик за тиком дергается ваш апи, на каждом тике маршалинг и ожидание обработки на вашей стороне. Рано или поздно вы, конечно, догоняете сессию, главное чтобы она не закончилась к тому моменту.
Роман написал: Скрипт говорит, что работает, но соединение автоматом не восстанавливает при обрыве или ручном отключении.
Скрипт и не должен сам по себе инициировать подключение, он ждет появления окна авторизации, заполняет логин и пароль в нем и жмет кнопку ок, ничего более. Если вы руками отключились, зачем-то вы это ведь сделали, как же скрипт за вас решать будет. Жмите снова подключение, появится окно авторизации и через таймаут автоматически исчезнет и квик начнет подключение (таймаут нужен, чтобы вы могли отменить подключение, если случайно не туда кликнули). Чтобы автоподключение происходило при запуске квика, в нем есть настройка "устанавливать соединение". После разрыва связи должна сработать ваша настройка восстановления, если не срабатывает, то потому, что до 0 стоит, поменяйте на 23-59-59.
Optimus1 Optimus1 написал: Записать в есель эти же 450 тыщ строк - занимает не более 5 секунд.
Одним вызовом записывали, сразу все в safearray и вперед в эксель, да? В реале-то оно не так работать будет.
Цитата
Optimus1 Optimus1 написал: В чем его не реальность то !? И чем api не нравится и кому ?
Люди берут хорошую копейку за доступ, а вы предлагаете воткнуть точно такой же апи в бесплатный квик. Действительно, кому бы это могло не понравиться, теряюсь в догадках.
Optimus1 Optimus1 написал: Я так понимаю (возможно я жесЦко ошибаюсь ?), но trans2quik - только для выставления заявок.
Не ошибаетесь. Значит, апи это trans2quik с кучкой дополнительных функций, так? Тогда давайте "желать" этих функций в trans2quik, а не предлагать сделать из квика нетинвестор (или метатрейдер, или еще что-то), это все же более реальный сценарий (насколько вариант с полноценным апи в бесплатном рабочем месте вообще реален, у мамбы свой апи есть и ей такой расклад очень не понравится).
Цитата
Optimus1 Optimus1 написал: А первоначально то, как эту ТВС выгрузить из Quika ?
Да неважно как, хоть "сохранить в текстовый файл", вопрос в том, чтобы все эти 3-6 миллионов строк потом в эксель напихать через ком. Даже не предлагаю время засекать, бо эксперимент закончится через диспетчер задач скорей всего.
Optimus1 Optimus1 написал: Не совсем понял, что вы имели ввиду под выгружать ТВС через ком ? Вы имели ввиду выгружать ТВС встроенную функцию quik через dde в ексель ?
Создать книгу и напихать туда всю твс через ком апи, хоть бы из текстового файла.
Был же нетинвестор с комом, чет никто им не пользовался, так и сдох, странное дело. А ежли в эксель ТВС через ком загружать, через неделю-то он отвиснет, не пробовали?
Optimus1 Optimus1 написал: Именно так лучше и делать, без всякий тупых костылей в виде Qlua.
Именно так и делали, когда еще не было никакого qlua даже в проекте. Не только лишь для всех занятие, да и кто думает, что уж точно для них, тем определенно еще подумать стоит.
Как-то плохо вы искали, тут прям на форуме их вагон и тележка, совсем недавно баттл был, кто первый раздаст свое поделие безвозмездно то есть даром. Вот для 8.5 и выше. В луа-файл свои логин-пароль вписать.
foobar написал: Текущее значение этого параметра у меня равно 1, т.е. мы хотим видеть обновления таблицы не чаще 1 в сек.
Если ничего не путаю, параметр содержит таймаут, в течение которого квик ожидает WM_DDE_ACK от сервера и при неполучении его в указанное время выбрасывает ошибку "сервер слишком загружен". Каким образом это может быть связано с периодом выдачи снэпшота таблицы - не понимаю, ответу подивился.
Позанудствую. Утечка - это когда проблемную вкладку закрыли, а память не освободилась (этот сценарий и не описан). Если таки освободилась - это не утечка, а повышенный расход, тоже плохо, но причины другие.
Любопытства ради небольшой тест, тксть поверим теорию практикой (вариант с длл писать лень)
Код
function add_global(a, b)
return a + b
end
local function add_clocal(a, b)
return a + b
end
function main()
local count = 10000000
local function toftime(a)
local aa = a.hour
aa = aa * 60
aa = aa + a.min
aa = aa * 60
aa = aa + a.sec
aa = aa * 1000000
aa = aa + a.mcs
return aa
end
local function add_flocal(a, b)
return a + b
end
-- perform 'count' function-level function calls
local sum = 0
local tm = os.sysdate()
for i = 0, count - 1 do
sum = add_flocal(sum, i)
end
local tflevel = toftime(os.sysdate()) - toftime(tm)
-- perfrom 'count' chunk-level function calls
sum = 0
tm = os.sysdate()
for i = 0, count - 1 do
sum = add_clocal(sum, i)
end
local tclevel = toftime(os.sysdate()) - toftime(tm)
-- perform 'count' global function calls
sum = 0
tm = os.sysdate()
for i = 0, count - 1 do
sum = add_global(sum, i)
end
local tglobal = toftime(os.sysdate()) - toftime(tm)
-- perform 'count' inlined pseudocalls
sum = 0
tm = os.sysdate()
for i = 0, count - 1 do
sum = sum + i
end
local tinline = toftime(os.sysdate()) - toftime(tm)
-- show results
message("Function call overheads:\n" ..
" function-level function: " .. (tflevel - tinline) / count .. "us\n" ..
" chunk-level function : " .. (tclevel - tinline) / count .. "us\n" ..
" global function: : " .. (tglobal - tinline) / count .. "us\n")
end
Иван Ру написал: Но если я читаю бид-аск 20 раз за секунду, по 10-ти инструментам, позволительно ли это делать в отдельной функции?
Вызов функции не то чтобы тяжелая операция. Грубо ориентировочно наброшу цифр.
Если функция находится в длл, луа перед ее вызовом снимает лок, а после - снова захватывает, это самая тяжелая часть вызова (самого по себе вызова, не тела функции). Пара EnterCriticalSection/LeaveCriticalSection занимает порядка 100нс, новее железо - меньше. Всем остальным оверхедом вызова в сравнении с этим можно пренебречь, т.е. время на порядок меньше. Ок, чтобы получить оверхед в одну секунду, надо сделать порядка 10 миллионов вызовов функций из длл в одном цикле без слипов и прочих ожиданий.
Если функция написана на луа, лок не выпускается и остается только то, чем мы выше пренебрегли. Предполагая разницу на один порядок, получим, что секундный оверхед будет достигнут на порядка 100 миллионах вызовов.
Иван Ру написал: - Целесообразно ли минимизировать использование колбэков и как?
Это вопрос архитектурный. Варианта два.
Первый - это event-driven архитектура, тут колбеки движущая сила всего, пришел колбек - это событие, вы это событие как-то обрабатываете, если обработка предполагает что-то тяжелое - вы только запускаете операцию и возвращаетесь из колбека, а о ее завершении вам сообщит другой колбек, уже ваш собственный.
Второй это поллинг, ваш мейн шаг за шагом следует какому-то плану. Где ему нужны какие-то данные, он их заказывает и ждет ответа, где нужно что-то отправить он отправляет и ждет ответа. Уже по описанию видно, насколько шустро оно будет работать, хотя есть, несомненно, задачи, в которых и так сойдет. Другой недостаток - вы видите какое-то событие только в тот момент, когда решили на него посмотреть, а оно может уже часа два как произошло. Например, пока вы считали что-то и готовили транзакцию, квик потерял соединение, но вы еще об этом не знаете и продолжаете готовиться к своей сделке века, которая закончится ничем, бо нет коннекта. Утрирую для наглядности.
Третий вариант это как тут часто в вопросах попадается, когда смешали все в кучу и получилась, естественно, куча.
nikolz написал: Я вам предлагаю для примера посмотреть алгоритм БПФ либо нейронной сети
Не спорю, тяжелая вычислялка, пригодная для распараллеливания, от потоков выиграет. Но такое на луа писать несколько самонадеянно, даже и в виде длл. Если данные в виде луа-таблицы, мы больше потеряем на доступе к ней, тут нужны плейн массивы. В сухом остатке на долю луа остается периодически подбрасывать новые данные по мере их приезда с сервера, а для этого много потоков не нужно и даже вредно, сеть-то сама по себе труба в одну нитку. Равно и в обратную сторону, можно натыкать миллион транзакций и они встанут в очередь на сокете и ничего более. В данном случае асинхронность лучше многопоточности, а у этого подхода есть ограничительный фактор - целевая аудитория может ниасилить.
nikolz написал: Каждый скрипт условно можно разделить на три части1) действия вне колбеков и функции main - это отдельный поток и VM Lua2) функция main каждого скрипта - это отдельный поток и VMLua3) вызов и исполнение функций колбек осуществляется в одном основном потоке термина.
Не совсем оно так, стейт для тела скрипта и колбеков один и выполняется в основном потоке квика, стейт для мейна второй и выполняется в специально для него созданном потоке. То есть ваш п.1 лишний, нет отдельного стейта для тела.
Ваши мысли насчет 128 ядер это из разряда давайте загрузим проц бесполезной работой, чо он простаивает-то. В любом случае ваши 100500 потоков будут сериализоваться на доступе к общим ресурсам, т.е. в основном (в таком количестве) они будут крутить спинлок. Для примера предлагаю прогу из directx sdk, где можно отрисовать одно и то же либо одним потоком, либо многими. Запустите и убедитесь, что проц оно жрет в N раз больше, а fps растет процентов на 5.
_sk_ написал: Думаю, лучше сделать так: если пользователь изменил значение параметра, оставив его целым, всё хорошо, а если пользователь хочет поставить дробное значение параметра, пусть ставит, после чего происходит преобразование в тип float.
Исхожу из такого соображения: если автор индикатора хочет (только) целое, он инициализирует целым и тем самым отрезает юзеру возможность вбить что-то нецелое. Пример: для ema можно использовать дробный период, для sma - нельзя. Пусть во втором случае юзер вбил дробное число, как ему теперь посигналить, что число будет округлено до целого? Он же ж останется в уверенности, что у него sma с периодом 3.14, а она с периодом 3. С целым нет проблем, он просто не сможет вбить 3.14 и это сподвигнет его задуматься, то ли он творит.
_sk_ написал: Да ещё и регрессы в тех местах, которые не ожидали увидеть (см. второе сообщение темы).
Строго говоря это не баг, а наоборот в соответствии с пожеланием не то чтобы давним. Вот поэтому и приходится влезать в некоторые темы и пытаться доказать некоторым пожелателям, что их некоторые пожелания не так уж хороши, как им кажется. Ну в этом конкретном случае я скорее за, оно так логичнее.
В традиционное "раньше было лучше" внесу диссонанс: давняя проблема с неочисткой памяти при ошибке в OnInit наконец решена. Четенько все подчищается. Ура товарищи и спасибо за исправление.
Резкое увеличение размера alltrades.dat при переходе на Quik v.8, Размер файла alltrades.dat при переходе c Quik v.6 на Quik v.8 увеличивается более, чем в 1,5 раза при том же количестве сделок
Резкое увеличение размера alltrades.dat при переходе на Quik v.8, Размер файла alltrades.dat при переходе c Quik v.6 на Quik v.8 увеличивается более, чем в 1,5 раза при том же количестве сделок
Во-первых, многие поля стали 64-битными. Во-вторых, зарезервировали больше места под каждый тик. На вопросы зачем да почему ответить может только арка, если захочет, но обсуждать формат они вряд ли станут, а в общих чертах не знаю, что можно добавить к сказанному.
Если архивируете, сжатие в зип или в рар может существенно уменьшить размер, раз эдак в 10. Если жаль диска в течение дня, можно попробовать включить сжатие непосредственно системой (в свойствах файла атрибуты - другие - сжимать содержимое для экономии места), но это теоретически тормозов добавит, практически не пробовал вообще.
nikolz написал: мешает передать сообщение по схеме pоint to point
динамический айпи как минимум с одной стороны, а как правило - с обеих. Если на проводной стороне еще можно купить статический, то на стороне мобилы вряд ли. Времена честных интернетов давно прошли, теперь это телевизор с фидбеком.
Активные инструменты Вечерней сессии основного рынка Мосбиржи, Непонятно как отслеживать инструменты вечерней сессии, они никак не выделяются на фоне неактивных!
Действительно. И getSecurityInfo тоже. Получается, что ответ с анекдотом - вариант раз, ответ с "читаем спецификацию" - вариант два. Как ни странно, гипотетический вариант три - "качаем листинг напрямую с мамбы" - не сработает, там тоже (в общем листинге) базового нет. Видимо, квик сам оттуда и тащит.
A117 написал: И выравнивание в столбце по запятой.
Надо заметить, что выравнивание будет удобно читаться только при моноширинном шрифте, типа courier или consolas, с пропорциональными шрифтами будет все равно кашеообразно, даже может быть хуже, чем без выравнивания. Дефолтный виндовый segoe - пропорциональный.
local run = true
local cls = 'SPBFUT'
local sec = 'RIU0'
function OnStop()
run = false
end
function main()
if not Subscribe_Level_II_Quotes(cls, sec) then
error('Subscription failed')
end
while run do
local t = getQuoteLevel2(cls, sec)
if t then
message('bid: ' .. t.bid_count .. '\nask: ' .. t.offer_count)
else
message('getQuoteLevel2 failed')
end
sleep(1000)
end
Unsubscribe_Level_II_Quotes(cls, sec)
end
- все ок. Что-то локально-брокерское может быть, в связи с нововведениями?
Nikolay написал: брать через API биржи HTTP запросом напрямую
Если упустили новость, теперь можно https запросом, удерживаем соединение и сильно выигрываем в скорости при массированных запросах. Раньше мамба кип-элайф не поддерживала, создавать новое соединение на каждый запрос было грустно. Ну и логин-пароль как-то приятнее так посылать, ежли оно у кого есть конечно.
Старатель написал: Приходится либо снимать дубликаты, либо работать в main с неопределённой задержкой.
Есть еще вариант пульнуть фейковый стоп по нереальной цене и подождать ответа, тксть протолкнуть им. И снять тут же, конечно. Фактически сымитировать тот самый флаг "ответ приехал". Но датасорец, конечно, так не протолкнешь.