Система принятия решений и/или Нечеткая логика(FuzzyLogic)

Страницы: Пред. 1 2 3 4
RSS
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
Если речь была про задержку потока main, то да она должна быть.
Как раз хотел спросить: какую задержку выставлять в main после цикла обработки очереди от OnAllTrade и OnQuote? Я сделал 10 мс, может, есть более правильная задержка?
 
По опыту, если есть окно скрипта, то задержка не меньше 50 мс. Если его нет, то можно и 10, даже 5 мс, ориентируясь на нагрузку ЦП.
 
Все добрый день! Попалась хорошая ссылка на то что здесь пытались обсудить  https://blog.amd-nick.me/understanding-lua-coroutines  Второе  - перечитывая последнюю тему, заметил еще одно расхождение в рассуждениях и понятиях. Обработчики событий и коллбэки - это два механизма для вызова функций в ответ на определенное событие. Не смотря на то, что механизмы очень похожи, но есть существенное отличие. Обработчики событий обычно регистрируются на объектах, коллбэки передаются функциям в качестве аргументов. Ну в общем лучше взглянуть на примеры.
 
В продолжении темы асинхронности, собрал не большой пример для себя, такую "напоминалочку"  Вот код:
Код
-- 1) Запуск программы main в потоке терминала QUIK

-- 2) Запуск сопрограммы в потоке терминала main
local working = true -- Флаг для продолжения цикла
function Robot()

  local events = {} -- Таблица для хранения событий
  local routine = coroutine.create(function()-- Создание сопрограммы для отслеживания событий
    
    while working do -- Отслеживание событий и создание итераций
      
      -- ... (реализация отслеживания событий)
      local conect = coroutine.create(function()-- реализация отслеживания события соединения с сервером
          while working do 
            local event_conect = math.random(1,10) -- print("event_conect",event_conect)
            -- Добавление события в таблицу
            --table.insert(events, { event }) -- Добавляем данные события
            
            -- Если соединение установлено делаю Паузу до следующей итерации, Если нет соединение ждем.
            if event_conect >= 5 then coroutine.yield() else print("No conect?",event_conect) end
          end
      end)
      coroutine.resume(conect)
      -- ... (реализация отслеживания событий)
      local WorkTime = coroutine.create(function()-- реализация отслеживания события Рабочего времени
          while working do
            local event_WorkTime = math.random(1,10)
            --print("event_WorkTime",event_WorkTime)
            -- Добавление события в таблицу
            --table.insert(events, { event }) -- Добавляем данные события
            -- Пауза для отслеживания новых событий
            if event_conect >= 5 then coroutine.yield() else print("No WorkTime?",event_conect) end
          end
      end)
      coroutine.resume(WorkTime)
      
      -- реализация создания итераций для получения рыночной информации и ее обработки
      local event = math.random(1,10) print("event",event)
      -- Добавление события в таблицу
      table.insert(events, { event }) -- Добавляем данные события
      -- Пауза для отслеживания новых рыночных событий
      coroutine.yield()
    end
    
  end)
  
  -- Запуск сопрограммы coroutine.resume(routine)
  
  while working do -- Главный цикл для обработки событий (поток main)
    
    coroutine.resume(routine)-- Заход в сопрограмму для отслеживания событий
    if coroutine.status(routine) == "dead" then -- Проверка статуса сопрограммы
      print("Robot routine finished")
      break 
    end
    for _, event in ipairs(events) do-- Обработка событий из таблицы
      -- ... (реализация обработки событий)
      print("event",event[#event],#event)
      if event[#event] >= 5 then print("Buy") else print("Sell")  end
    end
    events = {} -- Очистка таблицы событий

    -- Заход в сопрограмму для дальнейшего отслеживания событий
    --coroutine.resume(routine)
    
  end
  working = false
end
Пример рабочий для этого добавлены случайные входа - это просто некий макет. Запуск функции Robot - print( Robot() ) в среде луа, запустит бесконечный цикл имитируя работу сопрограммы  в потоке main() запущенного в терминала QUIK. В чем смысл данного примера: Можно просто в main() написать логику работы программы и последовательно исполнять код. Данный код  демонстрирует асинхронный подход к воспроизведению кода программы. Сопрограмма запускается до основного цикла main() выполняется необходимая работа идет приостановка, выполняется работа в цикле main() по окончании идет возврат в сопрограмму, добавлены для примера еще 2 ниточки отслеживающие соединение и рабочее время  для примера. Хотел подробней описать, но смысла особого нет, сложно просто без запуска разобраться. Кому интересен подход запустит, и где нужно добавит комментариев.  Почему это лучше лучше почитать букварь. Всем хорошего кода.
Страницы: Пред. 1 2 3 4
Читают тему
Наверх