Старатель пишет: Оба графика имеют разные таймфреймы.
Вообще-то , свечи - это нелинейное сжатие исходных данных. Поэтому непонятна сама постановка задачи обработки двух свечных графиков разного тайма. Какую задачу решаете? -------------------------------------- Можно, например, взять оба графика одного тайма(наименьшего) и далее вычислять нужные параметры на любом тайме больше исходного.
так сказать, закрывая тему - на форуме forum.qlua.org - есть вся информация, чтоб создать такого робота "с нуля" и не платя никому деньги. Задумайтесь над этим. Мы все когда-то, что-то не умели.
Так сказать, продолжая тему, на свалке можно найти даже слиток золота, но проблема лишь в умении его найти, в потраченном времени и в отсутствии уверенности в успешном поиске. ------------------------------------------- Поэтому самому сделать можно Все или почти все, но чтобы сделанное Вами работало, как мечталось, надо Либо быть в этом деле спецом, Либо бросить занятие, в котором Вы спец, и обучиться новой специальности. ------------------------------------------- Вам выбирать - либо процесс познания, либо результат мечтаний.
Michael Bulychev пишет: Нет, просто нет такого механизма в Lua. за конкретным объектом должен следить сам пользователь.
Но в луа нет ни функций QLUA, ни возможности создания функции main в отдельном потоке. - Это все сугубо ноу-хау QUIK. Может быть,продолжая развитие данного направления, сделать необходимые механизмы синхронизации потоков для всех пользователей? Я для себя кое-что сделал. Но некоторые вопросы удобнее решить на стороне терминала .
вообще-то тема классов на луа в инете известная Я не вижу смысла городить классы на скриптах - это для любителей ООП в обмен на скорость. Вообще-то, если уж надо что ускорить или спрятать в компактный вид то есть API C плюс C++ про метатаблицы: http://www.lua.org/manual/5.1/manual.html#2.8
Александр Кудрев пишет: Робот на основе пересечений 2 ЕМА с трейлингом. Надо чтобы период МА можно менять.
Если робот должен реально торговать то его стоимость определяется примерно так: Время разработки(в часах)*ЗарплатуРазработчикаВмесяц(можно найти в инете) /200. Да и еще надо написать правильное тех задание. То,что написал Александр Кудрев - это лишь название мечты, а не задание для разработки робота ( типа - хочу велосипед) ------------------------------------------------ Но если будет делать sam063rus то у него - 100 руб.(а нет это я ошибся - это он труд других так оценивает)
Но вроде как выставлен тип - рыночная цена, и цена соответственно 0. Т.е. квик или сервер брокера или кто то там наверху должен съэмулировать рыночную заявку и продать\купить по текущей рыночной цене. или нет?
Полагаю, что это Ваше желание. квик или сервер брокера или кто то там наверху - Не должен.
Старатель пишет: Не знаю, что вы подразумеваете под словом "текущие", но основываясь на том, что очередь находится на сервере (блин, ну почему нельзя было сразу об этом сказать?!), я делаю вывод, что данные (1), (2) и (3) будут обработаны функцией-колбеком GetPrice()
По-моему мнение, есть непонимание общих принципов взаимодействия сервера и клиента и колбеков в терминале. -------------------------------------------- Фактически мы имеем две очереди, а вернее сказать - три: --------------------------------- 1) очередь заявок брокеров на сервере биржи 2) очередь поручений клиентов на сервере брокера 3) очередь колбеков скриптов VMLUA в терминале QUIK на компе клиента, так как все колбеки в одном потоке терминала. -------------------------------- Надеюсь, что объяснил понятно.
от мобильных торговых систем такой способ отличается тем, что торгует мощная система QUIK а не ее обрезанный клон на смартфон Загрузка трафика для смартфона нулевая
------------------------------ Объясняю упрощенно: ------------------------------------------ Основная идея в том, что Вы сажаете скрипт клиент-сервера с динамическим адресом на КВИК на компе дома. и скрипт клиент-сервера - на смартфон или планшет или нотебук --------------------- В результате КВИК сообщит Вам о любых событиях со скоростью передачи информации по интернет. -------------------------- Вы можете тоже послать команду КВИКУ. Все работает быстро и практически бесплатно. ----------------------
Валентин пишет: Здравствуйте. Работаю на фьючах на московской бирже. 1.Параметр type - принимает параметр лимитированная или рыночная. Я так понял рыночной заявки какбы не существует? параметр type не обязателен, Все заявки всегда лимитированные и надо всегда указывать price? Если да, то к чему тогда существует параметр type? 2. Предположим мне необходимо сейчас открыть позицию, выставить стоп и тейкпрофит. Это нормально считать стоп, тейкпрофит на основе параметра close из функции getCandlesByIndex последней свечи (5минутка) или есть какие то лучшие варианты?
1) этот параметр появился еще до того, как стали торговать фьючерсами. ----------------------------------------- 2) Стоп и тайк профит - это условное выставление лимитированных заявок. ----------------------- Что это означает? ----------------- Означает это следующее. Мы открываем позицию и желаем застраховать ее от наступления двух событий: Во-первых - чтобы наши убытки по-возможности не превысили терпимый для нас уровень - это stop-limit Во-вторых - чтобы наша оценочная прибыль превратилась в реальную с терпимым для нас убытком - это take profit ----------------------------- А теперь попробуйте ответить сами на Ваш вопрос. А именно - разве наши желания страховки связаны с close последней свечи на 5 минутках? Очевидно, что, нет, они связаны с затратами на открытие позиции, с величиной допустимых для нас рисков(потерь) и что ВАЖНО - с нашим прогнозом возможного движения рынка. -------------------- А вот при расчете прогноза возможно использование и последней свечи и еще ...надцати предыдущих и движение солнца, цены нефти, выступления президента и т д ------------------------------------------- Надеюсь, что пояснил понятно.
sam063rus, Я попробую дать Вам ответы на Ваши вопросы, хотя ранее я уже это написал, но повторение... ------------------------------------------- Подобные исследования я проводил лет 5 назад. тогда и дискуссия подобная была на форуме. В результате получилось следующее: ---------------------- 1) ТТП - это актуальные значения параметров инструментов ----------------------- Что это означает для Вашей задачи? --------------------- Означает следующее: Если в какую-то секунду произошло 100 сделок , а в результате каких-то задержек(очередь на сервере, задержки каналов связи и т д) мы получаем ТТП в конце этой секунды (пусть даже несколько одновременно поступивших срезов) то в ТТП т е в onParam мы увидим лишь последнюю сделку. -------------------------- Это первая причина, по которой вашу задачу НЕВОЗМОЖНО корректно решить через ТТП --------------------------------------- Вторая причина в том, что ТТП реагирует на любые актуальные изменения параметров инструментов, а не только на совершение сделок. Это приводит к большим нагрузкам на комп при обработке колбека оnParam. И в Вашей задаче к ненужным тратам мощности компа ------------------------------------- третья причина - это то, что в onParam не приходит информация о том, какой именно параметр изменился. Для того, чтобы узнать надо ходить в хранилище. А это очень затратный процесс. ----------------------------------------------- Резюме: Есть лишь одно корректное решение Вашей задачи. - использовать onAllTrade. Основные идеи, как это сделать, я вам написал ранее. ------------------------ Успехов
Ну вот я написал Вам черновик вашего счетчика: он будет считать для всех инструментов Сразу скажу, что это черновик и в нем изложены основные идеи, но детально не отлаживал Дерзайте. ------------------- is_run = true local Count={}
function OnAllTrade(t) local cl,se=t.class_code,t.sec_code; local t1=Count[cl] if t1==nil then t1={}; Count[cl]=t1; end local t2=t1[se] if t2==nil then t2={0;0}; t1[se]=t2; end local d=t.datetime; if d.sec==t2[1] then t2[2]=t[2]+1; t2[1]=d.sec else t2[2]=0; t2[1]=d.sec; end end
function main() while is_run do sleep(100) -- здесь я в своих программах использую Event OS но можно и так оставить end end
function OnStop() is_run = false return 1000 end --------------------
код увидел. Мне читать все топики лень, поэтому я выскажусь, возможно что кто-то уже это сказал. 1) Работа через onParam - самый плохой вариант. Там и хранилище очень тяжелое и данный колбек на каждый чих срабатывает при этом если срез не пришел и не актуальный то он вообще потеряется. Т е через этот колбек Вы обязательно недосчитаетесь сделок когда-нибудь --------------------------------- 2) Поэтому данную задачу полагаю надо решать через onAllTrade По крайней мере решение через onAllTrade будет полным, но возможно что есть и более быстрое но не полное. Поэтому решение через onAllTrade должно быть базовым а остальные, если они будут быстрее надо сравнивать с базовым.
-------------------------------- Поэтому предлагаю написать вариант через onAllTrade и изложить претензии к такому решению (желательно с примерами)
Michael Bulychev пишет: Да, обратно возвращаются только те параметры, которые отображаются в диалоге настроек индикатора.
Вроде бы Ваше утверждение не верно. Так как параметры line в диалоге отображается а обратно не возвращаются. Т е не возращаются любые параметры которые таблицы. ВО КАК!
function OnQuote(class_code, sec_code) поставьте здесь вывод в файл class_code, sec_code, p_classcode,p_seccode_eurrubtom и все будет ясно if class_code==p_classcode and sec_code==p_seccode_eurrubtom then
swerg пишет: Если же надо просуммировать 1000 свечей, да еще дифур решить для вычисления значения индикатора - лучше взять готовое значение из квика, если там есть такой индикатор, это и проще и надёжнее, ибо в своём алгоритме мы еще и наошибаться можем, а квиковый индикатор - хотя бы глазами видишь что он на самом деле считает.
Вот тут у Вас ошибочка Чтобы сложить 1000 свечей надо столько же время сколько для сложения двух. --------------------------------------- Вопрос же поставленный в начале вообще то не имеет однозначного решения Он из разряда "Как стать счастливым"
Валентин пишет: 2. Параметр close показывает цену закрытия свечи (в случае если свечка старая). Если свечка еще активна, параметр показывает текущую цену спроса?
увы,просто это не сделать. ------------------------- у меня алгоритм примерно такой: --------------------- создаю таблицы активных: заявок, стопов, заявок по стопам. Далее в колбеках реализуется обработка этих событий для каждого своя. При этом реализуется обработка заявок по частям а также зависших заявок по стопам Кроме того, исполнение заявки контролирую по изменениям депозитов в соответствующих колбеках. -------------------
все эти галочки появились давным давно, когда актуальным было экономить трафик или(и) память компа. ------------------------ скрипты появились гораздо позже.
sam063rus пишет: ударение на слове: "почти" бо как у каждой сделки на то и есть поле "время" - и скрипты могут на него полагаться На деле же, получается так, что "время можно повернуть вспять". Понятное дело, что "всё можно учесть, отфильтровать, подпилить под собственные нужды" но, когда размер постоянных "допиливаний" и недосказанностей в штатной документации переваливает размер критической массы - не остаётся ничего друго, как давить на "арку", прекрасно понимая, что ничего кроме очередного троллинга от tech support, некоторых разработчиков и банальных троллей-роботорговцев - ждать не приходится.
Не совсем так. ---------------------- Как говорит народная мудрость "После драки кулаками не машут" Работа с ТВС - это прогнозирование по прошлому Т е "махание руками после драки" Но прошлое никогда не повторяется абсолютно точно. Поэтому и для прогноза нет смысла учитывать каждый чих в прошлом. ------------------------ Можно конечно (вернее бесконечно) давить на "арку" или обвинять всех в троллинге , а можно сначала определить решаемую прикладную задачу, а потом выпиливать недостающие детали. ---------------------------------------------------- Предполагаю ( исходя из своего опыта решения задач искусственного интеллекта и прогнозирования), что Вы подменяете задачу прогноза рынков созданием технических средств, полагая, что они, каким-то таинственным образом, позволят Вам решить задачу прогноза. А это еще надо доказать. возможно то, что Вы так упорно пытаетесь запрограммировать - очередной танк для первой мировой. ---------------------------- Романтично, но не практично.
Александр Евстратенко пишет: Вопрос заключался можно ли с помощью каких либо флагов или параметров сделки просто и точно определить условие по которому исполнилось стоплосс и тейкпрофит заявка. Алгоритм, рассматриваемый мной, предполагает различные действия в каждом случае.
Анализ по цене сделки понятен, но усложняет программу и может быть не всегда однозначен при малых таймфреймах (например минутки - стопы относительно близки к тейкпрофиту) и малой ликвидности (это почти все на этих таймфреймах, за исключением RI и Si).
Но если нет простой возможности - значит придется анализировать цену сделки ( и,естественно, срабатывание стоплосс и тейкпрофит заявки должно предполагать контроль и доведение позиции до сделки если этого не произошло).
конечно можно проверить таблицу стоп заявок. Но как я написал ранее, исполнение стоп-заявки может создать активную заявку, которая никогда не исполнится. возможна другая ситуация, когда заявки исполнилась, то сервер брокера не учел еще изменение Ваших лимитов Поэтому полагаю, что проблема не в том , чтобы узнать какое из двух условий верно, а в том чтобы узнать как эти условия отразились на вашей позиции. ------------------------------------ А вот играть в зоне предела быстродействия КВИКА да еще на неликвидных рынках - это конечно создает дополнительно адреналин, но чревато лишь сливом депозита.
Старатель пишет: Если все сделки заказаны до начала торговой сесссии, то в рамках класса (точнее, торговой площадки) сделки поступают в хронологическом порядке. Либо, если один или несколько бумаг одного класса дозаказаны в течение торговой сессии, то после докачки старых данных новые сделки также поступают в хронологическом порядке.
Цитата
sam063rus пишет: синхронизация соблюдается только в рамках одного тикера.
Можете привести примеры конкретных ситуаций, когда в рамках одного класса синхронизация не соблюдается?
Мне думается, что наблюдается некоторая путаница ---------------------------- Есть два принципиально разных режима работы с ТВС. ---------------------------- 1) Так "Если все сделки заказаны до начала торговой сессии," то эти сделки придут одним пакетом или двумя так как они все есть на сервере и он вам их пришлет. Т е это случай работы не в реальном времени. ---------------------------------- 2) Реальное время, когда сделки уходят с биржи на сервер , а потом с сервера на терминал. В этом случае никто ни за что не отвечает. Все идет асинхронно и кто придет первым никто не знает. ( Почти как на ипподроме ) -------------------- Поэтому надо принять как аксиому , что момент прихода информации о сделках не может быть определен до их прихода в терминал. И этот момент прихода не должен нас интересовать как недоступный для прогнозирования параметр. Если строить свои программы исходя из этой аксиомы, то все будет просто и понятно.
s_mike@rambler.ru пишет: стоп лосс 99 тейкпрофит 101 / 2 Выставляется, когда цена равна 100
движение цены:100 -> 101 -> 99
Ваш пример - доказательство моего утверждения: прочитайте еще раз внимательно: ---------------------------- "1) если выставление стопов соответствует их названию, то можно определить 2) по расположению цены сделки предшествующей срабатыванию стопа по отношению к расположению позиции относительно рынка." ------------------------
Теперь разбираем Ваш пример Условие 1) выполнено. -------------------------------- переходим к анализу ситуации. ------------------------- 2) по расположению цены сделки предшествующей срабатыванию стопа по отношению к расположению позиции относительно рынка. ------------------------- Условия Вашего примера не полные. Чтобы принять решение, надо определится еще в некоторых характеристиках рынка. ----------------------------- Сначала пару слов без протокола... Во-первых, предполагается, что чел, который пытается применить данный метод немного понимает в рынке. так как "нет защиты от дурака" ----------------------------- Поэтому считаем, что рынок ликвидный. В этом случае переход от 101 к 99 не может произойти за одну сделку. Поэтому после срабатывания стопа ниже 101 смотрим где была сделка перед срабатыванием Она была выше нашей позиции - т е это тайк профит. ------------------------------------ P.S: Хочу обратить внимание автора топика на следующее. Срабатывание стопа не означает совершение сделки по этому стопу. поэтому сама постановка вопроса изначальна не полная.
sam063rus пишет: квик не предназначен для стабильной роботорговли по определению. бо как любое его обновление может в одночасье угробить весь депозит, за что разработчики только в очередной раз мило извиняться и пообещают исправить прискорбную ситуацию в новых своих версиях, а брокер тем временем скажет, что, цитирую дословно: "... надо учитывать риски". Ну, а биржа, весело назовёт техническим сбоем и забудет об этом, в отличии от всяких SEC - так и не анулировав сделки.
формально Вы правы, но по-существу нет. ------------------------------------------ Правы в том, что "квик не предназначен для стабильной роботорговли по определению" Потому что QUIK - это программа для подачи поручений брокеру (по определению) Хочу обратить внимание на то, что НЕ для подачи заявок на биржу, а лишь поручений брокеру. Это две большие разницы. ----------------------------- Неправы потому что, разработчики никогда (поправьте если я ошибаюсь) не говорили, что делают бесплатный инструмент для создания торговых роботов. Наоборот, периодически подчеркивалось, что VM LUA встроена без изменений, что библиотека QLUA сделана как копия купала. а КУПАЙЛ сделан не для торговли я для отображения бесплатной информации клиентам. т е это некоторе подобие кубиков в детском саду, чтобы было чем заниматься детям. Ну а если из этих кубиков начинают делать что-то большое, то проблема тех, кто это делает, а не тех , кто сделал кубики. ----------------------------------------------------------------------------------------------------------- Ну не умеет трактор летать. Но если очень хочется, то надо осваивать ЧПУ и проектирование самолетов и из трактора делать самолет.
А я верю челу и рад за него. --------------------------------------- sam063rus У меня к Вам вопросик: Зачем делать открытый проект библиотеки ? -------------------------------- Вполне серьезно спрашиваю. Можете сформулировать, что конкретно невозможно реализовать на QLUA с использованием API С? (Оставим в стороне ошибки и зависания). Почему спрашиваю? объясню. --------------------- По-моему мнению, есть недоразвитость графических и диалоговых средств. Но это решается сторонними модулями. В остальном реализуемо любые мечты буратины. ---------------------- Спасибо
Николай Камынин пишет: если выставление стопов соответствует их названию, то можно определить по расположению цены сделки предшествующей срабатыванию стопа по отношению к расположению позиции относительно рынка.
В общем случае это неверно. В большинстве случаев так прикинуть можно, но далеко не всегда.
Поэтому утвердительно ответить на первоначальный вопрос нельзя.
Это голословное утверждение. приведите пример, но соблюдайте указанные мною условия.
1) читаем документацию: OnInit Функция вызывается терминалом QUIK перед вызовом функции main(). 2) Чтобы ничего цикл можно поставить в колбеке будет нечто такое: -------------------------- local ind_old=1 function cd() local size=ds:Size() for i = ind_old, size do Candles[i] = ds:C(i) end ind_old=size end
если выставление стопов соответствует их названию, то можно определить по расположению цены сделки предшествующей срабатыванию стопа по отношению к расположению позиции относительно рынка.
про вечерние сделки могу сказать следующее ( наблюдал это уже давно возможно что-то изменилось) Они приходят потому, что на следующий день у них меняется класс т е они становятся как бы новыми сделками и сервер их обязательно передает в терминал. Когда сортировал все сделки на лету тоже поначалу в этом застрял. Потом поставил фильтр и все стало ОК
позволю предложить следующий алгоритм (так cделал бы сам): ------------------- 1) По спискам формируем таблицу играющих инструментов (критерий на ваш вкус) 2) если я ожидаю, что будут запаздывающие данные, то задаю таблицу неопределенности (т е таблицу памяти N секунд, которые могут корректироваться опоздавшими данными. 3) В колбеке считаем распределение числа сделок по N последним секундам. ------------------------------------ Ну а далее думаю - и зачем я это все посчитал???
1) колбек не может ничего сканировать. по определению -это функция,которая вызывается при наступлении события. в данном случае - это событие - получение новых исторических данных с сервера, которые дописываются к существующим данным. ------------------ 2) Таким образом, колбек позволяет обнаружить приход новых данных, а не ждать их. Осуществлять обработку при поступлении новых данных.
Вот примерно Ваш алгоритм: ------------------------- 1) в корутине должен быть бесконечный цикл,в котором вы посылаете и останавливаете корутину. 2) когда ответ пришел вы активируете корутину и она снова посылает и останавливается. 3) кроме этого должна быть очередь к корутине 4) корутина пускает из этой очереди если очередь пустая то останавливается 5) кроме того должна быть запись в очередь 6) при записи в очередь,если корутина стоит то запускается.