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

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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 17 След.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
VPM написал:
OnInit, или просто прозрение, которым хочется поделиться.
   Я бы не стал это комментировать, но ведь кто то может это воспринять как открытие :smile:  и руководство к действию.
 Попробую объяснить ваше заблуждение (очередное).
Я в своих скриптах не использую ни OnInit ни кода в body по следующим причинам:
1) Код OnInit и код body будут исполняться в основном служебном единственном потоке, который обслуживает:
  - запуск всех Lua-скриптов пользователя;
  - запуск коллбеков всех Lua-скриптов пользователя;
  - обработка всех коллбеков таблиц QUIK (это не таблицы Lua);
  - обработка всех индикаторов пользователя.
 Это значит, что пока он будет "возиться" с кодами OnInit и  body другого он ничего делать не будет.
  На всякий случай попробуйте в начале OnInit написать строку: sleep(30000) и посмотрите что получится :smile: .
2) Всю необходимую инициализацию (включая пакеты) можно разместить в начале main в виде функции, вызываемой сразу после ее определения и это будет выполняться в отдельном созданном потоке main, а основной служебный поток продолжит параллельно (если у ПК несколько ядер) выполнять свою перечисленную ранее работу.
3) в рассмотренном варианте при запуске нескольких скриптов сразу они начинают выполняться быстрее, чем с кодами в OnInit и  body.
Функция getDepoEx может приводить к зависаниям терминала
 
1.
Цитата
Йцукен написал:
Предлагаю заинтересованным подтвердить или опровергнуть это.
   Подтверждаю. В выложенном экземпляре QUIK у меня ошибка проявляется.

2.
Цитата
Nikolay написал:
Да, любое зависание основного окна приложения - это ошибка, баг.
  Согласен. Локализована типичная ошибка синхронизации. В моей песочнице эта ошибка не проявляется.

3.  
Цитата
Йцукен написал:
Но когда посреди торгов, у вас неожиданно всё зависнет, - прибежите на форум.
  Согласен. Такие нетривиальные ошибки надо выкладывать и исправлять (разработчику), а пользователей, сумевших их локализовать, поощрять :smile: .

4. Вообще то, многие ошибки, обнаруженные в QUIK, по моему мнению, во многом, следствие существующей дефектной (сложной) его архитектуры , о чем я написал в своей ветке "Что стоило бы изменить в QUIK по-крупному" два года назад.
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
TGB написал:
предложение можно сформулировать следующим образом:     функциональность обработки событий QUIK расширить, добавив в API пользователя функцию задания свойств служебных очередей событий
  Оформить это, наверное, лучше в виде меню задания свойств служебных очередей событий QLua, вызываемое в окне запуска скриптов пользователя, при отсутствии запущенных скриптов.
  Промежуточный итог обсуждения интерфейса QUIK со скриптами QLua, при реализации предложений этой ветки следующий:
пользователям, при этом, вносить изменения в их существующие скрипты не требуется.
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
У меня было предложение, которое стоит повторить:
Цитата
TGB написал:
 На форумах ARQA для комментирующих пользователей ввести месячный лимит трафика, после которого не будет возможность вводить комментарии.   Значением этого лимита могло быть: Годовой трафик nikolz / 12 / 10. Но, конечно, насчет значения лимита, решать ARQA.
 Наличие такого лимита, обеспечило бы:    
  - экономию дискового пространства баз форумов;    
 - автоматическое модерирование форумов за счет принуждения думать о краткости и четкости текстов, пишущих комментаторами;       -     - удобство для читающих комментарии, в которых будет меньше флуда.
  Это может показаться неактуальным из-за снижения активности пишущих, но могло бы улучшить качество форумов в перспективе.
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
Йцукен написал:
Логичней было бы, чтобы терминал не дублировал пропущенные колбэки, по которым скрипт не получит новых данных.
  Это хорошее ваше предложение можно сформулировать следующим образом:
    функциональность обработки событий QUIK расширить, добавив в API пользователя функцию задания свойств служебных очередей событий:
 1) длин очередей;
 2) функций фильтрации событий перед их записью в соответствующие очереди;
 3) приоритетов обработки очередей;
 4) может быть что то еще..
 Все свойства имеют значение по умолчанию.
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
nikolz написал:
Я специально выложил для начинающих писателей не псевдокод, а скрипт на Lua с очередью. Да и в документации на QLua есть еще один пример.
  Какой же вы непонятливый. До сих пор не поняли, что обсуждаются не существующие реализации, а вариант изменения этих реализаций.
  Все таки, похоже, что вы полуинтеллектуальный робот-спамер устаревшей версии, без способности учета контекста обсуждаемой темы при генерации спама.
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
nikolz написал:
все что делается внутри sleep - это передается ядру время на которое надо остановить поток.
  Вы, как дятел :smile: , про свое, не относящееся к обсуждаемому.
  Вы это читали ?:
Цитата
TGB написал:
-- Отличие только в реализации функции sleep.
-- При  ее вызове с заданным интервалом внутри нее выполняется (код на C++):
   WaitForSingleObject( ,  ); // здесь ожидание истечения   или выдачи сигнала QUIK (неблокирующей функцией Pulse в служебном потоке) о записи в очереди новых событий.
 -- Когда sleep "срывается" с  , то в ней анализируются очереди (это  можно сделать эффективно, используя битовую шкалу непустых очередей скрипта) и выполняются соответствующие   с параметрами считанными из очередей.
 -- Функционально это не отличается от того, что реализовано сейчас, но выполняется в потоке пользователя main.
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
nikolz написал:
Sleep останавливает поток main, а функции колбеков вызываются в другом потоке, на который sleep не действует.
   Вы опять только пишите не читая.
   Мы же с Йцукен обсуждаем не системный Sleep и даже sleep QLua, а предложенный мной запускающий коллбеки.
Вам опять надо проложиться между комментариев :smile: ?
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
Йцукен написал:
А как вы узнаете, что это повторы, пока не обработаете их?
   Вы сначала создаете таблицу фильтрации со значениями полей фильтрации заведомо не совпадающими с ожидаемыми данными.
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
Йцукен написал:
А смысл несколько раз подряд обрабатывать, например OnQuote, если каждый раз мы будем обрабатывать одни и те же данные?Или вы предлагаете хранить данные для каждого колбэка?
 Если вы не хотите повторно обрабатывать данные, то фильтруйте их. Для фильтрации данных можно создать, для соответствующего вида коллбека, таблицу с фильтруемыми полями, обновляемыми при поступлении новых данных и использовать эту таблицу в начале коллбека с тем. чтобы не обрабатывать ненужные вам повторы.
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
Йцукен написал:
а что делать, если между слипами данные поступили по инструменту несколько раз?
  При "просыпании" sleep, функции чтения очередей (коллбеки) будут выполняться (последовательно, без пропусков) столько раз сколько необработанных записей в очередях. Если очереди не переполняются, а это можно контролировать и не допускать, то события не теряются, но возможны задержки в их отработке.
  Как было указано ранее, sleep "просыпается" либо по времени, либо по записи в очереди данных из QUIK. Но при этом в в sleep всегда анализируются и при необходимости обрабатываются непустые служебные очереди скрипта.
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
Йцукен написал:
колбэки внутри sleep должны вызываться или как?
  Да, так называемые коллбеки, должны вызываться внутри sleep (выполняемой в потоке main) с данными из очередей.
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
Йцукен написал:
можете написать прсевдокод, как по-вашему, использовать очередь событий?
   Я так понимаю, в случае реализации предложенного.

У пользователя никаких изменений:
Код
  <Определение функций обработки событий ровно так, как это сейчас>

---  Весь код скрипта без изменений, в том числе sleep(<Интервал>) --
-- Отличие только в реализации функции sleep.
-- При  ее вызове с заданным интервалом внутри нее выполняется (код на C++):
    WaitForSingleObject(<ОбъектОжидания>, <Интервал>); // здесь ожидание истечения <Интервала> или выдачи сигнала QUIK (неблокирующей функцией Pulse в служебном потоке) о записи в очереди новых событий.
  -- Когда sleep "срывается" с <ОбъектаОжидания>, то в ней анализируются очереди (это  можно сделать эффективно, используя битовую шкалу непустых очередей скрипта) и выполняются соответствующие <Функций обработки событий> с параметрами считанными из очередей.
  -- Функционально это не отличается от того, что реализовано сейчас, но выполняется в потоке пользователя main.
-- Тому, кому интересны детали выполнения sleep, может изменить в своем скрипте формат вызова sleep: вместо sleep(<Интервал>) строка
     local <Количество обработанных элементов очереди>, <Данные о потерях событий в очередях>  = sleep(<Интервал>) 
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
Oleg Kuzembaev написал:
В данном случае, нам видится возможность зарегистрировать пожелание на доработку будущих версий ПО. Однако необходимо достичь понимания, какая именно доработка требуется.Если у вас уже есть такая наготове, то просьба предметно описать ее: что именно стоит добавить? Как это будет выглядеть в вашем представлении?

      1. Я исхожу из того, что среди пользователей QUIK могут быть квалифицированные IT-разработчики, которые могут улучшить мои предложения и поэтому выкладываю их в публичку.
      2. Сохранение существующего API QLua, с тем, чтобы обеспечить совместимость с существующими разработками пользователей, является основным ограничением на предлагаемое.
-------------------
I.  В текущей версии QUIK в одном основном потоке обслуживаются:
- запуск всех Lua-скриптов пользователя;
- запуск коллбеков всех Lua-скриптов пользователя;
- обработка всех коллбеков таблиц QUIK (это не таблицы Lua);
- обработка всех индикаторов пользователя.
  Притом, что в текущий момент у подавляющего количества ПК много ядер ЦП, написанное выше явный перебор. Наверное, нет проблем перечисленное выше обрабатывать в отдельных потоках, так как перечисленные выше функции, в моем представлении, не сильно связаны друг с другом и, на первый взгляд, между ними не требуется синхронизация.

II. Интерфейс  взаимодействия QUIK c Lua-скриптом пользователя, реализованный в виде коллбеков, предполагает многопоточный режим использования Lua, порождающий неприятные проблемы параллельного программирования (для решения которых сами же разработчики предлагают использовать потокобезопасную очередь между коллбеками и потоком main). Мне представляется, что имеет смысл вместо коллбеков использовать активную очередь событий, При этом не требуется использовать Lua в многопоточном, редко используемом и не очень стабильном режиме. При этом не будет проблем с подключением новых версий Lua. Более того, скрипты пользователя будут выполняться несколько быстрее из-за отсутствия синхронизации, требуемой в многопоточном варианте использования  Lua.
  Конкретные предложения:
 1) Lua подключать в однопоточном режиме, нативном варианте, без внесения изменений в исходники. Все необходимые коды QLua перенести в dll-пакет.
 2) Для взаимодействия со скриптами пользователя использовать общие для них служебные циклические очереди (в соответствии с существующими функциями обратного вызова). Длины очередей задавать по умолчанию с возможностью их изменения пользователем. Для каждого запускаемого скрипта пользователя создавать блоки доступа (с соответствующими указателями, обеспечивающими чтение очередей без блокировки) к общим циклически очередям.
 3) Функции чтения очередей регистрировать под теми же именами и так же, как это делается для существующих коллбеков.
 4) Выполнять функции чтения очередей в модифицированной следующим образом sleep:
     - sleep выполняется по истечению заданного в ней интервала времени или при получения сигнала поступления данных в одну из циклических очередей (в пропуске сигналов нет проблем, так есть запуск по времени);
     - выполнение функции начинается с анализа появления новых данных в циклических очередях скрипта (конкретного) и запуска зарегистрированных его функций с теми параметрами из очередей, как это делается в существующей версии QUIK;
     - в качестве результата в модифицированной sleep выдавать значения: количество считанных записей в очередях, признак отсутствия потерь данных в очередях из-за их переполнения (с указанием очередей, в которых это возникло), и, возможно, еще что-то.
 Предложенное:
 1) устраняет зависимость служебного потока от пользовательского, когда (служебный) в существующей версии QUIK может быть блокирован пользовательским, а пользовательский служебным;
 2) устраняет необходимость внесения правок в исходники Lua; при этом скрипты пользователя будут выполняться несколько быстрее из-за отсутствия синхронизации, требуемой в многопоточном варианте использования Lua;
 3) обеспечивает контроль потерь данных в очередях, а также возможность исключения этих потерь за счет увеличения длин очередей пользователем или уменьшения времени ожидания в sleep;
 4) убирает проблемы синхронизации внутри скрипта пользователя.

III. В QUIK реализована функциональность просмотра графика котировок бумаг QUIK. Но отсутствует возможность просмотра котировок бумаг, сохраненных во внешних файлах. С учетом существующей функциональности QUIK, как мне представляется, реализация этой возможности не потребует больших усилий.

IV. Пожелание: сократить время восстановления взаимодействия QUIK с сервером при перезапуске хотя бы до 10 сек.
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
Oleg Kuzembaev написал:
В указанный период на сервере проводились технические работы, которые и стали причиной невозможности снятия заявки
  Здравствуйте! Спасибо за ответ.
  У меня просьба к вам: донести до разработчиков мои комментарии 1, 51.
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
В песочнице QUIK 12.8.3.4 была создана заявка с номером 10256702148.
Она не удаляется ни вручную ни из скрипта.
 Выдается сообщение: "Не удалось снять заявку с номером 10256702148"
 Распечатка заявки из таблицы orders:
<code>
{--таблица: 18.02.26 13:04:52:795 - время создания.
  ['lseccode'] = [=[]=]
, ['qty'] = 7.0
, ['activation_time'] = 0
, ['accepted_uid'] = 0
, ['revision_number'] = 0
, ['sec_code'] = [=[YDEX]=]
, ['investment_decision_maker_short_code'] = 0
, ['visible_repo_value'] = 0.0
, ['accruedint'] = 0.0
, ['executing_trader_qualifier'] = 0
, ['trading_session'] = 0
, ['account'] = [=[NL0011100043]=]
, ['client_qualifier'] = 0
, ['operation_type'] = 0
, ['min_qty'] = 0.0
, ['ext_order_flags'] = 0
, ['client_code'] = [=[10379]=]
, ['price'] = 4917.0
, ['exchange_code'] = [=[]=]
, ['order_num'] = 10256702148
, ['passive_only_order'] = 0
, ['reject_reason'] = [=[]=]
, ['withdraw_datetime'] = { -- table: 00000171D1A2F9A0
 ['min'] = 0
, ['week_day'] = 1
, ['sec'] = 0
, ['ms'] = 0
, ['day'] = 1
, ['year'] = 1601
, ['mcs'] = 0
, ['month'] = 1
, ['hour'] = 0
 }
, ['visible'] = 0.0
, ['yield'] = 0.0
, ['settle_date2'] = 0
, ['price_currency'] = [=[]=]
, ['on_behalf_of_uid'] = 0
, ['awg_price'] = 0.0
, ['linkedorder'] = 0
, ['trans_id'] = 105007541
, ['start_date'] = 0
, ['firmid'] = [=[NC0011100000]=]
, ['value2'] = 0.0
, ['executing_trader_short_code'] = 0
, ['exec_type'] = 0
, ['extref'] = [=[]=]
, ['value'] = 34419.0
, ['repo_value_balance'] = 0.0
, ['repovalue'] = 0.0
, ['datetime'] = { -- table: 00000171D1A2FB20
 ['min'] = 36
, ['week_day'] = 3
, ['sec'] = 57
, ['ms'] = 0
, ['day'] = 18
, ['year'] = 2026
, ['mcs'] = 0
, ['month'] = 2
, ['hour'] = 6
 }
, ['class_code'] = [=[QJSIM]=]
, ['value_entry_type'] = 0
, ['settle_date'] = 0
, ['acnt_type'] = 0
, ['brokerref'] = [=[10379//1]=]
, ['start_discount'] = 0
, ['balance'] = 7.0
, ['side_qualifier'] = 0
, ['seccode'] = [=[YDEX]=]
, ['external_qty'] = 0.0
, ['benchmark'] = [=[]=]
, ['qty2'] = 0.0
, ['client_short_code'] = 0
, ['repoterm'] = 0
, ['price_entry_type'] = 0
, ['visibility_factor'] = 0.0
, ['ext_order_status'] = 0
, ['flags'] = 29
, ['settlecode'] = [=[]=]
, ['uid'] = 228221
, ['expiry'] = -1
, ['bank_acc_id'] = [=[]=]
, ['repo2value'] = 0.0
, ['capacity'] = 0
, ['ordernum'] = 10256702148
, ['price2'] = 0.0
, ['investment_decision_maker_qualifier'] = 0
, ['userid'] = [=[NC0011100000]=]
, ['expiry_time'] = -1
, ['canceled_uid'] = 0
, ['settle_currency'] = [=[]=]
, ['filled_value'] = 0.0
}--таблица: 18.02.26 13:04:52:795
<code>
----
Архив песочницы для анализа поддержкой: https://cloud.mail.ru/public/LTv3/NMDsG3SZD
Не приходит полная версия OnTrade
 
Цитата
VPM написал:
За ссылку спасибо, но там столько не понятных для меня слов, что не хватает моей компетенции разобраться.
   Если вы не понимаете то, что написано вами, то бесполезно вам что то объяснять. Все равно не поймете.
Не приходит полная версия OnTrade
 
Цитата
VPM написал:
А что тут комментировать, ЧУШЬ полная!
  Это ваше добровольное признание :smile: :
Цитата
VPM написал:
Не ну ладно, я "несу  всякую ахинею",  разбирая свои идеи по винтикам и полочкам на примерах.
   На всякий случай ссылка: https://forum.quik.ru/messages/forum10/message78413/topic9090/#message78413
Не приходит полная версия OnTrade
 
Цитата
VPM написал:
архитектура с чёткими инвариантами и детерминированными компонентами позволяет предсказать поведение системы в любых ситуациях, включая сбои, и гарантировать, что она не совершит опасных действий (например, не превысит лимиты, не создаст дублирующий ордер).
  Это заклинания :smile:.   Вы думаете, что они работают?
Не приходит полная версия OnTrade
 
У вас много текста но нет простых вещей:
Цитата
TGB написал:
где доказательство безопасности счета?
Не приходит полная версия OnTrade
 
VPM
  Забыл добавить: где доказательство безопасности счета?
Не приходит полная версия OnTrade
 
VPM
Понятно, вас с "толку" не сбить :smile: .
Но интересно, что вы напишите на следующее.
   Обрабатывая коллбеки и восстанавливая их результат, вы, по сути, повторяете (но в условиях неопределенности) работу которая выполняется в QUIK при формировании его таблиц.
  1. Зачем повторять функциональность которую реализовали разработчики и которая отлажена, скорее всего лучше чем "призрачные" коллбеки (зависящие от кода main), так как это было давно (до появления QLua) и проще контролируется?
  2. Полагаете, что вы квалифицированнее разработчиков?
  3. Вы же вроде согласны с принципом "меньше дергаешься - реже падаешь". Вам нечем заняться и хочется поразвлечься с коллбеками?
Не приходит полная версия OnTrade
 
Цитата
VPM написал:
безопасность счёта можно доказать математически
   Определите что такое безопасность счета и приведите математическое доказательство (можете посоветоваться с ИИ).
Не приходит полная версия OnTrade
 
Цитата
VPM написал:
как она обрабатывает неопределённость!
   Мне, кажется, что обычно всем желательна определенность, особенно в сфере финансов, а вы жаждете приключений :smile: .Такое тоже бывает.
Не приходит полная версия OnTrade
 
Цитата
VPM написал:
которая должна быть математически корректной, отказоустойчивой и масштабируемой, без событийной модели и формальных инвариантов не обойтись.Потому что её поведение можно доказать на реальной торговле на любых объёмах и с любыми стратегиями, а не просто протестировать!
   Зачем вы используете, не первый раз громкие понятия. от которых, похоже, очень далеки? Вы сделали в математике открытие: "доказать на реальной торговле" :smile: . Вам это надо опубликовать в научном журнале.
Не приходит полная версия OnTrade
 
Цитата
Йцукен написал:
Это ваш выбор. Но я написал о другом.Ваш подход также не исключает получения "сырых", как вы выразились, колбэков по заявкам / сделкам.Просто вы получаете их гораздо реже в силу того, что, как правило, колбэки с заполненными параметрами идут сразу следом за частично заполненными.
  1. Читайте:
Цитата
TGB написал:
В моих роботах единственный обрабатываемый коллбек это OnTransReply
  2. Вы проверяли задержку между коллбэком с заполненными параметрами и появлением записи в таблице? Если нет, то проверьте.

Цитата
Йцукен написал:
Колбэки OnParam и OnQuote сообщают, когда произошло изменение. Как вы определяете эти изменения?
   1. Я OnQuote не пользуюсь. QUIK не предназначен для высокочастотной торговли. Из стакана вам приходит история с задержкой как минимум 2-3 сек. и ваша реакция, скорее всего, тоже > 2 сек. Хотелось увидеть реальные доходные стратегии в таких условиях.
   2. Если мне нужны какие то данные из текущей таблицы торгов, то я их читаю в цикле, с нужным мне периодом (у меня есть возможность создавать такие циклы, кроме основного) и фильтрую, чтобы не было повторов, по параметру VOLTODAY. Получается не хуже по результату и эффективности использования ПК, чем при использовании OnParam.
Не приходит полная версия OnTrade
 
1.
Цитата
VPM написал:
Ну или просто банально OnTransReply может потеряться. Вы ждёте 120 секунд — это огромный интервал.
  Кто вас заставляет ждать 120 сек.? Ждите 1 млс.  И, вообще, возитесь с коллбеками сколько хотите :smile: . Для вас чем сложнее, тем лучше.

2.
Цитата
VPM написал:
Для простых систем да.
  Я знаю как делать сложные системы не теоретически. И один из основных принципов их создания это не делать лишних движений. Несделанное, во-первых, не ломается, а во вторых, супер эффективно, так как не требует ресурсов.
  С тем подходом к созданию роботов, который использует Nikolay и я не видно проблем создания сложных роботов.
  Кстати, хотя я стараюсь находить и использовать простые решения, робот у меня не сильно простой. Во всяком случае он полностью автономный. Я, конечно, смотрю что он делает, но уже давно он работает месяцами без моего вмешательства.
Не приходит полная версия OnTrade
 
Цитата
Nikolay написал:
Правда такой подход уже сложнее реализовывать, если данные гоняются через socket в алгоритмы, написанные не на lua.
   У меня есть простая функциональность создания собственных событий в виде таблиц событий, в которые записываются функции с их параметрами при подписке на событие.  Если надо, то при наступлении в скрипте события, например, появления каких то данных выполняется запуск всех функций таблицы соответствующей такому событию.
Не приходит полная версия OnTrade
 
Цитата
Йцукен написал:
Но вы так-то тоже  обрабатываете  "сырые" колбэки и получаете соответствующие проблемы, которые потом закрываете "костылями".
    В моих роботах единственный обрабатываемый коллбек это OnTransReply по той причине, что в нем есть информация о возможных причинах отказа в выставлении заявки. При этом я предполагаю, что он может теряться и отслеживаю в таймере выставление заявки по  времени, проверяя таблицу заявок (orders соответственно stop_orders). Если заявка не появилась в соответствующей таблице в течении 120 секунд, то это ошибка в выставлении и есть ветка отработки этой ошибки.
    Все остальное, включая случаи необходимости получения текущих данных таблиц текущих торгов и тд. я беру из таблиц QUIK, кешируя для быстрого доступа индексы используемых таблиц.
    Признаком изменения состояния таблиц (исключая orders, stop_orders) является изменение длины, которую можно получать функцией getNumberOf.  Признаком возможных изменений в существующих записях orders и stop_orders является изменение длины таблицы сделок.
    Вообще, для торговли надо знать состояние своего счета и какую то картину рынка. Все это можно получить из таблиц QUIK и я не вижу смысла возни с коллбеками.
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
nikolz написал:
Что именно по-вашему блокируется  "пока в потоке main не выполнится sleep"  Напишите конкретно от какого до какого момента исполнения кода в функции Main блокируется
    Вы опять не читаете или ничего не соображаете.  У меня же написано конкретно то, что давно известно:
Цитата
TGB написал:
В существующей версии QUIK выполнение коллбека блокируется до тех пор пока в потоке main не выполнится sleep или сишная функция.
   Выполните в main строку: for i = 0, 10000000000 do  end
  и вы заблокируете секунд на 30 не только коллбеки, но и диалог QUIK.
  -----
Цитата
nikolz написал:
Вы сказали буквально следующее:  Колбеки всегда остановлены если в main нет функции sleep или параметр у нее равен нулю.
   Вы опять меня "передергиваете".  Где я это писал буквально?  Читайте мою приведенную выше цитату. Вы понимаете что означает слово буквально?
 Зачем вы меня "передергиваете" и пытаетесь приписать свои фантазии?
 Вы продолжаете работать прокладкой между комментариями :smile: ?
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
nikolz написал:
Поэтому ничего не блокируется для исполнения sleep.
    Когда же вы научитесь читать :smile: ? Вы читаете тексты перед тем как писать?
  Ведь написано:
Цитата
TGB написал:
блокируется до тех пор пока в потоке main не выполнится sleep или сишная функция
 Где вы видите у меня фразу: "для исполнения"?  
 У вас какое то недержание ваших текстов.
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Вопрос к поддержке:
   В QUIKе много различных коллбеков. Где гарантии, что они не пропускают события, по которым должны выполняться?
Пропуск событий в заявленных коллбеках, даже если это происходит нечасто, это ошибка QUIK.
   В существующей версии QUIK коллбеки выполняются в единственном служебном потоке.  Что происходит в QUIKе если возникает очередное новое событие, по которому должен выполниться коллбек и при этом не был обработан предыдущий? Есть служебные очереди необработанных событий?
   В существующей версии QUIK выполнение коллбека блокируется до тех пор пока в потоке main не выполнится sleep или сишная функция.
   Выше написанное означает полную зависимость служебного потока от пользовательского. Зачем это сделано в QUIKe?
   В этой ветке были изложены предложения, которые, по моему мнению, могли бы устранить описанные выше проблемы. Что в этих предложениях не понятно или вызывает сомнения?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
Квик банально встанет, что не говорит в его пользу и организацию работы с потоками.
  В ветке "Что стоило бы изменить в QUIK по-крупному" (от 15.03.2024) предложены изменения схемы встраивания Lua в QUIK (с сохранением существующего API пользователя) устраняющие некоторые существующие его дефекты, но реакция разработчик QUIK нулевая. Нет даже возражений.
Не приходит полная версия OnTrade
 
Вопрос задан User12501.
Не приходит полная версия OnTrade
 
И все таки:
Цитата
TGB написал:
2. Если вам нужны данные по сделкам, то их можно получать готовыми из таблицы QUIK trade с помощью функции getItem. Зачем вы отрабатываете "сырые" коллбеки OnTrade?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
Когда я говорил о двойной очереди, я говорил именно о двух очередях.
    Из написанного вами о двойной очереди (по сути реализующей одну) я не понял между какими функциональностями робота они могут использоваться и что при этом не обеспечивается в QLua, выложенным мной давно известным вариантом?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
VPM написал:
Ну так это же просто двойная очередь, с которой я разбирался и только ленивый меня "по столу носом не возил".
    Эта очередь разбиралась пользователем Старатель около 4-х лет назад. "Все украли до нас" :smile: .
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
VPM написал:
Более медленный вариант, чем скажем кольцевой буфер? Можете архитектуру привести или пример?
     Не надо. Большинству пользователям достаточно использовать приведенный простой вариант, по эффективности мало отличающийся от вашего кольцевого буфера, который я видел. Но кто хочет может использовать и ваш.
Не приходит полная версия OnTrade
 
Цитата
User12501 написал:
Таким образом, до начала проверок и основного кода, ВСЕ trd сохраняются в текстовый файл.
   1. Всю обработку вы делаете в служебном потоке коллбека (отличным от потока main). Этот поток в QUIK один и он обслуживает все запущенные скрипты QUIK. Когда он занят вашей обработкой он перестает выполнять свои служебные функции, в том числе, обработку вновь возникающих данных по сделкам. Если нет служебной очереди внутри QUIK, то возможны потери возникающих данных. В вашем варианте желательно как можно быстрее выполнять коллбек, например, записывая trd в очередь между коллбеком и потоком main (со sleep(50) ), в котором выполнять остальную обработку таблицы trd. Вариант реализации очереди выложен мной в соседней ветке пользователя VPM.
   2. Если вам нужны данные по сделкам, то их можно получать готовыми из таблицы QUIK trade с помощью функции getItem. Зачем вы отрабатываете "сырые" коллбеки OnTrade?
Не приходит полная версия OnTrade
 
Цитата
User12501 написал:
Да. Примерно 10 минут.
   Не видя вашего кода, сложно что-то сказать, но попробуйте сделать  sleep(50)  и посмотрите что будет.
С задержкой 585000 ваш код в main практически отключен. Это так вами задумано?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
VPM написал:
А задача стоит, приврать систему если не в «надежную» то, в предсказуемо безопасную и рассуждая о ней как о risk - engine, а не просто коде? Что думаете не возможно?
     Возможно:
Цитата
TGB написал:
можно создавать скрипты работающие месяцами без перезапусков до очередного обновления windows.
    Это не теоретическое предположение, а существующие реализации. Но их основа, по возможности, простые решения с учетом сферы их применения.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
  И даже в рамках одной очереди, лучше использовать две, разбивая их на четные и нечетные. И писать, читать поочередно.Записал в четную, потом в нечетную, потом четную, нечетную.Читать нечетная, потом четная и т.д.Это частично может помочь избежать блокировок. Или просто случайным образом выбирать какую очередь использовать первую.
    По этой части есть возражение.
   Можно делать проще,  используя только одну очередь, реализованную таким образом, что в ней невозможны блокировки, если она используется только между двумя потоками (main и потоком коллбеков). Варианты реализации такой очереди на форуме выкладывались не один раз, но так как реализация короткая, то я повторюсь:
Код
----   Функции работы с очередями --
--- При использовании между потоком колбеков и потоком main очереди потокобезопасные. ---
--- Создать очередь 
function QueueNew()
   return  {first = 1, last = 0 }
end
---  Записать в очередь --
function QueuePush(self, v)
   if v == nil then error('!!! Ошибка. Параметр v функции QueuePush nil') end
   local last = self.last + 1 
   self[last] = v
   self.last = last
   return last - self.first + 1    -- количество элементов в очереди ---
end 
---  Читать очередь  --
function QueuePop(self)
   local  first =  self.first
   if  first > self.last then return nil   end 
   local v, v1  =  self[first], self[first + 1]
   self.first = first + 1 
   self[first] =  nil 
   v1 = type (v1) == 'string' and #v1 or 0
   return  v, v1   -- v1 -длина следующего элемента (если строка) ---
end
  
-- Текущий размер очереди ---
function QueueSize(self)
   return self.last - self.first + 1 
end 
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
VPM написал:
Проверка подхода, надёжной архитектуры: "FSM + события терминала как единственный источник истины",  приводит к такому количеству ситуаций, при которых сервис если не падает, то надежным точно не назовёшь.
   Кто вам сказал, что эта архитектура надежная? Зачем заниматься событиями QUIK, когда для торговли нужно знать состояние своего счета и какую то "картину" рынка? Зачем возиться с корутинами, если все можно сделать проще используя только функции?
   Вы легких путей не ищете :smile: .
   Как и любая готовая программа (в том числе наши собственные) QUIK несовершенен и у него есть недостатки и ошибки, но в нем, в текущей момент, можно создавать скрипты работающие месяцами без перезапусков до очередного обновления windows.
onstop и колбек пользовательского окна
 
Цитата
tohoki написал:
Когда пользователь закрывает терминал при запущенном скрипте, завершать работу скрипта не нужно, она должна продолжаться автоматом при следующем запуске терминала.
Код
while _RUN_ do
    ---Тело основного цикла скрипта --
end
if  TBL_QUIK then  -- Если используются таблицы QUIK
     -- #### Задержка sleep нужна чтобы установился признак запуска скрипта при перезапуске QUIK. 
     -- Иначе при перезапуске QUIK не будет перезапущен скрипт.--
     -- При нормальном завершении QUIK, если есть таблицы QUIK, они удаляются (и вызываются коллбеки QTABLE_CLOSE)
     -- Если при этом нет задержки, то скрипт завершается и не выставляется признак необходимости его перезапуска
     -- при запуске QUIK. Признак TBL_QUIK  устанавливается в основной пользовательской таблице QUIK. 
     -- Длительность задержки выбрана экспериментально.
     sleep(1000) 
end 

Не приходит полная версия OnTrade
 
Цитата
User12501 написал:
585 секунд
  У вас sleep(585000)???
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
 
Цитата
Йцукен написал:
Можете привести пример кода, где отключение сборщика мусора увеличит его выполнение?А то у меня наблюдается ровно обратная ситуация.
    1.
Цитата
TGB написал:
разработчики QUIK перед выполнением любого коллбека отключают сбор мусора, если  он был включен, а после выполнения коллбека, включают, если сборка мусора была до выполнения скрипта.
    2.
Цитата
TGB написал:
Надо ли это делать и когда и в какие интервалы, каждый решает для себя.
    Для себя я не вижу необходимости "дергать" сборку мусора. В начале main выполняю:  collectgarbage ('setpause', 200)  -- сборка мусора после увеличения памяти скрипта на 100% после очередной сборки. И все.   У меня сборка мусора возникает с интервалом ~15 сек. и длится < 1 млс.
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
 
Цитата
Йцукен написал:
Можно. А зачем?
     Сборка мусора выполняется в том же потоке, что и код пользователя и при этом код пользователя приостанавливается на время сбора мусора. У кого то из пользователей могут быть участки скрипта критичные по времени выполнения, на которых они имеют возможность отключать, но потом восстанавливать сборку мусора. Надо ли это делать и когда и в какие интервалы, каждый решает для себя. Например, разработчики QUIK перед выполнением любого коллбека отключают сбор мусора, если  он был включен, а после выполнения коллбека, включают, если сборка мусора была до выполнения скрипта. Надо понимать, что при отключении сбора мусора начинает непрерывно расти объем оперативной памяти скрипта. Включение сбора мусора возвращает прежний режим управления памятью скрипта.
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
 
Цитата
Йцукен написал:
В каком потоке это целесообразно делать: в OnCleanUp или в main?
   В main.
   Разработчики специально отключают мусорщик перед запуском коллбеков, чтобы те быстрее выполнялись. Это и все детали обработки коллбеков описаны в комментариях данной ветки.
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
 
Цитата
VPM написал:
особенно в скоростных алгоритмах
   Какие скоростные алгоритмы? Когда есть ограничение архитектуры QUIK. Факторами возможных задержек в нем являются <Реализация скрипта>  ->  <Реализация QUIK>  ->  <Используемая аппаратура ПК>  -> <Канал связи с брокером> -> <Сервер брокера> ->  -> <Канал связи брокера с биржей> -> <Биржа>.
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
 
Цитата
Йцукен написал:
Думаю такой подход сложнее, чем обработка колбеков.
   Обработка перезапусков скрипта по любой неконтролируемой вами причине у вас не предусмотрена? Пока он перезапускается заявки на бирже могут быть выполнены, а коллбеки пропущены.  Вы предполагаете что и коллбеки в работающем скрипте не теряются?
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 17 След.
Наверх