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

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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 18 След.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Все добрый день! Попалась хорошая ссылка на то что здесь пытались обсудить  https://blog.amd-nick.me/understanding-lua-coroutines  Второе  - перечитывая последнюю тему, заметил еще одно расхождение в рассуждениях и понятиях. Обработчики событий и коллбэки - это два механизма для вызова функций в ответ на определенное событие. Не смотря на то, что механизмы очень похожи, но есть существенное отличие. Обработчики событий обычно регистрируются на объектах, коллбэки передаются функциям в качестве аргументов. Ну в общем лучше взглянуть на примеры.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Да Вы абсолютно правы, я лишь варьирую вызовом, задержка нужна убрать лишние итерации слишком много не нужного образуется, да и логи тяжелые к концу торгового дня. Но это просто пример как можно.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay,  Возможно так понятней будет, накидал "рыбу".
Код
-- это main() создали основной поток
    -- создается сопрограмма 
    local routine = coroutine.create(Robot)
    while working do
   
      ---Запускается сопрограмма 
      local res, errmsg = coroutine.resume(routine)
      
      --(Обработка заказов (Orders) вызывает на каждой итерации сопрограммы)
      for trans_id, smartorder in pairs(SmartOrder.pool) do
        smartorder:process()
      end
     -- Здесь нет задержки
   end
   
function Robot()--сопрограмма
    
   -- Выполняется сопрограмма
   while working do
        
      for i=1,#sec do
          --... Обрабатываются стратегии
         rule[i] = 'buy'
         if then
             smartorder = 'buy'
              coroutine.yield() -- Переход в основной цикл
         end
      end
      sleep(1000)-- Здесь задержка
   end
end
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay,  Не совсем понял что такое функции с ожиданием (нужно попробовать). Я про второй вариант описанный мной, не что не мешает выполнять все последовательно, просто нужно  не ждать событие, а на каждой итерации основного цикла опрашивать.
Но в мое  варианте сопрограмма идет с задержками которые мы выставляем, у меня 1сек так как данные приходят так, здесь же идет расчет алгоритмом стратегий, расчет позиции,   RM и тд. Основной цикл без задержек на что способна луа ну и машина, есть свой алгоритм управление активной заявкой , ответы от терминала стандартны через функции обратного вызова. На мой взгляд это наиболее быстрый метод обработки ордеров, позволяет с тиками работать.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
nikolz,  Не буду с Вами спорить но техническим аспектам, наверняка Вы лучше меня разбираетесь, да и интересуют они меня только в рамках прикладных задач.

То что имеется ввиду про асинхронность в луа можно представить следующим образом:
Вариант1. Запустили поток main() и в нем шаг за шагом идет исполнение кода 1, 2, 3, 4, 5;
допустим 5 задача это сопрограмма, запустили ее, сделала свое дело и остановили. То этот подход конечно последовательный.
Вариант2. Моя текущая реализация программы следующая: Запустили поток main() в нем запускаю сопрограмму в ней выполняются стратегии, задачей которых создать приказ для выставления ордера, получив приказ, следует остановка сопрограммы, управление переходит в основной поток, в котором идет работа с ордерами и взаимодействие с терминалом, на новой интеграции основного потока все повторяется. Асинхронность здесь достигается за счет того что неизвестно когда сработает переход в основной поток.
В синхронном варианте мы просто последовательно опрашиваем задачи, в мое варианте не известно когда будет событие повлёкшее переход (мой "черт из табакерки").
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
Вам надо самому реализовать алгоритм переключения между задачами (thread scheduler). Надо его постоянно вызывать в бесконечном цикле.
Вот вариант предложенный.
Код
--Пример реализации алгоритма переключения между задачами в Lua. Планировщик задач извлекает задачи из очереди и выполняет их одну за другой, пока очередь не станет пустой.

--Алгоритм (thread scheduler) в Lua

--1. Первым шагом является создание очереди задач, которая будет хранить задачи, ожидающие выполнения. В Lua это таблица в качестве очереди.
local task_queue = {}

--2. Затем мы создадим несколько функций задач, которые будут выполняться нашим планировщиком задач.
function task1()
    print("Выполнение задачи 1")
end

function task2()
    print("Выполнение задачи 2")
end

function task3()
    print("Выполнение задачи 3")
end

--3. Теперь мы можем добавить наши задачи в очередь задач.
table.insert(task_queue, task1)
table.insert(task_queue, task2)
table.insert(task_queue, task3)

--4. Далее мы реализуем сам планировщик задач. Планировщик будет извлекать задачи из очереди и выполнять их одну за другой.
function thread_scheduler()
    while #task_queue > 0 do
        -- Извлекаем первую задачу из очереди
        local task = task_queue[1]
        table.remove(task_queue, 1)

        -- Выполняем задачу
        task()
    end
end

--5. Наконец, мы запускаем планировщик задач, вызвав функцию thread_scheduler().
thread_scheduler()

--Пример вывода:
--Выполнение задачи 1
--Выполнение задачи 2
--Выполнение задачи 3
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay,  Легкий поток в Lua - это сопрограмма, которая может быть приостановлена и возобновлена независимо от основного потока приложения. Это позволяет выполнять код асинхронно, не блокируя основной поток. Легкие потоки являются более легкими и эффективными, чем потоки операционной системы, что делает их подходящими для приложений с большим количеством одновременных задач.
Именно этот подход  я и хочу обсудить, применительно к нашей прикладной задачи. Отслеживать  события способом сопрограмм  с обратным вызовом, ну к примере как Вы предлагали сделать общею таблицу событий и ее обрабатывать, удобней наверно даже в виде класса, что можно было масштабироваться и забыть про эту проблематику.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay,  Ну ребята вы даете, куда понесло.

Но давайте с начало и обо всем и по порядку.

1. Мой пример и мои рассуждения касаются луа и только луа (а не абстракций);
2. луа  - одно поточен (пока, и "слава богу"!),
3. Сопрограмма в луа создает легкие потоки, они выполняются в одном потоке интерпретатора Lua.
4. Сопрограмму в луа,  не нужно путать с параллельным выполнением задач на нескольких ядрах, используя потоки операционной системы.
5. Синхронность и Асинхронность это понятия технические, заимствованные в IT, наверняка так как Вы описываете и даете ссылки, только луа тут причем.
6. Синхронность в луа это последовательное выполнение задачи.
7. Асинхронность в луа это "черт из табакерки"

И это не истина в последнем инстанции, это мое понимание возможностей программирования на луа, описание конкретного примера для более легкого понимания проблематики, вообще даже не собирался это обсуждать, если бы не пафос отдельных представителей данного форума, меня интересуют возможности данного подхода и недостатки, накидал другую модель из очереди, но опасаюсь сюда уже выкладывать.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
PS, не блокирует поток (это "ангельские" смыслы), на русском нужно читать  встраивается в поток, т.е. в приоритете данное событие.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Кажется я понял в чем идет путаница, асинхронность и параллельность - это два разных понятия!
Асинхронность означает, что операции выполняются независимо друг от друга и не блокируют друг друга. Это позволяет системе выполнять несколько задач одновременно.
Параллельность означает, что несколько операций выполняются одновременно на разных процессорах или ядрах.
  • Асинхронные операции могут выполняться на одном или нескольких процессорах, в то время как параллельные операции всегда выполняются на нескольких процессорах.
  • Асинхронные операции могут приостанавливаться и возобновляться, в то время как параллельные операции обычно выполняются без приостановок.
  • Асинхронный код обычно использует сопрограммы или обратные вызовы, в то время как параллельный код обычно использует потоки или процессы.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay, Асинхронность - это свойство системы или процесса, при котором операции выполняются независимо друг от друга и не блокируют друг друга. В асинхронной системе операции могут запускаться и завершаться в разное время, не дожидаясь завершения других операций. Какой из принципов луа нарушает?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
nikolz,  Ну о какой Вы последовательности исполнения говорите, событие или пришло в основную последовательность, забрав на себя исполнение, и сломав последовательность, или не пришло и все исполняется последовательно. На минутку подставим что у нас не одно событие, а отслеживаем несколько? И каждое выскакивает когда вздумается. Похоже нужно дать определения. Но ведь у нас не абстрактные рассуждения мы говорим о луа (а это значить по умолчанию один поток). последовательность исполнения в котором постоянно ломают сопрограммы.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay, Последовательное исполнение это когда мы за пустили скрипт и он сверху вниз читает этот скрипт и его исполняет шаг за шагом. Сопрограмма меняет этот порядок, может в любом месте возникнуть и туда же вернуться после исполнения, это и есть асинхронное исполнение, меняется последовательность исполнения задач! Уж не знаю где я утверждал что Сопрограмма создает новый поток? Я лишь говорил что не блокируется основной. Ну да ладно с этим. Вы лучше скажите, что Вы думаете о таком подходе?
 
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Специально для "не окрепших умов",  кто все таки решится попробовать в своих приложения использовать  сопрограммы луа.

Вот вкратце:  Сопрограммы - это легкие потоки, которые позволяют выполнять код асинхронно в Lua.
Функция coroutine.wrap() в Lua используется для обертывания обычной функции в сопрограмму.
Функция coroutine.wrap() принимает одну функцию в качестве аргумента и возвращает сопрограмму, которая может быть запущена и приостановлена независимо от основного потока.

Синтаксис: coroutine.wrap(func) Где: func - функция, которая будет обернута в сопрограмму.
Пример:
Код
-- Обернуть функцию в сопрограмму
local my_coroutine = coroutine.wrap(function()
    print("Hello from coroutine")
end)

-- Запустить сопрограмму
coroutine.resume(my_coroutine) -- Выведет "Hello from coroutine"
В этом примере мы обернули функцию my_coroutine в сопрограмму с помощью функции coroutine.wrap().
Затем мы запустили сопрограмму с помощью функции coroutine.resume(), которая вывела “Hello from coroutine” в консоль.

Особенности:
Сопрограммы могут быть приостановлены и возобновлены с помощью функций coroutine.yield() и coroutine.resume().
Сопрограммы совместно используют глобальную таблицу переменных с основным потоком.
Сопрограммы могут использоваться для реализации асинхронных задач, таких как обработка событий, сетевые запросы и т. д.

Важно:
Нельзя вызывать функцию coroutine.yield() в основном потоке.
Нельзя вызывать функцию coroutine.resume() с сопрограммой, которая уже завершена.

Дерзайте, удачи!
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
VPM написал:
Видимо что не так  с Модулем для генерации случайных чисел. Пробуйте критикуйте, пишите! Это один из подходов, он мне показался наиболее отражающим суть.
Проверил, генератор красавчик, ошибка в фикции вот поправленная
function generate_quote()
   local bid = math.random(100, 120)
   return {
       bid = bid,
       ask = bid-1,
       volume = math.random(1000, 5000)
   }
end
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Это вывод скрипта:
Переход в режим ожидания торгов
Сгенерировано событие: sell
Сгенерировано событие: sell
......

Видимо что не так  с Модулем для генерации случайных чисел. Пробуйте критикуйте, пишите!
Это один из подходов, он мне показался наиболее отражающим суть.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Вот один из вариантов:
Код
Пример с отслеживанием времени работы, событиями котировок и исполнением сделок, использующий случайные числа для входов:

math.randomseed(os.time())-- Модуль для генерации случайных чисел

function generate_trading_time()-- Функция для получения случайного времени торгов
    return math.random(0, 24) -- Возвращает случайное время в часах (0-24)
end
function is_market_open(trading_time)-- Функция для проверки, находится ли рынок в рабочее время
    return trading_time >= 9 and trading_time <= 17
end
function generate_quote()-- Функция для получения случайной котировки
    return {
        bid = math.random(100, 110),
        ask = math.random(110, 120),
        volume = math.random(1000, 5000)
    }
end
    local threshold = 110
function generate_event(quote)-- Функция для генерации события "купить" или "продать"
    if quote.bid > threshold then
        return "buy"
    else
        return "sell"
    end
end
--function execute_trade(event)-- Функция для имитации исполнения сделки
--    print("Исполнена сделка:", event)
--end

----- Функции для тестового примера:
--[[Описание:
  generate_buy_event() и generate_sell_event() генерируют события “купить” и “продать” соответственно на основе предоставленной котировки. События включают тип сделки, цену и количество акций.
  receive_event() имитирует получение события “купить” или “продать” из внешнего источника.
  execute_trade() имитирует исполнение сделки на основе предоставленного события.
--]]

function generate_buy_event(quote)-- Функция для генерации события "купить"
    return {
        type = "buy",
        price = quote.bid,
        quantity = math.random(100, 1000)
    }
end
function generate_sell_event(quote)-- Функция для генерации события "продать"
    return {
        type = "sell",
        price = quote.ask,
        quantity = math.random(100, 1000)
    }
end

function receive_event()-- Функция для имитации получения события "купить" или "продать"
    -- В реальном приложении эта функция должна получать события из очереди событий или другого источника.
    -- Здесь мы имитируем получение события, используя случайное число.
    math.randomseed(os.time())
    local event_type = math.random() < 0.5 and "buy" or "sell"
    local price = math.random(100, 120)
    local quantity = math.random(100, 1000)

    return {
        type = event_type,
        price = price,
        quantity = quantity
    }
end

function execute_trade(event)-- Функция для имитации исполнения сделки
    print("Исполнена сделка:", event.type, event.price, event.quantity)
end

coroutine.wrap(function()-- Отслеживание времени торгов
    while true do
        -- Получить текущее время торгов
        local trading_time = generate_trading_time()

        -- Проверить, находится ли рынок в рабочее время
        if is_market_open(trading_time) then
            -- Перейти в режим торговли
            print("Переход в режим торговли")
        else
            -- Перейти в режим ожидания торгов
            print("Переход в режим ожидания торгов")
        end

        -- Задержка перед следующим обновлением времени торгов
        coroutine.yield()
    end
end)()
coroutine.wrap(function()-- Отслеживание котировок и генерация событий
    while true do
        -- Получить котировку акции
        local quote = generate_quote()

        -- Сгенерировать событие "купить" или "продать"
        local event = generate_event(quote)

        -- Отправить событие
        print("Сгенерировано событие:", event)
    end
end)()
coroutine.wrap(function()-- Исполнение сделок
    while true do
        -- Получить событие "купить" или "продать"
        local event = receive_event() -- В этом примере мы имитируем получение события
        -- Исполнить сделку
        execute_trade(event)
    end
end)()

-- Основной цикл приложения
while true do
    -- Выполнять другие задачи, такие как управление пользовательским интерфейсом
end

end
Ну вот можно попробовать, в тестом варианте, асинхронный подход.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
TGB написал:
Цитата
VPM написал:
Да и я до соберу простую "рыбу"  выложу.
  Это не лечится ::  Сдаюсь
Не лечится на этом форуме только одно - флуд, (хотя если на жизнь этим зарабатываете, то и ладно, не понятно зачем вообще тогда диплом, хотя в жизни всякое бывает). Посчитай те сколько сообщений и хоть одно бы по теме было?  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
TGB,  То что Вы пропустили это не страшно, всегда можно почитать или взять курсы, самомнение с этим обычно жизнь разбирается. А то что красный диплом не научил высказываться аргументировано это не ко мне, удачи.
В качестве примера можете взять HackTrade чтоб до разобраться. Да и я до соберу простую "рыбу"  выложу.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
TGB, Вы поймите это мне
Цитата
TGB написал:
"по баробану"
Так как складывается впечатление что Вы часть лекций пропускали, ни какой аргументации, одни эмоции, извините ну мне не интересно :wink:  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 

Сопрограммы в Lua имеют несколько особенностей:

  • Они легкие по весу и не требуют много ресурсов.
  • Они не имеют собственного стека вызовов, а используют стек вызовов основного потока.
  • Они могут обмениваться данными с основным потоком с помощью возвращаемых и принимаемых значений.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Вот, что тут не так?
Библиотека coroutine в Lua предоставляет функции для работы с сопрограммами.
Сопрограмма - это легкий поток выполнения, который может быть приостановлен, возобновлен и выполняться параллельно с другими сопрограммами.
Сопрограммы могут быть полезны в различных сценариях, таких как:
  • Асинхронное программирование: Сопрограммы можно использовать для выполнения задач в фоновом режиме, не блокируя основной поток.
  • Конкурентность: Сопрограммы можно использовать для выполнения нескольких задач одновременно, используя одну и ту же среду выполнения.
  • Моделирование: Сопрограммы можно использовать для моделирования поведения различных агентов или объектов в системе.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
TGB,  Но Вы меня действительно удивляете,
Цитата
TGB написал:
После чтения истории, вы, наверное, сможете понять, что коллбеки и поток main выполняются последовательно
"что коллбеки и поток main выполняются последовательно" - не буду это комментировать, оставлю специалистам!!!  И совсем не понимаю, что Вас так разволновало, Вы не знакомы сопрограммами или функциями обратного вызова? Или Вам не известно что в LUA реализована неблокирующая, асинхронная обработка сопрограммы : События обрабатываются в фоновом режиме, что позволяет приложению продолжать выполнять другие задачи без блокировки, до вызова события? Ну так попробуйте пример. Уже все рассказал и показал.  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
TGB написал:
Цитата
VPM написал:
Что это за угроза я не понял  
   Начало обеспечения:
1. Зачем вы совою закомплексованность (много текста) выносите на общее обозрение?
2. Вы писатель, а не читатель?
Вы вообще о чем?  :shock:  Вы себя о позиционируете как опытного знающего программиста, не хотите обсудить код?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
VPM написал:
Если вы хотите продолжить общение со мной в стиле (посмотрите начиная со ссылки и до конца ветки):  https://forum.quik.ru/messages/forum10/message62917/topic7277/#message62917 ,то, при том что это мне не интересно, я вам это обеспечу.
Что это за угроза я не понял :shock:  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
TGB, История у форума огромная, и если есть на что сослаться, лучше давать ссылку, мы с Вами не так давно общаемся, чтоб я читал Ваши мысли, и давно уже всем предлагаю, обсуждать не мой стиль изложения а излагаемую проблематику, программирование на луа, меня это интересует. Да я не всегда бываю прав, и если это обосновано представлено всегда готов признать. А если нечего сказать по теме, то зачем плодить флуд, тем более что есть код.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
TGB, "Зачем козе баян"? В Ваш "неокрепший ум смуту" внести мне не под силу. Вам бы не мешало для начало научиться читать, от начало до конца,  улавливая смыслы. А поэтов здесь хватает и без Вас. Что писать, о чем писать когда, писать, кому писать .... позвольте мне решать, заранее благодарю.

Теперь по сути вот целиком к прочтению Специально для Вас дублирую.
Цитата
VPM написал:
Суть в следующем: В Lua относительно легко реализуется, событийно-ориентированная модель программирования, она хорошо подходит для обработки асинхронных событий. Такой подход позволяет приложениям Lua обрабатывать несколько событий одновременно без блокировки основного потока выполнения приложения. События обрабатываются в фоновом режиме, не прерывая поток выполнения приложения. В приложениях регистрируют функции обратного вызова для обработки конкретных событий. Когда происходит событие, соответствующая функция обратного вызова вызывается для его обработки, а затем управление возвращается потоку выполнения приложения. Такой подход (обработка асинхронных событий) мне показался логичным для обработки не торговых операций, к примеру отслеживаем время торгов, торги идут передаем управление в основной поток для проведения операций, отследили время остановки (событие пришло) остановили выполнение.
Ниже приведен пример, да же моей "козе" понятно что это сопрограмма. Функция обратного вызова зарегистрирована как сопрограмма для обработки различных событий. Известный факт, что  поток выполнения приложения не блокируется при ожидании событий. Не знаю что тут еще нужно комментировать,

Да я и не настаиваю ни на чем, гоняю тесты с данным подходом вызывая срабатывание разных событий, и предлагаю к обсуждению этот подход.  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Относительно не давно на форуме обсуждалась тема различных проверок до исполнения приложения и во время исполнения. Ветку честно говоря поленился искать, так как тема подходит для освящения данного вопроса и в этой, какие уж тут принятия решений, если данные получены не верные. Решил обсудить здесь, подход к этому вопросу предлагаю не совсем традиционный.  
Суть в следующем: В Lua относительно легко реализуется, событийно-ориентированная модель программирования, она хорошо подходит для обработки асинхронных событий. Такой подход позволяет приложениям Lua обрабатывать несколько событий одновременно без блокировки основного потока выполнения приложения. События обрабатываются в фоновом режиме, не прерывая поток выполнения приложения. В приложениях регистрируют функции обратного вызова для обработки конкретных событий. Когда происходит событие, соответствующая функция обратного вызова вызывается для его обработки, а затем управление возвращается потоку выполнения приложения.
Такой подход (обработка асинхронных событий) мне показался логичным для обработки не торговых операций, к примеру отслеживаем время торгов, торги идут передаем управление
в основной поток для проведения операций, отследили время остановки (событие пришло) остановили выполнение. Этот подход обеспечивает эффективное использование ресурсов, поскольку обработка событий происходит в фоновом режиме, быстро реагировать на изменения рынка. При последовательном выполнении все задачи выполняются одна за другой, в порядке их появления, часто это приводит к блокировке потока выполнения, особенно если отдельные задачи занимают много времени.
К недостатком асинхронной обработки событий можно отнести - сложность отладки, сложно отладить проблемы, связанные с событиями, поскольку они происходят асинхронно.
Не что не мешает регистрировать обработчик с управлением рисками, обработчик управлением позициями, стакана, чего угодно. Собрать полностью - Модель, ориентированною на события, обрабатывать большое количество одновременных событий без перегрузки системы. Помучившись один раз можно легко масштабироваться.
Код
coroutine.wrap(function() -- пример функции обратного вызова для отслеживания времени торгов
    while run do
        -- Получить текущее время торгов
        local trading_time = get_trading_time() 
        print('trading_time =',trading_time)

        -- Проверить, находится ли рынок в рабочее время
        if is_market_open(trading_time) then
            -- Перейти в режим торговли
            start_trading()
            
        else
            -- Перейти в режим ожидания торгов
            stop_trading()
        end

        -- Задержка перед следующим обновлением времени торгов
        coroutine.yield()
    end
end)()
coroutine.wrap(function() -- пример функции обратного вызова для обработки событий котировок акций
    while run do
        local quote = generate_quote() -- Получить котировку
        process_quote(quote) -- Обработать котировку
    end
end)()
Без ЦЕНЫЕ сделки, Кто то не верно предоставляет котировки, или перерисовка в QUIK
 
Цитата
Дмитрий написал:
Логика такая: берется график старого фьючерса GOLD-3.24, переименовывается в новый GOLD-6.24 и в нем начинаются накапливаться новые данные. Поэтому у вас на графике GOLD-6.24 отображаются сделки за вечерку 20.03 на данных от GOLD-3.24
Да же если Ваша логика верна, разве она отменяет тот факт, что квик формирует не верную информацию, делая подмену данных?
Без ЦЕНЫЕ сделки, Кто то не верно предоставляет котировки, или перерисовка в QUIK
 
Дмитрий,  Вы к разработке имеете какое то отношение? Ваша логика (если она в этой ситуации есть) в "пух и прах" разваливается о тот момент, что при загрузки терминала  
Цитата
VPM написал:
авто замена с GOLD-3.24 на GOLD-6.24  прошла 22.03.24г., ну по крайней мере был запрос и мое согласие
спрашивается, если уже ранее прошла замена, терминал зачем формирует и шлет повторные запросы?
Второе, я - пользователь и вообще не желаю вникать, что на что накладывается, а желаю получать достоверную информацию с биржи, и заявляю разработчикам QUIK о проблеме, проблема очень серьезная, не смотря на то что версия уже 11, а "воз и ныне там", и это как минимум предоставление не верной информации, я уже на этом форуме об этом заявлял. В конце концов есть уникальный идентификатор котировки это дата и время, так как квик транслирует временной массив.
Помогите новичку с индикаторами., Код индикаторов.
 
Aleksandr_1024, Не нужно ничего не куда вставлять, Вам нужно на этом форуме найти ссылку на индикаторы на писанные на луа от разработчиков квик скопировать ее и следовать инструкциям которых очень много на этом форуме, да и на других сайтах посвященных трейдингу. Удачи, ничего сложного нет, но разобраться нужно Вам самому.  
Без ЦЕНЫЕ сделки, Кто то не верно предоставляет котировки, или перерисовка в QUIK
 
Дмитрий,  авто замена с GOLD-3.24 на GOLD-6.24  прошла 22.03.24г., ну по крайней мере был запрос и мое согласие, да и без разницы что делал пользователь, Вопрос заключается, почему пропадают исторические данные? Почему QUIK перерисовывать те данные которые у него уже были?
Даже если пользователь в это время "стоял на голове", сто это меняет.
Без ЦЕНЫЕ сделки, Кто то не верно предоставляет котировки, или перерисовка в QUIK
 
Уважаемые разработчики, обратите внимание на ситуацию:
Не первый раз случается такая ситуация, на примере сделок от 20.03.24г. тикер GOLD - 6.24, открыл позицию в шорт цена 2233, терминал загружен 21.03.24г, отражает цену  которая не превышает 2185.
детально можно посмотреть в скринах.

1. Что это такое?
2. Как сделать так чтоб терминал отражал реальные котировки?
з. Как сделать так чтоб история котировок хранящаяся в QUIK не пропадала, пропадают исторические данные между двух дат в интервале котором котировки должны быть?

Версия QUIK 11.1.1.11, В общем вся информация есть в скрине.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
----- lifo из двусвязной очереди и пример позволят вести себя как стек - обеспечивая LIFO-порядок.
Скрытый текст

Еще одна реализация стека, по сути это тоже самое что и в букваре только реализация в виде класса, просто удобней пользоваться., наследуется без проблем, легко дописать фифо. У себя делаю лифо  для контроля памяти, создавая динамические окна. Выкладываю может кому еще сгодится.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
nikolz написал:
Все, что Вы повторяете из прочитанных Вами книжек есть лишь пересказ чужих рассуждений. ------Возможно будет работать, а возможно и нет.-----Есть еще множество различных рассуждений в  подобных книжках.
Так  и я про это, очень много чего понаписано на тему трейдинга, полезного мало, вот и заостряю внимание на полезном на мой взгляд, рассуждаю о том что практикую, а цитирую для понимания вопроса.
Цитата
nikolz написал:
Было бы интересно увидеть результат применения ваших скриптов хотя бы на истории, которая уже есть в КВИКЕ.А написать что-то на луа ,да еще без тестов - это может любой начинающий.
Так я же говорю, что у меня  стадия разработки, довожу программу, вот тесты показали недостатки в управлении капиталом переделываю и некоторыми соображениями делюсь, вообще мои посты это последовательность разработки моей программы. Торговые стратегии еще даже не отлаживал, на кидал примеры, это собственно основное ради чего все делается.
К стати если не жалко поделитесь индикатором для вывода кривой Equity, наглядно а руки не доходят. Что касается вопроса писать на луа, это простой пример, почему удобно строить структуры, и ими оперировать, плюс не сколько простых формул.
Цитата
nikolz написал:
Покажите хотя бы какой-нибудь результат. Ну хотя бы советника , который будет иметь положительное мат ожидание сделок хотя бы на истории.-------------------Уверен, что не получится.  Можете доказать иное?
Ну Вы меня тут удивляете, Вы выкладываете картинки, где у Вас показан рост  кривой Equity, я не думаю что Вы не знаете как рассчитывается мат ожидание? Я лишь покажу как я это применяю, да и делал про это сообщения ранее.  У меня написан класс  local result={}; в нем определяю параметры необходимые для учета и анализа сделки, сделка здесь своя (т.е. закрытие или уменьшение позиции).
далее реализую метод (функцию)  function result:Evaluating_Trading_Systems(res) на вход которой, подаю массив res={} local symbol=res.id; local d=res.d;local t=res.t;local sW=res.w;local nW=res.nw;local sL=res.l; local nL=res.nl;  local Q = nW+nL; где nW,nL - количество выигрышных, проигрышных сделок; sW,sL - выигрыш, проигрыш в пиктах.
расчет 3 основных показателей:

Мат. Ожидание считаю по формуле: МО = (%прибыльных Х средняя прибыль) - (%убыточных Х средний убыток).
ПРОФИТ-ФАКТОР (profit factor) - отношение суммарного выигрыша от всех прибыльных сделок к суммарному проигрышу от всех убыточных. Имеет смысл  с реинвестированием.
Процент прибыльных сделок (Percent Winning Trades)  local pWT = Q~=0 and pWT = nW/Q or 0;

Это основные без которых не возможно спроектировать систему, остальные вспомогательные.

в роботе делаю вызов после каждой сделки, ну собственно про это уже писал  нет смысла повторяться.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
"на фига козе баян", Кто же не умеет считать среднее арифметическое и стандартное отклонение, это фундамент тех. анализа. А все дело в производных, в "побочных продуктах" как говорит автор, которые мы можем рассчитать определив оптимального f.

Заметил ошибку надо исправить строку local standard_deviation = math.sqrt(variance_HPR), т.е. перейти от дисперсии к отклонению.

И так правило номер два торгуем с левой стороны от оптимального f, в в теории конечно нужно на вершине, но на практике есть маржинальные требования. Что дает нам расчет побочных продуктов, прежде всего отвечает на вопрос, каким количеством эффективно нужно торговать, какое нужно количество сделок нужно для достижения цели, какой необходимо поддерживать депозит для эффективной торговли и много еще чего, кроме того сделка ка бы хеджируется, но просадки все рано могут быть значительно глубокими. Всего не возможно рассказать в рамках поста, добавлю лишь как я всем этим пользуюсь, рассчитываю 2 раза, в начале при проектировании сделок, затем по результатам моей ТС, анализирую и провожу корректировку.
Сейчас все приделываю под портфель, ввожу 3 стратегии управления, и здесь есть существенные отличия!
Дерзайте, всем хорошей торговли.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Пишу и тут же выкладываю проверяйте на ошибки
Код
-- Этот класс equation содержит функции для расчета среднего HPR, дисперсии HPR, средневзвешенного f и среднего геометрического.
-- Определение класса equation
equation = {}

-- Функция для расчета среднеарифметического АHPR, дисперсии SDHPR и средневзвешенного f
function equation.calculate_mean_and_variance_with_f(HPR_values, f_values)
    local n = #HPR_values
    local mean_HPR = 0
    local total_f = 0

    -- Расчет среднего HPR
    for i = 1, n do
        mean_HPR = mean_HPR + HPR_values[i]
        total_f = total_f + f_values[i]
    end
    mean_HPR = mean_HPR / n

    -- Расчет дисперсии HPR
    local sum_squared_diff = 0
    for i = 1, n do
        sum_squared_diff = sum_squared_diff + (HPR_values[i] - mean_HPR) * (HPR_values[i] - mean_HPR)
    end
    local variance_HPR = sum_squared_diff / n

    -- Подсчет средневзвешенного f
    local mean_weighted_f = total_f / n

    return mean_HPR, variance_HPR, mean_weighted_f
end

-- Функция для расчета среднего геометрического с учетом полученных значений AHPR и стандартного отклонения
function equation.calculate_geometric_mean(AHPR, standard_deviation)
    local geometric_mean = math.sqrt(AHPR^2 - standard_deviation^2)
    return geometric_mean
end

-- Пример использования класса equation
local HPR_values = {0.05, 0.03, 0.07, 0.01, 0.06}
local f_values = {0.1, 0.15, 0.2, 0.05, 0.1}

local calculator = equation
local mean_HPR, variance_HPR, mean_weighted_f = calculator.calculate_mean_and_variance_with_f(HPR_values, f_values)

print("Среднее HPR: " .. mean_HPR)
print("Дисперсия HPR: " .. variance_HPR)
print("Средневзвешенное f: " .. mean_weighted_f)

local AHPR = mean_HPR
local standard_deviation = variance_HPR
local geometric_mean = calculator.calculate_geometric_mean(AHPR, standard_deviation)
print("Среднее геометрическое: " .. geometric_mean)

Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Итак, условие первое, у нас должна быть торговая система с положительным мат. ожиданием (здесь торговая система - ТС, это наш свод правил, которыми руководствуемся в принятии торговых решений).  Для начала, ТС "от бек-тестили", в результате  получили какой то массив, тех самых HPR, создаем уравнение для нашей системы,   для чего находим 3 показателя среднего AHPR, дисперсии SDHPR и среднегеометрического GHPR.
Код
---- пример  расчета HPR (Holding Period Return):
--Эта функция принимает начальную цену актива, конечную цену актива и доход за период. Она вычисляет и возвращает показатель HPR (Holding Period Return) для данного периода владения.
function calculate_HPR(start_price, end_price, income)
    return ((end_price + income) / start_price) - 1
end

-- использования
local start_price = 100  -- Начальная цена актива
local end_price = 120    -- Конечная цена актива
local income = 5         -- Доход за период

local hpr = calculate_HPR(start_price, end_price, income)
print("HPR: " .. hpr)
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Свой подход я основываю на работах Ральфа Винcа. Ральф Винc, от управляющего (money manager) у известного трейдера Ларри Вильямса на знаменитом чемпионате, до профессионального управляющего фондом. Начиная обсуждение данной темы, не получится обойти основ на чем зиждется тема, по той причине что кто уже знаком с темой ничего нового я не скажу, а тем кто не знаком не обсудив основ ни чего не поймешь. Поэтому чуть чуть "от себя-тины", но в любом случае лучше познакомиться с работами автора, это 3 книги с изложением очень важного материала, а может и самого важного в трейдинге. Автор отвечает на такие вопросы как можно эффективно торговать и оставаться на плаву,  излагает свою методологию (я бы даже применил термин "разжевывает"), указывает на дорожку, по которой можно попасть к тем самым "2% трейдеров". Он вводит в оборот основное уравнение торговли, понятие оптимальная фракция, показатель HPR (Holding Period Return) измеряющий результат сделки (доходности) за период владения.
Заканчивая вступление добавлю лишь, насколько важно управление капиталом, вот от автора "Наше согласие или несогласие с этими закономерностями никак не отражается на том факте, что они властвуют над нами". Не до понимание вопросов управления может убить, самую шикарную торговую систему, и на оборот есть стратегии управления капиталом, которые вытягивают торговую систему с отрицательным мат. ожиданием (Но это не наш путь).  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Начиная переделку своей программы, (переходу от торговли конкретным инструментом к алгоритмической торговле портфелем), сильно не до оценил сложность такого подхода, но это в свою очередь заставило более глубже погрузиться в тематику. Заканчивая переделку, в плотную подошел к вопросу управления портфелем, позицией, в благодарность тем кто принимал участие в обсуждениях, с объяснениями, выступал со здоровой критикой, выкладывал примеры, публиковал открытый код, со своей стороны хочу показать несколько приемов по этой тематике, которые использую в своей программе.

Но прежде чем начать, пару мыслей вслух:
Часто на форуме обсуждается вопрос о не хватке времени, исполнения программ на lua, для себя не вижу задачи, где бы при торговли через сервер брокера, время исполнения основного цикла требовалось менее 1 секунды, да QUIK умеет работать с миллисекундами, но что толку если в терминале информация обновляется раз в секунду. Но даже при этом в своих постах, публиковал подход с которым можно подключаться к инфраструктуре биржи и проводить торговые операции со скоростью исполнения скрипта lua, без всяких тормозов, и зависания процессора.
Еще одна тема, это часто слышно в адрес lua, что с ним что то не так, не хочу погружаться в эти вопросы, скажу про то что мне нравится. Известно что lua - это язык сценариев, это его сильная сторона, поэтому писать, а за тем и исполнять код лучше на сильной стороне, а это таблица, из которых легко, красиво, просто и понятно строятся структуры, а при необходимости доводится и до объекта. Это все равно, что оперировать не отдельными буковками, а целыми предложениями, а лучше даже образами. Такой подход избовляет от использования повторного кода, здесь действует библейский принцип "по оброзу и подобию", что значительно упрощает не только создание программы, но и значительно улучшается чтение и понимание логике заложеной в алгоритме. Это всего лишь мои наблюдения, а применять или не применять решает каждый сам за себя.
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
TGB написал:
2) Интерфейс  взаимодействия QUIK c Lua-скриптом пользователя, реализованный в виде коллбекков, предполагает многопоточный режим использования Lua,. порождающий неприятные проблемы параллельного программирования (для решения которых сами же разработчики предлагают использовать потокобезопасную очередь между коллбеками и потоком main). Мне представляется, что имеет смысл вместо коллбеков использовать активную очередь событий, При этом не требуется использовать Lua в многопоточном, редко используемом и не очень стабильном режиме. При этом не будет проблем с подключением новых версий Lua. Более того, скрипты пользователя будут выполняться несколько быстрее из-за отсутствия синхронизации, требуемой в многопоточном варианте использования  Lua.


TGB,  Не люблю высказываться на подобные темы, но ту Вы даже меня удивили. Мир стоит на пороге квантовых вычислений, а Вы предлагаете еще дальше откатиться в средние века. Создать "активную очередь событий" не знаю что Вы под этим понятием имеете ввиду, но очередь предполагает последовательное выполнение (вычисления) кода.  О какой же многопоточности речь идет, все коллбекки исполняются в основном потоке, асинхронность создается в момент срабатывания функций обратного вызова, т.е. вызвали что то сделали и снова последовательное выполнение. При этом Вы сами пишите отвечая nikolz,  "... в QUIK существует служебный, так называемый основной единственный поток, выполняющий то, что перечислено мною выше?", получается что нужно отказаться от отдельного потока main и выполнение main разместить в основном потоке , при этом создав "активную очередь событий".
Цитата
TGB написал:
В Новосибирске, когда то была хорошая школа IT-шников. И что-то, наверное, от нее осталось. Я надеюсь, что архитектором QUIK в текущий момент является один из выпускников этой школы.
Школа как была отличной, так и остается, и дело на мой взгляд не в программистах, а в том как управляется проект (в главном конструкторе). Даже пример этого форума показывает Нельзя отпускать программиста (понапишут такого), без  контроля инженера (следящего за прикладным характером задачи) .
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Всем добрый день!
Подошел у себя к встраиванию еще одного концепта - Конечный автомат (Finite State Machine, FSM) , точнее сказать он уже используется, так как на его прицепах построен фреймворк HackTrade,
я лишь описал таблицу, position и  таблицу инструкции для создания ордера, а также состояние самой торговой системы.

Кратко о чем речь,
"FSM - это абстрактная модель, которая описывает поведение системы с помощью конечного набора состояний, переходов между этими состояниями и действий, происходящих в ответ на эти переходы".
"FSM используется для моделирования и анализа различных систем, таких как программное обеспечение, коммуникационные протоколы, устройства управления и т. д. Он помогает инженерам и разработчикам понять и предсказать поведение системы в различных ситуациях, выявить возможные проблемы и оптимизировать работу системы."

Вот пример простого использования конечного автомата (FSM), для моделирования и анализа систем. Этот пример показывает, как можно использовать конечный автомат на Lua для моделирования системы с различными состояниями и переходами между ними.
Скрытый текст
Что изменилось в версии 11.1.1.11?
 
Nikolay,  Просматривая форум, обсуждение этой тематики можно найти, с самого момента появления lua в quik. В основном пишут те, кто хорошо разбирается в quik и lua. Одни и те же проблемы в течении ряда лет, практически не зависят, от версий quik или lua, не ужели не приводят к мысли, создать модуль, опубликовать его, обсудить, и забыть при использовании этого модуля про проблематику?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Всем добрый день!
Проведённые тесты, показали необходимость модернизации в программе модуля - генератор сигналов. Переписал, сделал поступление сигналов в потоке от разных временных интервалов (разные ритмы). Технически, такой подход, позволяет более четко выделять несущею частоту сигнала, организационно просто выбираются правило на исполнение. Это в свою очередь повлекло переделку модулей учета позиций, учета результатов. Часть модулей, не просто таблица lua, а реализовано в виде ОПП. Ранее я касался этой темы, но остался главный вопрос. В каких случаях просто достаточно таблицы lua, а когда просто необходимо ОПП? Я о каком то принципе чтоб с одного разу понимать необходимость собирать ОПП. Перечитал на эту тему материалы вот понравилось https://habr.com/ru/articles/259265/ делюсь.
Перестал работать скрипт в 11.1.1.11
 
sandyman,  Вам просто нужно заменить unpack на table.unpack, это изменения в версии lua/
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay,  Понравилась Ваша реализация вот эта
Цитата
Nikolay написал:
Как и другие его циклические индикаторы  CyberCycle
У меня есть свои, но у Вас тут целая торговая стратеги, хочу попробовать в месте с индикатором модели рынка, посмотрю как будет, один из вариантов погоняю с нечеткой логикой. Супер спасибо!
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Чувак, да ты пойми, не каждому дано, кто то хороший математик, кто то физик, а чтоб торговать даже умным не нужно, быть достаточно удачно торговать! :smile:  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Игорь М написал:
Чувак
Все супер, обучили, разжевали, просветили, все супер чувак, огромное спасибо.
Только пару ремарок.
1) Права и обязательство по договору и технологии применяемые для торговых операций, чуть чуть, ну совсем чуть чуть разные вещи! :smile:
2) Повод причина и следствие,  чуть чуть, ну совсем чуть чуть разные вещи! :smile:

А так все супер, обязуюсь все свое свободное время чувак, использовать на изучение предмета!
Цитата
Игорь М написал:
Вот вы поняли, например, кем и чем NG привязан? Или завтра гэп вниз на NG опять из-за действий какого-то вашего ММ произойдет?
А позвольте узнать ПРИЧИНУ? Заранее при много благодарен, чувак!
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
Я такой индикатор писал  https://github.com/nick-nh/qlua/blob/master/corrCycle.lua Как и другие его циклические индикаторы  CyberCycle ,  CenterOfGravity ,  InstantaneousTrend ,  MESA
Ну нет это что то новое, я ранние Ваши работы видел, посмотрю внимательней.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Владимир написал:
Весь этот маразм с "уровнями поддержки/сопротивления" действительно иногда работает, но только потому, что стадо баранов верит в эти бредни и ведёт себя так, как если бы они в действительности существовали.
Ну прямо прогресс какой то, теперь нужно назвать хоть одну причину почему они образуются, а программировать Вы правы не нужно, есть простые и более элегантные методы.
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 18 След.
Наверх