nikolz (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 ... 46 47 48 49 50 51 52 53 54 55 56 ... 80 След.
Проблема с оперативной памятью Lua на Windows Server 2019
 
 какие индикаторы Вы отображаете?
Проблема с оперативной памятью Lua на Windows Server 2019
 
Цитата
Руслан написал:
Похоже, я не разобрался с тем, как прикреплять изображения, так что и их скину в файлообменник  Изображения
1) Посмотрите в Заказ данных ->поток котировок: инструментов выбрано, параметров выбрано.
2)  Попробуйте следующее:
- посмотреть сколько памяти занимает квик;
-свернуть все окна в терминале квик;
-  посмотреть сколько памяти занимает квик.
проскальзывание рыночных заявок на открытии
 
Цитата
Алексей написал:
Цитата
nikolz написал:
И еще..Если Вы послали заявку по рынку то Вы ее в стакане не увидите.  Как же Вы ее видите в стакане -поясните.
Очень просто. Это уже обсуждалось. Рыночные заявки превращаются в лимитки при невозможности их исполнить по рынку (когда превышен порог проскальз-я). Не говоря о том, что на фортсе нет рыночных заявок вообще. По поводу тормозов на сервере- на плазе при прямом подкл-ии та же история была , пока вручную не увеличил отступ от лучшей цены на 1000 пунктов (на другом приводе, не на квике). Из руководства:
"Если в ходе резкого движения рынка отступа в 2 тика от лучшей цены будет недостаточно, заявка
останется в стакане. Для повышения вероятности ее исполнения (за счет ухудшения ее цены) следует в
настройках соответствующего действия увеличить в отрицательную сторону значение параметра «Отступ
от исходной цены» для обеих операций."
 Возможно, я неправильно выразился- говоря "проскальз-е" -это все таки относ-ся к стоп заявкам.  
Т е вы выставляете не по рынку, а с фиксированной ценой.
относительно фьючерсов.
Вашу заявку как правило выкидывает не сервер биржи по причине выхода цены за границы, а сервер брокера - по причине нехватки у Вас средств для выставления заявки такой цене.
------------------  
Проблема выхода за диапазон цены решается очень просто - берите существующую цену в стакане .  Диапазон цен в стакане всегда внутри допустимых цен, а геп цены никогда не доходит до края стакана
так как его раньше отбивает маркет мейкер.
-----------------  
Проблема нехватки денег на счету - это проблема Ваша, и а не брокера.
проскальзывание рыночных заявок на открытии
 
Цитата
Алексей написал:
Цитата
nikolz написал:
Вы что-то путаете, откуда проскальзывание на бирже?заявка по биржевой цене даже теоретически не может висеть в стакане биржи без исполнения, так как она будет в куче первых.
В куче первых в 7.00.00.000 ))) Это мечта. Вы даже не представляете насколько она последняя, что даже не исполняется.. не об что. Точнее есть об что, но квик считает что это слишком уже не выгодная цена. Вот я и хочу это подкорректировать, если возможно конечно.
И еще..
Если Вы послали заявку по рынку то Вы ее в стакане не увидите.  Как же Вы ее видите в стакане -поясните.
проскальзывание рыночных заявок на открытии
 
Цитата
Алексей написал:
Цитата
nikolz написал:
Вы что-то путаете, откуда проскальзывание на бирже?заявка по биржевой цене даже теоретически не может висеть в стакане биржи без исполнения, так как она будет в куче первых.
В куче первых в 7.00.00.000 ))) Это мечта. Вы даже не представляете насколько она последняя, что даже не исполняется.. не об что. Точнее есть об что, но квик считает что это слишком уже не выгодная цена. Вот я и хочу это подкорректировать, если возможно конечно.
предположу, что у Вас не исполняется по причине тормозов на сервере брокера.
-------------------  
Поясняю про биржу
Если брокер Вашу заявку отправил по рынку, то сервер биржи при ее получении поставит в очередь по рынку
Это очередь удовлетворяется сервером из очереди предложений т е пришел и получай что есть.
Проблема с оперативной памятью Lua на Windows Server 2019
 
Цитата
Руслан написал:
Здравствуйте!   Использую коннектор QUIKSharp для соединения своего робота на C# с Квиком. До того момента, когда я решил арендовать сервер под Windows Server 2019 и запустить все там, никаких проблем не было. Периодически менялись версии терминала по мере обновления у брокера, но все замечательно работало около полугода или больше. Неделю назад заказал сервер, установил туда Quik версии 9.2.3.15, закинул коннектор, робота, все запустил, и спустя какое-то время система стала сильно тормозить. Обнаружил, что Квик занимает слишком много оперативной памяти, причина оказалась в скрипте коннектора QUIKSharp. Поднял память сервера с 3 до 4 Гб, но он занимает все, что найдет, и сервер падает.   Сначала думал, что дело в роботе, потом думал, что дело в коннекторе, но все и по сей день без нареканий работает на двух компах под Windows 10, даже если не выключать все несколько суток, кстати и сам только что запущенный терминал с одинаковыми настройками и без скрипта на них занимает раза в два меньше памяти (около 150 - 250 Мб против 500 на сервере). Все происходит независимо от подключения робота, хотя с ним процесс протекает быстрее, просто в определенный момент (иногда почти сразу, иногда спустя пару минут) память, используемая скриптом перестает освобождаться и дальше он только разрастается.  Повторюсь, на Win10 никаких проблем нет. Прошу помочь и подсказать, какое отличие серверной машины или же операционки Windows Server 2019 от стационарного компа или Windows 10 приводит к тому, что на первых QLua перестает справляться с уборкой мусора. Может, не установил туда что-то или не настроил?
Н-да, к сожалению телепатией не обладаю.
Если хотите помощи, то выкладывайте для начала что и сколько занимает, как загружен процессор, сколько у вас свободной памяти, когда квик не работает.
Как вы запускаете сборку мусора. Как и что освобождаете из ненужного.
Попробуйте для начала отключить все бумаги и особенно опционы, которыми не пользуетесь.
проскальзывание рыночных заявок на открытии
 
Цитата
Алексей написал:
На открытии не исполняются рыночные заявки выставляемые ботом. Остаются висеть в стакане. Так понимаю дело в ограниченном проскальзывании установленном по умолчанию. Какое задано проскаль-е и возможно ли его регулировать НЕ НА ОДНОЙ заявке (ордере), а в быстром стакане, т.е сделать по умолчанию на постоянной основе. И в МТ5 тот же вопрос, если кто знает. Спасибо.
Вы что-то путаете, откуда проскальзывание на бирже?
заявка по биржевой цене даже теоретически не может висеть в стакане биржи без исполнения, так как она будет в куче первых.
Экспорт из Квика в Метасток
 
Смешно,
c Метастоком на биржу   - это как с трехлинейкой,
винтовкой Мосина образца 1891 года,  ходить на военные учения.
------------------------------  
"А еще передайте Царю, что у них ружья кирпичом не чистят."
.
 
Некорректная работа Quick и ФПСУ Амикон
 
Цитата
Алексеевич написал:
Приступил к работе и обнаружил две ошибки .В окне графика не могу переместить цену сделки, мышка не цепляет линию  сделки. Вторая ошибка - из стакана не могу выставить заявку с помощью F2 и  F6.
Для выставления заявки из окна мышкой надо нажать две кнопки "два пальца вверх" и "ладонь вверх"
Для выставления из стакана надо настроить опции стакана.
Котировки с более точным временем
 
Цитата
Михаил Филимонов написал:
Добрый день!
Есть ли в КВИК таблица с ASK, BID и LAST со временем точнее секунды?
Тиковый график не решает вопроса с ASK и BID.
------------------------
ASK и BID это данные из стакана, поэтому просто фиксируйте их время в стакане.
-----------------------------------
В скрипт индикатора приходят все Last вне зависимости от интервала графика.
Поэтому в реальном времени просто фиксируйте время очередного Last в скрипте.
-----------------------
Чтобы получить точное время биржи (погрешность не более 0.01 сек) синхронизируйте свой комп с сервером точного времени
и настройте параметры ОС соответственно.
-----------------------------
Учтите, что реально полученные вами данные будут запаздывать относительно времени биржи примерно от 0.1 до 10 сек.
=================
И будет Вам счастье.
Программа закрывается при переключении графика на фьючерс SBRF
 
отключите опционы в Заказе данных.
-----------------  
Бесплатный совет начинающим.  
Не трогайте опционы, даже не глядите в их сторону - целее будет депозит.
Программа закрывается при переключении графика на фьючерс SBRF
 
Цитата
Ольга написал:
у Вас открыты опционы.
Попробуйте открыть только фьючерсы и только Сбер.
Проверьте свободное место на диске и свободную память.
Средневзвешенная цена
 
https://treidinglike.blogspot.com/2019/03/blog-post_976.html
Средневзвешенная цена
 
Цитата
Рустам написал:
средневзвешенную цен
https://ru.tradingview.com/support/solutions/43000502018-volume-weighted-average-price-vwap/
https://www.moex.com/s1194
Рисование прямой линии тренда
 
Цитата
AlexInTrade написал:
Просьба добавить возможность рисования  прямой   линии тренда  (инструмент "гориз.линия" уже есть, но он рисует на весь график). Например, при помощи удержания при рисовании клавиши Alt.

Это уже 100 лет назад реализовано в TradingView, 100 раз об этом писали на этом форуме, но кроме обещаний ничего не сделано...

Неужели это так сложно реализовать и сделать счастливыми тысячи ваших пользователей? Сделать вашу программу более удобной, о чем давно просят?
До этого момента думал, что счастливыми тысячи пользователей квика делает прибыль от игры на бирже,
ан, нет - прямая линия -всего-то.
------------------------  
"Скажите, Шура, честно, сколько вам нужно денег для счастья?"
Программа закрывается при переключении графика на фьючерс SBRF
 
Цитата
Ольга написал:
С чем может быть связанно принудительное закрытие квика при каждом переходе на фьючерс SBRF?? С квиком работаю с 2017г. Такая ошибка впервые. Таблица котировок подключена к графику, все бумаги списка открываются нормально, но доходит до сбера (фьючерс) - квик сворачивается((( Снова запускаю программу... Пробовала создать отдельный график для фьюча - то-же самое((  
попробуйте сделать так:
1) уберите все самодельные индикаторы из папки индикаторов .
2) перезагрузите квик.
32)  обновить данные. Перед обновлением сохраните файлы истории , чтобы потом восстановить, если надо.
Некорректное отображение истории на графике у разных пользователей., У разных пользователей, по разному отображается история на графике
 
Цитата
Алена написал:
Цитата
nikolz написал:
 
Цитата
Алена  написал:
Добрый день. Столкнулась с проблемой, есть 2 разных квика, один установлен давно, второй установлен недавно. Два разных пользователя. На конкретном примере: акции компании ММК, на таймфрейме М15 у пользователя (старый квик) история отображается с сентября 2020 года, у второго пользователя (новый квик) история отображается с августа 2021. Это колоссальная разница, и для анализа инструмента очень критична. Подскажите, как можно расширить историю, и подгрузить более старые данные. Перезаказ данных уже делала, и это не помогло. Заранее благодарю за ответ.Отправитель письма запросил подтверждение о прочтении письма.
 все верно.
Если Вы не обновляли данные, то история хранится с момента первого обращения к данной бумаге.
Если есть желание, то скопируйте файлы истории из квика  первого в квик второго и будет Вам одинаково.
 
Цитата
Спасибо, а если нет возможности скопировать данные со старого квика, есть ещё какой то способ их найти?
Странно, почему у Вас нет возможности скопировать эти файлы из папки квика.
----------------------
Для квика другого способа нет, так как разработчики зажали формат этих файлов.  
--------------------
Но , если поставите например Amibroker, то сможете в него загрузить историю любой длины.  
тейк профит, отступ от мах, мин.
 
Цитата
garland написал:
Цитата
nikolz написал:
 
Цитата
garland  написал:
 
Цитата
 Alexey Ivannikov   написал:
   
Цитата
  garland    написал:
Здравствуйте!
На СПб Бирже иногда нельзя сделать, чтобы заявка уходила просто в рынок. То отвергнута по лимитам, то еще что. В итоге остаешься с бумагой вместо того, чтобы сработал стоп или тейк. Брокер (ВТБ) говорит: мы все отправили, это биржа отвергла. Но нам -то что делать? Пробовал выставлять и через "цена по другой бумаге" тоже. Получил (при тейке) сообщение, что заявка не прошла контроль достаточности средств.
Все время без гарантии, т.о., что заявка твоя сработает.
   Добрый день.

Если стоп-заявка успешно исполняется - значит вопрос не к функционалу стоп-заявок (что обсуждается в данном разделе форума), а к тому, почему не исполнилась выставленная в результате срабатывания стопа обычная лимитированная заявка. Если заявка "не прошла контроля достаточности средств" - это вопрос к брокеру (если, конечно, средств у клиента действительно хватало). Если заявка была отвергнута биржей (статус "снята") - надо обращаться с вопросами на биржу. Раз заявка не принимается сервером брокера или самой биржей - то при чём здесь то, как именно она выставлялась, через срабатывание стопа или как-то ещё?
  Здравствуйте!
Согласен. Но брокер предлагает для достижения нужного результата: поставьте заявку так-то (например, чтобы был нормальный рыночный стоп - через "цена по другому инструменту"). Брокер заявки на биржу отправляет, но на СПб бирже есть "динамические лимиты", которые, как я догадываюсь, и мешают исполнить заявку при резком движении цены. В итоге ты остаешься с бумагой, хотя брокер формально регламент исполнил (заявку отправил). Понятно, что биржа не будет менять способ работы из-за одного моего обращения. Таким образом, мне остается только пытаться понять, какой именно тип заявки ставить, чтобы стопы гарантированно исполнялись по цене рынка (не космический, в общем-то запрос). Поэтому и прошу совета у сообщества пользователей Квик.
Спасибо.
 Когда использовал стоп-заявки, то  делал так:
Стоп заявку надо ставить не по рынку, а на конкретную цену.
При резком движении рынка, такая стоп-заявка превращается  в заявку.
Робот отслеживает такую ситуацию и передвигает данную заявку таким образом, чтобы при отскоке она закрыла позицию.
Спасибо, тоже думал об этом. Поставить настолько низкую (высокую) цену, что маловероятно, что цена дойдет до неё даже при резком движении.
Вы делали это на СПб бирже? Мне кажется, такая заявка как раз может быть отвергнута как не попадающая в их "динамический коридор".
Стоп заявку я ставил не с потолка, а по уровням сопротивления и поддержки как правило это всегда в диапазоне лимитов.
Но замечу следующее.
Стоп заявка - это отложенная заявка, условие которой проверяет робот брокера.
Если Вы делаете своего робота, то имеет смысл отказаться от стоп заявок вообще, так как Ваш робот, в отличии от человека, постоянно следит за ценою и принимает решение о покупке или продаже.
Более того, если Вы разместите робота в дата центре, то стоп-заявки вообще потеряют смысл, так как ваш робот будет быстрее чем робот брокера принимать решения.
тейк профит, отступ от мах, мин.
 
Цитата
garland написал:
Цитата
Alexey Ivannikov написал:
 
Цитата
garland  написал:
Здравствуйте!
На СПб Бирже иногда нельзя сделать, чтобы заявка уходила просто в рынок. То отвергнута по лимитам, то еще что. В итоге остаешься с бумагой вместо того, чтобы сработал стоп или тейк. Брокер (ВТБ) говорит: мы все отправили, это биржа отвергла. Но нам -то что делать? Пробовал выставлять и через "цена по другой бумаге" тоже. Получил (при тейке) сообщение, что заявка не прошла контроль достаточности средств.
Все время без гарантии, т.о., что заявка твоя сработает.
 Добрый день.

Если стоп-заявка успешно исполняется - значит вопрос не к функционалу стоп-заявок (что обсуждается в данном разделе форума), а к тому, почему не исполнилась выставленная в результате срабатывания стопа обычная лимитированная заявка. Если заявка "не прошла контроля достаточности средств" - это вопрос к брокеру (если, конечно, средств у клиента действительно хватало). Если заявка была отвергнута биржей (статус "снята") - надо обращаться с вопросами на биржу. Раз заявка не принимается сервером брокера или самой биржей - то при чём здесь то, как именно она выставлялась, через срабатывание стопа или как-то ещё?
Здравствуйте!
Согласен. Но брокер предлагает для достижения нужного результата: поставьте заявку так-то (например, чтобы был нормальный рыночный стоп - через "цена по другому инструменту"). Брокер заявки на биржу отправляет, но на СПб бирже есть "динамические лимиты", которые, как я догадываюсь, и мешают исполнить заявку при резком движении цены. В итоге ты остаешься с бумагой, хотя брокер формально регламент исполнил (заявку отправил). Понятно, что биржа не будет менять способ работы из-за одного моего обращения. Таким образом, мне остается только пытаться понять, какой именно тип заявки ставить, чтобы стопы гарантированно исполнялись по цене рынка (не космический, в общем-то запрос). Поэтому и прошу совета у сообщества пользователей Квик.
Спасибо.
Когда использовал стоп-заявки, то  делал так:
Стоп заявку надо ставить не по рынку, а на конкретную цену.
При резком движении рынка, такая стоп-заявка превращается  в заявку.
Робот отслеживает такую ситуацию и передвигает данную заявку таким образом, чтобы при отскоке она закрыла позицию.
Некорректное отображение истории на графике у разных пользователей., У разных пользователей, по разному отображается история на графике
 
Цитата
Алена написал:
Добрый день. Столкнулась с проблемой, есть 2 разных квика, один установлен давно, второй установлен недавно. Два разных пользователя. На конкретном примере: акции компании ММК, на таймфрейме М15 у пользователя (старый квик) история отображается с сентября 2020 года, у второго пользователя (новый квик) история отображается с августа 2021. Это колоссальная разница, и для анализа инструмента очень критична. Подскажите, как можно расширить историю, и подгрузить более старые данные. Перезаказ данных уже делала, и это не помогло. Заранее благодарю за ответ.Отправитель письма запросил подтверждение о прочтении письма.
все верно.
Если Вы не обновляли данные, то история хранится с момента первого обращения к данной бумаге.
Если есть желание, то скопируйте файлы истории из квика  первого в квик второго и будет Вам одинаково.
Дубликаты уведомлений onOrder v9.2.2.11
 
Цитата
Павел Bosco написал:
Простенький скрипт, который отправляет заявку на 1 лот в Quik_Junior по сберу так, чтобы она заведомо исполнилась.
В нём определены два колбэка, OnTransReply и OnOrder

В результате вижу, что OnOrder вызывается по-моей заявке два раза (она имеет 1 лот и исполняется сразу).
Причём, очевидно, так бывает не всегда. Но заметил что такое получается чаще, если делать перед этим реконнект с сервером.
Код:
Код
   function   OnTransReply (trans)
  -- Если поступила информация по текущей транзакции  
  message ( "TransReply:\n"   ..   --trans.date_time .. '\n' ..  
   tostring(trans.trans_id)  ..   '\n'   ..  
   trans.sec_code  ..   '\n'   ..  tostring(trans.status)  ..   '\n'   ..  
   tostring(tobin(trans.flags))  ..   '\n'   ..  
    tostring(trans.order_num)  ..   '\n'   ..  
   tostring(trans.quantity)  ..   '\n'   ..  
   tostring(trans.price)  ..   '\n'   ..  
   trans.result_msg);
 end ;

 function   OnOrder (order) 
  -- Если поступила информация по сделке 
  message ( "OnOrder {\n"   ..   --trade.datetime .. '\n' ..  
   " trans_id:  " .. tostring(order.trans_id) .. '\n' .. 
    "  order_num:  " .. tostring(order.order_num) .. '\n' .. 
   "  flags:  " .. tostring(tobin(order.flags)) .. '\n' ..
        "  brokerref:  " .. tostring(order.brokerref)  .. '\n' ..
   "  balance:  " .. tostring(order.balance) .." \n"  ..  
   " qty:  " .. tostring(order.qty) .. '\n' ..
   "  value:  " .. tostring(order.value) .. '\n' ..
   "  account:  " .. tostring(order.account) .. '\n' ..
   "  activation_time:  " .. tostring(order.activation_time) .. '\n' ..
   "  ext_order_status:  " .. tostring(order.ext_order_status) .. '\n' ..
   "  trading_session:  " .. tostring(order.trading_session) .. " \n}");
 end ;
  


Результат работы (копирую из сообщений)
Код
  TransReply:
 236 
SBER
 3 
 1001000000000000000001 
 6307340506 
 1.0 
 369.5 
( 161 ) Заявка N  6307340506  зарегистрирована. Удовлетворено  1 

OnOrder {
 trans_id:  236 
 order_num:  6307340506 
 flags:  11000 
 brokerref:  10112 //
 balance:  0.0 
 qty:  1.0 
 value:  3695.0 
 account: NL0011100043
 activation_time:  0 
 ext_order_status:  0 
 trading_session:  0 
}

OnOrder {
 trans_id:  236 
 order_num:  6307340506 
 flags:  11000 
 brokerref:  10112 //
 balance:  0.0 
 qty:  1.0 
 value:  3695.0 
 account: NL0011100043
 activation_time:  0 
 ext_order_status:  0 
 trading_session:  0 
}  


Вопрос, это разве нормально? Чем обусловлено? Кто сталкивался? Как боретесь?
Номер транзакции - не статический, для теста генерится рандомом от 1 до 1000
вопросу в обед -100 лет.
и столько же ответу.
-------------------
Где Вы прочитали, что не может быть несколько ответов с сервера?
-----------------------------------
Ответ - "мне кажется" или "я думал" не учитывается.
Кривые шибки в QLua
 
Цитата
Anton написал:
local for_OnParam = 2 -- Множитель
local N_OnParam = 0
----
function OnParam(p1, p2)
   for i = 1, for_OnParam do
     N_OnParam = N_OnParam + 1                                                                              
  end
end
---
--------
IsRun = true
function main()
   local J
   local OnParam_begin  
   -------------------
   while IsRun do
    ------
    do
       OnParam_begin = N_OnParam  
            J = 100000000  
            while ( J > 0  )   do   J = J - 1  end      -- ### Проблема здесь.   "Чистый" байт-код, но в QLua 5.3 здесь переключаются потоки (! в 5.4 этого нет)----
--         for i = 1, 100000000 do  end        --  Это в QLua 5.3 работает нормально  ---

       if N_OnParam ~= OnParam_begin then   --  Счетчик N_OnParam может исмениться только в OnParam  
               message ( ' Переключение колбека и потока main:  N_OnParam - OnParam_begin = ' .. tostring(N_OnParam - OnParam_begin))
           end      
  end
  -----
      sleep(10)  
 end
 ------------------
end  
Вариант возможной ошибки.
----------------------
цикл  for i = 1, 100000000 do  end    - пустой. Оптимизирующий компилятор его просто выкинет.
----------------------
Переменная N_OnParam   меняется внутри колбека, т е внутри основного потока.
------------------
эта переменная определяет параметр  OnParam_begin   для  if сообщения в потоке main.
------------------------------
Проверка условия и смена параметра асинхронны.
-------------------------------
Т е в зависимости от активности на бирже и загрузке процессора условие может  не выполнятся никогда.
--------------------------
т е будем получать редкие глюки в зависимости от активности торговли и загрузки процессора.
Что собственно и наблюдается.
-------------------------
Все верно?


 
Средневзвешенная цена
 
Цитата
Рустам написал:
В смысле не существует ГОСТа? Есть одна единственная формула по которой находится средневзвешенная цена. Эти значения должны показывать одно и тоже
Попробуйте ответить на следующие вопросы и будет понятно, что не так в этих значениях.
1) Какая конкретно формула , где Вы ее взяли и как узнали что именно по ней это все считается?.
2) В любой формуле есть параметры. Вы уверены, что параметры в приведенных Вами расчетах средней цены одинаковые?  Какие?  
Средневзвешенная цена
 
Цитата
Рустам написал:
Три разные значения средневзвешенной цены за прошлую сессию. Кому верить?    
сложно понять по картинке что с чем Вы сравниваете.
Но ,очевидно, что формулы расчета этих цен различные, так как не существует ГОСТА на эту величину.
Рекомендую сравнить формулы.
Расширить список функций обратного вызова
 
Цитата
Незнайка написал:
nikolz, брысь.

Цитата
Незнайка написал:
не все задачи можно выполнить  штатными средствами QLua  из main
Вы, батенька, не только дебил, но и хам, однако.  
---------------------------------------------------------
Чего бог не дал в аптеки не купишь.
Расширить список функций обратного вызова
 
Цитата
Незнайка написал:
https://forum.quik.ru/forum10/topic5983

Причина: не все задачи можно выполнить штатными средствами QLua из main:
https://forum.quik.ru/messages/forum10/message58915/topic6806/#message58915
Вы вообще-то ничего не путаете?
----------------------
Колбек - это функция, которая вызывается при наступления асинхронного события.
---------------------
Причем здесь задачи, которые не выполняются средствами QLua?  
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Дам совет начинающим  робовладельцам.
---------------------
В любом бизнесе есть понятие срока окупаемости  вложений в организацию этого бизнеса.
----------------------
Реальный бизнес не может окупиться за время меньше 1-3 лет.
----------------------
Предположим, что Вы мечтаете окупить робота за один год.
---------------------
Осталось лишь сказать сколько Вы хотите получить прибыли за год.
-----------------
Полагаю, что не 10 тысяч рублей , а скажем миллион рублей.
---------------------  
Если так, то Ваши затраты на строительство робота составят не менее этого миллиона рублей.
-------------------
Поэтому , сколько заплатите за робота, столько он Вам и заработает за 1-3 года,
если удачно войдете на рынок с этим роботом.
----------------------------------
Но если неудачно войдете в рынок с роботом с интернет помойки, то слить он может любое количество Ваших денег.
-----------------------  
Поэтому мне прикольно читать объявления на заборе, а форум это и есть забор ,
о желании найти  аля-кулибина, который знает десять языков со словарем
и один , но не цензурный,  без словаря,
который сделает Вам то, сами не знаете точно что.  
Запись в один файл из разных скриптов.
 
Цитата
Незнайка написал:
Возможна ли корректная запись из разных скриптов в один файл?
Запускаю два скрипта:
Код
   function   main ()
     local  f  =   io.open (file,  "a+" )
     for  i  =   1 ,  100   do 
      f:write(s .. i .. "\n")
      f:flush()
       sleep ( 1 )
     end 
    f:close()
 end   
В первом: s = ".."
во втором: s = "+"

В файле
    Скрытый текст        
Цитата
..1
..2
..3
..4
..5
+1
..6
..7
+4
..8
+5
..9
+6
..10
..11
..12
+9

..14
+10
..15
+11
..16
..17
..18
+15
..19
..20
+16
..21
+18
..22
+19
..23
+20
..24
+21

+22
часть строк теряются.

Есть идеи как исправить?
попробуйте сначала сформировать все что хотите записать в виде строки
а потом запишите это в файл одним обращением.  При этом рекомендую ставить метку времени в каждой записи.
Подскажите пожалуйста кто знает
 
Цитата
Евгений написал:
Что лучше для уменьшения загрузки скрипта при расчете при работе с метками?

Изменение параметров существующей  метки или ее удаление и выставление новой?
выставить новую
EMA, Расчет средней скользящей
 
Цитата
Владимир написал:
BlaZed, Я хороший алгоритмист. Кроме того, классика: "Чтобы узнать, что яйцо тухлое, не обязательно съесть его целиком". ::

Господи, да я понятия не имею, что такое SMA, а что EMA! Ага, понятно. Ни та, ни другая нафиг не нужны: сам смысл свечей именно в том, чтобы сглаживать случайные колебания, отрезать текущую "мышиную возню", а потому всё это "скольжение" только засирает это усреднение текущими колебаниями. НА КОЙ это надо? Ха-ха-ха! "Чтобы дать больший вес новым данным, была создана экспоненциальная скользящая средняя (EMA)". Нарочно не придумаешь! А свечи более лёгких таймфреймов на кой? Они-то и дают ПОЛНУЮ картину происходящего, дают столько информации, сколько этой несчастной EMA и не снилось.

Да очень просто! Сумма накапливается, пока не заполнен период, данные укладываются... ну, скажем, в циклическую очередь. А дальше - как я сказал. Что делать с этой придурочной EMA, я не знаю - мож, для неё действительно нужен цикл. Но сама она уж точно нафиг не нужна!
Вообще-то сам смысл свечей совершенно в другом.
Во-первых, смысл в том чтобы неравномерную временную ось заменить равномерной
Во-вторых, чтобы сжать информацию, заменив множество сделок на интервале пятью точечными значениями.
При этом нет никакого сглаживания, кроме суммы объема.
--------------------  
EMA, Расчет средней скользящей
 
Цитата
BlaZed написал:
Цитата
nikolz написал:
и время расчета нового значения  не зависит от периода EMA
Так у меня время расчета тоже от периода не зависит
тогда поясните зачем это:
---------------------------
  for  i =  1 ,datasource: Size ()  do   -- Пробегаемся по всем свечам
  if  i =  =  1   then  ema_cache[i] = datasource:C(i)  -- EMA Close первой свечи
            else  ema_cache[i] = k * datasource:C(i) + ( 1  - k) * ema_cache[i -  1 ]  -- EMA Close всех остальных свеч
    end
  end
-------------------------
и от чего зависит этот цикл?
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Цитата
БорисД написал:
Цитата
nikolz написал:
 
Цитата
БорисД  написал:
Народ прошу подсказать кто из опытных  посетителей этого сайта может посодействовать в написании роботов по моим алгоритмам  за разумную плату с продолжительным сотрудничеством на долгие годы за процент от прибыли.  
 Покажите результаты тестов алгоритма.
Если алгоритм интересный,  то напишу по нему советник  бесплатно.
Если советник не сольет депозит, то обсудим варианты сотрудничество.
Алгоритм не один а несколько ,  и  почти все они  известны  и опробованы  на просторах интернета  многими трейдерами .  Это  : сетка заявок ;  Мартингейл ; отлов прострелов ;  МаркетМейкинг ; заявки  по средней скользящей ;  валютная переоценка  и другие кроме арбитражных сделок которые лично я не рассматриваю .  
Робот  интересует не советник а самостоятельно  торгующий , и поэтому он должен быть с устойчивой  связью  с брокером и биржей  , иметь риск-менеджемент , иметь  собственный учет исполненных и ожидающих исполнения заявок с возможностью их снятия и перевыставления а также собственный учет  состояния своего портфеля  по дням ,часам, месяцам ( дневник трейдера ).
Для обсуждения  вариантов сотрудничества  сейчас  через личку  напишу свои контакты и телефон.
Вы удивитесь, но все известные на просторах алгоритмы торговли - убыточные по определению.
Это примеры для дилетантов из разряда - "Мама мыла раму".
Рекомендую почитать что-нибудь более серьезное, чем книжки на тему 'Как стать миллионером на бирже".
Все эти книжки написали те, кто торгует на  чужие деньги  за процент от оборота .  
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Цитата
БорисД написал:
Народ прошу подсказать кто из опытных  посетителей этого сайта может посодействовать в написании роботов по моим алгоритмам  за разумную плату с продолжительным сотрудничеством на долгие годы за процент от прибыли.  
Покажите результаты тестов алгоритма.
Если алгоритм интересный,  то напишу по нему советник  бесплатно.
Если советник не сольет депозит, то обсудим варианты сотрудничество.
 
EMA, Расчет средней скользящей
 
Цитата
BlaZed написал:
Дмитрий, ну пример для изучения вы явно не самый удачный нашли.. точнее совсем уж неудачный ибо кривой и нерабочий, в нем даже и комментировать нечего

Лови мою функцию расчета EMA Close вместе с примером использования
Код
   function   main ()
  ema_cache = {}   -- Кзш со значениями EMA Close 
  period =  15   -- Период EMA 
  ds,error_desc =  CreateDataSource ( "SPBFUT" ,"SiZ1",INTERVAL_H1)  -- Создаем датасурс 
  n =  0   -- Счетчик 
   while (ds: Size () =  =  0 ) and (n <  100 ) do   sleep ( 100 ) n = n +  1   end   -- Ждем загрузки датасурса 
   if (n =  =  100 ) then   message ( "Ошибка:"  .. tostring(error_desc))  return   false   end   -- Если не дождались - выход 
  ema(ds,period)  -- Вычисляем EMA, заполняем кзш 
   message ( "EMA "  .. ema_cache[ds: Size ()])    -- Пример получения EMA последней свечи 
   message ( "EMA "  .. ema_cache[ds: Size () -  1 ])  -- Пример получения EMA предпоследней свечи 
 end 
 function   ema (datasource,period)  -- Расчет EMA Close 
   local  k =  2 /(period +  1 )  -- Коэффициент взвешивания 
   for  i =  1 ,datasource: Size ()  do   -- Пробегаемся по всем свечам 
     if  i =  =  1   then  ema_cache[i] = datasource:C(i)  -- EMA Close первой свечи 
             else  ema_cache[i] = k * datasource:C(i) + ( 1  - k) * ema_cache[i -  1 ]  -- EMA Close всех остальных свеч 
     end 
   end 
 end   
не используйте цикл. Это зло в прогах реального времени.
Если Вам надо рассчитать EMA с периодом 1000 таймов скока времени  будете считать?
Можете не успеть до  получения следующего значения.
При этом Вы для каждого нового значения повторно обсчитываете предыдущие 999.
-------------------
Прикольно.
-----------------
В правильной программе и кеш никакой не нужен
и время расчета нового значения  не зависит от периода EMA.
Запоминание информации последнего входа., Quik перестал запоминать последнее состояние информации.
 
если выходите нажатием "X"  или закрываете аварийно, то получите то, что получили.
Выходите нажатием "Выход"
Индикатор Lua
 
Цитата
Евгений написал:
Код
   function   main ()
     while  is_run  do 
       
      
       local  identifier  =   "Si_macd_long" 
       local  count  =   10 
       local  offset
       local  n
       local  t,n,l  =   getCandlesByIndex ( "Si_macd_long" , 0 , 0 ,count,offset)
       if   # t  >   1   then  
          message ( "   #t = "  ..  # t, 2 )
       end  
      
      
        sleep ( 500 )
     end 
 end   
Что не так тут почему таблица нил, все проверил
У вас в этом примере не задано значение offset - и оно будет nil  - а это число запрашиваемых свечек.
Ну Вы  получаете, то что запросили.
Все верно?
Подскажите как сделать Таймер на пользовательскую функцию?
 
Цитата
Alex написал:
Добрый день

Есть некая функция, надо что она вызывалась строго 1 раз в минуту.
Основная функция  main работает с задержкой sleep (500)
так как у вас есть sleep( 500 )
то вам надо лишь добавить счетчик и вызывать по нему вашу функцию.
---------------------
Пример:
---------------
function fX()
--...
end   -- эту функцию надо вызвать 1 раз в минуту
-------------------
function main()

if count then    
     count=count+500;  
     if count>=60000 then  fX(); count=0; end
else  count=0;  end

 sleep(500)  -- спать 0.5 сек

end
--------------
Выскакивает ворнинг "Compare string with number", А его не должно быть, по идее!
 
Цитата
Незнайка написал:
Код
   local  Time  =  X
 function   OnCallback ()   -- любой колбек 
  Time  =   nil 
 end 

 function   main ()
   if  Time  and   os.time ()  >  Time  then 
     .. .
   end 
 end   

Существует ли вероятность того, что значение Time сбросится сразу же после проверки его существования в main и os.time() > Time вернет ошибку?
если ядро одно,то не сбросится. Если больше одного, то вероятность =1.
Динамическое количество линий индикатора
 
Цитата
RayIntraday написал:
Цитата
nikolz написал:
 
Цитата
Nikolay  написал:
Нет, линии не обязательны конечно. Просто старые значения не должны исчезнуть с графика, поэтому вывод линий, пусть даже и одной, должен учитывать это.
 вообще-то пересчет графиков взад - это бессмысленная затея.
---------------------------------------------------
"После драки -кулаками не машут"
А если профиль из линий рассчитывать и отрисовывать только последний час, на начало нового часа убрать линии профиля и оставить только maxVol сформированный (TYPET_BAR), кога начинается новый час расчет начать проводить заново. Получится ежечасный maxVol и один профиль.
Я нечто похожее видел в NT-7 вот ссылка  Индикатор POC уровней .
Вы имеете ввиду столбик числе у свечки?
Если да, то так можно сделать.
Расширить список функций обратного вызова
 
Цитата
TGB написал:
3.
Цитата
nikolz написал:
Вы может сами добавить сколько хотите функций обратного вызова.
  Вы что, не поняли и то, что в приведенном мною примере демонстрируется возможность создания таймерных событий столько, сколько потребуется?
понял, но пример у вас очень громоздкий.
-----------------------------------------
все решается гораздо проще на таймерах ожидания ядра либо событиях.
При этом реакция ОС составляет не более 1 мкс.
===============
Оотносительно колбеков и одновременно таймера.
---------------------------
Реализовал  это, создав пул событий на основе  WaitForMultipleObjects.
---------------------------------
В итоге бесконечный цикл  запускается через заданный в функции ожидания интервал,
т е это тайме собаки,
либо при срабатывании любого колбека QLUA
или любой функции пользователя, для которой описано событие.
-----------------------------------
При возникновении события запускается соответствующий ему колбек.
----------------------
Количество событий- любое
Количество колбеков- любое.
Все события  контролируются OC.
=================
Примерно так.
Функция с переменным числом аргументов, Как узнать количество переданных в функцию аргументов?
 
Цитата
Незнайка написал:
Цитата
Незнайка написал:
в Lua 5.4

Нашел:
Код
   local   function  f( .. .)
   local  arg  =  { .. .}
  arg.n  =  select( '#' ,  .. .)
   return  arg.n
 end 

 print (f( 1 ,  nil ,  nil ))  
Зачем Вам это извращение в скриптах и индикаторах квика?
Вы же теряете ресурсы для раскрутки неопределенных параметров.
А смысла в переменном числе параметров именно в скриптах торговых роботов нет.
Что делает SetEmptyCallback() ?
 
Цитата
Владимир написал:
На самом деле Вам не надо вызывать 1529*8=12232 раза
так как список Ваших инструментов грузится при старте и отображается в  текущей таблице.
У Вас будет проблема со скоростью вашего железа.
Но полагаю , если Вы торгуете по 1529 инструментам, то у вас железо должно быть очень крутое.
На рынке халявы нет и на плохом железе нечего делать с таким количеством тикиров.
Что делает SetEmptyCallback() ?
 
естественно, длина программы не зависит от числа инструментов.
Что делает SetEmptyCallback() ?
 
Цитата
Владимир написал:
Ах ты засранец!  

Ну, начнём с того, что тикеров у меня не 4, а на сегодняшний момент 1529, и их состав немного "плавает", и код скрипта это, разумеется, никак не затрагивает. Интервалов у меня тоже вдвое больше - мелкие свечи я считаю сам, но они ведь тоже должны где-то храниться и далее обрабатываться по общему алгоритму..

Теперь инициализация: что делает хреновина вида "ds[tikers[j][1]]=ds[tikers[j][1]] or {}" я не знаю, да и знать не хочу. Для меня не подлежит сомнению, что обращение к данным тикера должно быть по его айдишке (его порядковому номеру в таблице), а уже в полях этой таблицы должен лежать и код тикера, и код класса, его валюта, статус, количество закупленных лотов, размер лота и вся прочая хрень. В том числе, одно из этих полей должно содержать информацию о свечах по разным таймфреймам: младшую часть я инициализирую и поддерживаю в актуальном состоянии сам, а вот вторая половина должна получать её как раз через CreateDataSource. Итак, мне предлагается при старте вызвать эту конструкцию 1529*8=12232 раза, а уж опосля... впрочем, что-то мне подсказывает, что никакого "опосля" уже не будет - на этом скрипт и сдохнет. ::

Теперь насчёт Size: СКОЛЬКО свечей она мне даст по каждому интервалу? Повторяю: мне нужна ОДНА, последняя. Ну, для страховки, ДВЕ. А эта падла сколько их туда насуёт? И, насколько я понимаю, будет всё время дописывать? Или даже и дописывать не будет?

Нет, я не понимаю: Вы ВСЕРЬЁЗ предлагаете подобную хрень реализовать или прикалываетесь?
Реализуется это примерно так.
Надо читать с сервера самый мелкий интервал.
Долее на каждый  тик будет примерно 10 операторов
Считаем всегда последнюю. Сохраняем столько , сколько надо.
Если надо одну то в архиве будет всегда одна на каждый инструмент и одна - открытая
Что делает SetEmptyCallback() ?
 
Цитата
BlaZed написал:
Владимир, Не ожидал  :: Тут же даже кулинарить нечего, все и так очевидно  

Создать датасурс и выдернуть из него последнюю свечу проблем нет никаких (см. пример в первом посте).
А как в цикле пробежаться по заданным интервалам и инструментам думаю сами догадаетесь.

Вопрос то у вас в чем?
вообще-то Вы ошибаетесь
Свеча - это четыре индикатора цены и один объема.
Т е для любого интервала надо считать close,Low, High, Volume.
Просто Выдернуть не получится .
---------------------
Open - это первая свеча после открытия интервала
High и Low - это локальные экстремумы на данном интервале
Value - сумма значений на интервале
Close - это последняя сделка перед закрытием интервала.
-------------------
На мало ликвидном рынке надо учитывать тот факт, что на интервале может не быть сделок вообще.
---------------------  
А теперь все это для различных интервалов и множества инструментов.
Когда писал это чудо.
Попробуйте написать.
-------------------------------
Полагаю, что вопрос в этом.
Индикатор Lua
 
Цитата
Незнайка написал:
Цитата
Незнайка написал:
упаковать значения в две таблицы, а потом объединить их

Но есть косяк: если функции могут возвращать nil, то unpack работает криво.
Когда таблица сразу заполняется при создании, то распаковывается нормально:
Код
     local  G  =  { 1 ,  2 ,  nil ,  4 ,  nil ,  6 }
   return   print (unpack(G))   -->  1       2       nil     4       nil     6   

А когда значения дописываются после, то работает криво
Код
   local  G  =  { 1 ,  2 ,  nil }
G[ 4 ]  =   4 
G[ 5 ]  =   nil 
G[ 6 ]  =   6 
 print (unpack(G))    -->   1       2       nil     4   
не ставьте перед переменными local.
они будут глобальными
в первой функции считаете 4 параметра  которые изначально не определены
во второй функции считаете следующие 4 параметра
при выводе просто перечисляете их
например так :
-----------------------------
function fun1(k)
x1=k+1;
x2=k+2;
x3=k+3;
x4=k+4;
end
------------------------------
function fun2(k)
x5=k+5;
x6=k+6;
x7=k+7;
x8=k+8;
end
----------------------------
function onCalculate(i)
....
fun1(i);
fun2(i);
return x1,x2,x3,x4,x5,x6,x7,x8;
end
APC в колбеках QLUA
 
Предлагаю для скриптов LUA реализовать:
1) колбеки QLUA в виде asynchronous procedure call (APC)для потока main;
2) в одном скрипте создавать несколько потоков и с помощью APC распределять по ним обработку данных из терминала КВИК.
Расширить список функций обратного вызова
 
Вы может сами добавить сколько хотите функций обратного вызова.
Динамическое количество линий индикатора
 
Цитата
Nikolay написал:
Нет, линии не обязательны конечно. Просто старые значения не должны исчезнуть с графика, поэтому вывод линий, пусть даже и одной, должен учитывать это.
вообще-то пересчет графиков взад - это бессмысленная затея.
---------------------------------------------------
"После драки -кулаками не машут"
Расширить список функций обратного вызова
 
Цитата
TGB написал:
Цитата
_sk_ написал:
Добавить функцию обратного вызова OnTimer(), которая будет вызываться терминалом с некоторой периодичностью

 В данном комментарии выложен модуль работы с таймерными событиями в отдельном потоке и шаблон его использования.
----
API работы с таймерными событиями:
1) Start_Timer()  -  запуск отдельного  потока обработки таймерных событий.
2) <Ключ события> = Set_Timer  (
{<Имя события>, <Интервал в млсек.>, <Функция обработки события>,{<Список парвметров функции>}} )    - запрос таймерного события.
Через <Интервал в млсек.> будет запущена в отдельном потоке <Функция обработки события> со <Списоком парвметров функции>.
3) delete_Timer (<Ключ события>) – удаление при необходимости запрошенного собы-тия.
----
Модуль и две dll (service53.dll и service54.dll) , скачанные по ссылке:
https://cloud.mail.ru/public/i3Y7/kQHBvs7um   необходимо положить в папку хранения info.exe.
---
Модуль OnTimer (для QLua 5.3 и 5.4):
Код
   -- Модуль таймерных событий OnTimer --- 
     -- Подключение C-пакетов service53, service54: https://cloud.mail.ru/public/i3Y7/kQHBvs7um 
 local  WorkingFolder  =   getWorkingFolder ()   
package.cpath  =  package.cpath  ..   ';'   ..  WorkingFolder  ..   '\\?.dll'   ..   ';'   ..  WorkingFolder  ..   '\\?53.dll'  ..   ';'   ..  WorkingFolder  ..   '\\?54.dll'   ..   ';'   ..  WorkingFolder  ..   '\\?51.dll' 
                             ..   ';'   ..  WorkingFolder  ..   '\\?3.dll'        -- C - пакеты  ---- 
 if  _VERSION  =  =   'Lua 5.3'   then    
     require ( 'service53' )      -- Подключает библиотеку service.dll, расположенную в корневом каталоге терминала QUIK (там где info.exe)   ---- 
 else 
     require ( 'service54' )  
 end    
 local  GetMilliseconds, Start_thread   =    service.GetMilliseconds, service.Start_thread

   --- Функции работы с очередями  --- 
     local  new   =     function   ()
         return   {first   =     1  , last   =     0  }
     end  
     --- 
     local  push   =     function   (self, v)
         local   last   =   self.last   +    1  
        self[last]   =   v
        self.last   =   last
         return   last
     end  
     --- 
     local  pop   =     function   (self)
        local   first   =   self.first
        if   first   >   self.last   then     return     nil     end  
        local   v   =   self [first]
       self.first   =   first  +   1  
       self[first]   =     nil  
        return   v, first
      end  
 --------- Создание очереди ------ 
  local   Queue_Timer  =  new()   --- Таймерные события ----- 
  local   Queue_Timer_Sl  =  new()   --- Очередь отмены событий --- 
 ------------------------------------------- 
     --- Заказ таймерных событий ---- 
     --- Таймерное событие:  {<Имя события>, <Интервал в млсек.>, <Функция обработки события>,{<Список парвметров функции>}} 
     local   function  Set_Timer  (self)
        if  type(self)  =  =   'table'   then  
          if   # self  >  =   3   then 
             self [ 2 ]  =  self [ 2 ]  +  GetMilliseconds() 
               return  push (Queue_Timer, self)
          else 
             message  (  '!!! Ошибка. Должно быть:  {<Имя события>, <Интервал в млсек.>, <Функция обработки события>,{<Список парвметров функции>}}' ) 
          end 
       else 
          message  (  '!!! Ошибка (параметр не таблица). Должно быть:  {<Имя события>, <Интервал в млсек.>, <Функция обработки события>,{<Список парвметров функции>}}' ) 
       end 
     end  
    ----- 
     local   function  delete_Timer  (kl)
       push (Queue_Timer_Sl, kl)
     end  
     ------ 
     local   function  Timer ()
        local  ms, first_q 
        while  IsRun    do  
             ---  Обработка удалений событий --- 
            ms, first_q  =  pop (Queue_Timer_Sl) 
             while  ms   do 
              if  Queue_Timer [ms]  then  Queue_Timer [ms]  =   nil   end 
            ms, first_q  =  pop (Queue_Timer_Sl)    
          end 
          ---  Чтение очереди заказанных событий[ -----    
           for  k, v  in  next, Queue_Timer  do 
             if  type(k)  =  =   'number'   then 
                 if  v [ 2 ]  <  =  GetMilliseconds()    then 
                   Queue_Timer [k]  =   nil 
                         if  v[ 4 ]  then 
                           pcall ( v[ 3 ], table.unpack (v[ 4 ]))
                   else 
                     pcall ( v[ 3 ])   -- функция без параметров --- 
                   end 
                end 
             end 
               end 
          ------------------------------------------------------- 
             sleep ( 2 )      
        end 
     end  
 --------------------------------------- 
     local   function  Start_Timer ()
     Start_thread (Timer)
     end 
   ------ 
   return  {Set_Timer  =  Set_Timer, delete_Timer  =  delete_Timer, Start_Timer  =  Start_Timer }
  

---------------------------------------------

Шаблон использования модуля:
Код
   -- Шаблон использования модуля таймерных событий 
 local  OnTi mer  =   require ( 'OnTimer' )   -- Подключение модуля обработки таймерных событий  --- 
 local  Set_Timer  =  OnTimer.Set_Timer
 local  delete_Timer  =  OnTimer.delete_Timer
 local  Start_Timer  =  OnTimer.Start_Timer

IsRun  =   true 

     local   function  call_Timer  (kl)
         message  (  'call_Timer = '   ..  kl)
     end  
   
     local   function  call_Timer1  ()
         message  (  'call_Timer1  () ==============' )
     end  

 function   main ()
    Start_Timer()
    local  kl
     --- Заказ таймерных событий ---- 
     --- Таймерное событие:  {<Имя события>, <Интервал в млсек.>, <Функция обработки события>,{<Список парвметров функции>}} 
   kl  =  Set_Timer({'Set_Timer',  100 , call_Timer, { 100 }})
   kl  =  Set_Timer({'Set_Timer',  1000 , call_Timer, { 1000 }})
   kl  =  Set_Timer({'Set_Timer',  5000 , call_Timer, { 5000 }})
   kl  =  Set_Timer({'Set_Timer',  3000 , call_Timer1})
 --   delete_Timer (kl) 
   
     ------------------- 
     while  IsRun  do  
   
        ----  Обработка в main остального ----- 
       kl  =  Set_Timer({'Set_Timer',  1000 , call_Timer, { 1000 }})
        delete_Timer (kl)
        ----  Конец Обработка в main остального ----- 
         sleep ( 500 )        
   end 
   ------------------ 
 end    
   
 function   OnStop ()
     IsRun  =   false 
     DestroyTable (TableQUIK)
      DestroyTable (TableQUIK1)
     return   10000     --  !!  По истечении этого интервала времени (в млсек.), данного скрипту на завершение работы, функция main() завершается принудительно.  
                                 -- При этом возможна потеря системных ресурсов.   ! Если функция не выдает значение, то по умолчанию оно 5000 (5 сек.) 
 end 
  
Попробуйте использовать таймеры ожидания (таймеры ядра)
Такое решение и проще и лучше. Не надо создавать новые потоки.
Квант таймера 0.1  мкс.
Программирование гораздо проще, чем ваша скатерть-самобранка.
Страницы: Пред. 1 ... 46 47 48 49 50 51 52 53 54 55 56 ... 80 След.
Наверх