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

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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 24 След.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
Не очень понятно зачем писать очевидные вещи. Логарифмы как способ изменить шкалу используются очень-очень давно. И финансах в частности. Достаточно вспомнить любой расчет волатильности.
Америку то и не открываю, лишь на поминаю эти очевидные вещи, тем кто их подзабыл, в том числе и себе, для чего все это нужно. Если посмотреть алгоритмы столь именитых здесь программистов, то думаю 90% этих алгоритмов не учитывают обстоятельство со размерности. Нет когда робот работает с одним инструментом то и ладно, а когда портфель, то есть проблема. Именно это обстоятельство я озвучил. А подробно, на мой взгляд полезно, не все кто пишет подкованы как Вы, да и просто вспомнить.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
nikolz написал:
Не хватает примеров  
Вот на первую в скидку взял из букваря по финансовой математике.

Экспоненциальный рост описывается дифференциальным уравнением: dx/dt=kx, Решение этого дифференциального уравнения — экспонента x=ae^kt.
примером экспоненциального роста являются, сложные проценты, Общая сумма, которую получит вкладчик, при расчёте по сложному проценту будет равна  x*(1+a)^n,
Где x — начальная сумма вложенных средств,  a — годовая процентная ставка, n— срок вклада в годах.

При вкладе по ставке s% годовых, после первого года хранения капитал составил бы x плюс s% от неё, то есть возрос бы в (1+s/100)  раза. На второй год s% рассчитывались бы уже не от одной копейки, а от величины, большей её в (1 + s/100) раза. И, в свою очередь, данная величина увеличилась бы тоже за год в (1 + s/100) раза. Значит, по сравнению с первичной суммой вклад К году N первичный вклад вырос бы до величины в n раз больше первоначальной. (1 + s/100)^n

В применении к ежемесячной капитализации формула сложного процента имеет вид: (1 + s/100)^m/12,
где   x — начальная сумма вклада,  s — годовая ставка в процентах,  m — срок вклада в месяцах.

Разве ни чего не напоминает? И таких примеров Вы сами сколько угодно найдете, все дело в прикладном характере.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
nikolz,  Для того чтоб читать, нужно научиться читать
Цитата
VPM написал:
log(b)-log(a)=log(b/a), разница логарифмов двух цен a и b = логарифму относительного приращения b/a, то есть логарифму доходности.
А нести всякую "ахинею", ну Вам то уж не к лицу.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Хотел остановиться на освещении этой проблематики, так как собственно решение озвучено, но есть некая не досказанность. Сама десятичная система счисления, обладает фрактальными свойствами, благодаря их само подобной структуре и итеративным процессам.
0,1,2...9
10,11,12...19
Что само по себе при использовании функции доходности (отношение) уже может приводить не к однозначной оценке, когда цены находится в разных разрядах, нет, доходность которая поднимается с 10 до 11, эквивалентна доходности которая выросла со 100 до 110. Проблема возникает когда инвестор отвечает на вопрос "на сколько цены изменились за интервал времени".

В финансовой математике обычно расчеты ведут в процентах (доходность). Приращение цены в процентах обычно считается как (P2-P1)/P1, однако, данный способ имеет этот недостаток, т.е. если цена уменьшилась на 5%, а затем увеличилась на 5% мы не получим первоначальное значение. И здесь на помощь приходит оценка относительного изменения цен за период (интервал) времени.

Логарифм цены позволяет уйти от этого искажения, связанного с абсолютными значениями цены и перейти к относительной оценке.
Для инвестора имеет значение не столько, сколько стоит в настоящий момент инструмент, а на(во) сколько произошло относительное изменение цен за период (интервал) времени. Здесь смысл логарифма нужно озвучить: "инвесторы и трейдеры мыслят в терминологии «выросло в х раз», и не важно от каких уровней. Чтобы уровнять рост в х раз от разных уровней и используют логарифм".

Логарифмированные ценовые ряды обладают свойствами log(b)-log(a)=log(b/a), разница логарифмов двух цен a и b = логарифму относительного приращения b/a, то есть логарифму доходности.
Математически логарифмирование заменяет умножение сложением, то есть с помощью логарифма можно суммировать доходности за разные промежутки времени, функции роста изменяет свой темп (характер) от экспонетциального на линейный. Ну и еще одно, с точки зрения теории случайных процессов, логарифмы приращений цен Гауссовы (нормальны).
Чем пользоваться, как пользоваться решайте сами, надеюсь и любители попкорна чуть-чуть вспомнили финансовую математику, хороших алгоритмов.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
nikolz,  Термин на рынок подтянули за долго до моего появления на этом рынке, Билл Вильямс целую книжку выпустил, есть индикаторы. Позволяющие оценивать ее. Ни чего нового здесь нет. Графики ценового временного ряда на различных временных интервалах (минутные, часовые, дневные, недельные графики) помогает увидеть, как паттерны повторяются на разных временных масштабах. Вложенность мелкого тайм фрейма в старший, именно это свойство я имел ввиду.
Почему мои алгоритмы должны чем то отличаться? Ни чего нового все давно известно, разве входные данные. Проблема которую я описал возникла в алгоритме рассчитывающем функцию роста, входными данными которой являются hpr, но Nikolay,  прав нужно уйти в один масштаб, торговать пунктиками, тогда и оценка эффективности становится на место, логарифмическая школа скорее больше подходит для инвестиционных горизонтов, а с горизонтом 1 день - пунктики. Хотя подниму старое по экспериментирую и то и другое.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
Можно уже пункты отнормировать, чтобы цифры были близкие, как это делают при подготовке данных для моделей, например.
Поясните.

Вообще я про универсальный подход, который можно применять в своих алгоритмах не задумываясь, о разрядности чисел.
Вот это я использую, но чаще забываю
Код
-- Функция для нормализации цен
local function normalize_prices(prices, step)
    local normalized_prices = {}
    for i, price in ipairs(prices) do
        normalized_prices[i] = price / step
    end
    return normalized_prices
end
Отлично работают еще способы приведения к нормальному распределению, но хочется универсальности.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
TGB,  Вот именно об этом мое сообщение, что не корректны такие сравнения. :shock:  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay,  Я просто подумал что, за то время когда я последний раз открывал букварь по математике, человечество могло что - то придумать нового, новые подходы.
Поиск ни чего не дал, да и поисковики последнее время странно себя ведут, впечатление что идет не поиск, а навязывание какого то мнения в вперемежку с рекламой.
Нет нормализация как способ приведения данных к единому масштабу, мне конечно известен использую, от логарифмической шкалы отказался, теперь уже не могу сказать почему.
Но ведь есть инструменты котируемые к примеру 10000 и втб котировка 0.022957, разве тут уже чисто арифметически нет проблемы?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
nikolz,  Ни чего нового. Фрактальность, концепция, используется для описания сложных объектов (процессов), которые имеют повторяющуюся структуру на разных масштабах.
В контексте анализа временных рядов, проблема сравнения данных разных масштабов имеет значение для корректного анализа и принятия решений.
Классическая задача демонстрирующая данную проблематику, измерение длины береговой линии на разных масштабах (можно на гугл картах по экспериментировать).

TGB,  Ну очень остроумно, чтобы Вас хотя бы начали понимать окружающие, научитесь мысли формировать понятно, а предложений я жду от Вас, или страна напрасно Вас учила?.  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Всем добрый день!
И вот оно, торговая программа нашла себе все таки проблематику. Проблема лежит в прямой плоскости озвученной в заголовке данной ветки - системе принятия решений.
В чем смысл, если двумя словами то в масштабах, проблема чисто на мой взгляд математическая, давно известная человечеству, да и мне, просто откладывал ее решения на потом, видимо настал тот потом.
Дело в том, что я в своих программах использую такой показатель как HPR (Holding Period Return) представляет собой изменение актива за определенный период времени - отношение. То есть отвечает на вопрос "как ты ко мне относишься". В таком подходе, во всей своей красе, возникает маcштаб или фрактальность, всё б ни чего когда котировки цены разных инструментов одинаковы или близки.

Но программа засекает их уже, ну к примеру
актив GD (золото) котируется значениями pricce[1] = 2349.3 pricce[2] = 2349.6 шаг изменения 0.1,
и есть другой BR (нефть) котируется значениями pricce[1] = 77.33 pricce[2] = 77.49, шаг изменения 0.01,
необходимо найти их отношения и сравнить изменения для принятия решений, и вот он во все красе масштаб.
В первом случае ни одного сигнала, во втором на ура вылетают.

Кто незнаком с проблематикой, хорошо описана в работах Мандельброта. Вот я и подумал наверняка кто - то уже решал эту задачу.
Первое что приходит: нормализация к диапазону [0, 1], логарифмическое преобразование - лог доходности, приведение к общему масштабу, ну даже тяжело представить с чего тут начать.
В общем если кто занимался, будем признательны, думаю все сообществом.
Что изменилось в 11.1.1.11, что перестали приходить данные по CreateDataSource?
 
попробуйте так DataSource:Size() и проверьте константу INTERVAL_H1
Сложный индикатор с сохранением его данных для каждой свечи
 
nikolz,  Можно и читать иногда даже удобней, только нужно помнить, что пользоваться нужно небольшим количеством открытых окон для небольшого количества тикеров. Так ка все это дело приводи к замедлению терминала, а при большой нагрузке и к зависаниям. Здесь нужно добавить что организация алгоритма через замыкание позволяет один и тот - же скрипт использовать как в индукторах, так и в потоке main() что избавляет от избыточного кода.  
Сложный индикатор с сохранением его данных для каждой свечи
 
VelikiyTrader,  Для Вашей задачи удобней писать индикатор через замыкание, где вычисления происходят в анонимной области, а не обходимые таблиц сохраняете между вызовами, почему лучше писать не буду на форуме много обсуждалось, да и разработчики предлагают этот вариант.

Вот пример расчета средней, удачи.
Код
calcMean()
    
    local Price = {} -- Инициализируем для хранения таблицу
    local Mean = {}
    
    return function (I, FSettings, ds)
        I = I or 1
        ds = ds or nil
        FSettings = FSettings or {}
        local v_t = FSettings.v_t or 'C'
        local P = FSettings.period or 9
        local max_cache_size = FSettings.max_cache_size or 5 -- Максимальный размер кэша для Mean[I]
      local x = FSettings.x or nil
        
        local p0 = x or (Value(I, v_t, ds) or 0)
        Price[I] = p0 -- сохраняем
        
        if I == 1 then 
            Price[I] = p0
            Mean[I] = p0
        end
        
        -- Освобождаем память от старых значений Price[I]
        if I > P then
            Price[I-P] = nil
        end
        
        local sum = 0
        local n = math.min(I, P) -- Ограничиваем количество значений для усреднения
        for i = n, 1, -1 do
            sum = sum + Price[I-i+1] -- Берем только последние P значений
        end
        
        local mean = sum / n or p0
        Mean[I] = mean
        
        -- Освобождаем память от старых значений Mean[I]
        if #Mean > max_cache_size then
            table.remove(Mean, 1)
        end
        
        return mean
    end
end
SciTE
 
nikolz,  Спасибо, только не понятно где переключаете, и где и как подключается путь к исполняемому файлу луа разных версий?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
В продолжении темы асинхронности, собрал не большой пример для себя, такую "напоминалочку"  Вот код:
Код
-- 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 ниточки отслеживающие соединение и рабочее время  для примера. Хотел подробней описать, но смысла особого нет, сложно просто без запуска разобраться. Кому интересен подход запустит, и где нужно добавит комментариев.  Почему это лучше лучше почитать букварь. Всем хорошего кода.
SciTE
 
nikolz,  Я не совсем корректно выразился
Цитата
VPM написал:
nikolz,  А код scite полностью покажите.  
Имеется в виду строки, где вызываются разные версии Lua, в моем варианте это
command.go.*.lua;*.macro=dofile $(FilePath)
command.go.subsystem.*.lua;*.macro=3
SciTE
 
nikolz,  А код scite полностью покажите.  
SciTE
 
Цитата
Nikolay написал:
Но есть стандартная инструкция  https://code.visualstudio.com/docs/getstarted/locales Надо просто установить необходимый Language Pack.
Спасибо!
SciTE
 
Lua 5.1 - ответ внутреннего

>lua -e "io.stdout:setvbuf 'no'" "Безымянный0.lua"    
Lua 5.4  -ответ внешнего
>Exit code: 0    Time: 0.1171

Но это в коде опубликованном выше. Этот вариант подходит, нужно с кодировкой разобраться в консоль выводов "кракозябры" идут во втором варианте.
SciTE
 
nikolz,  print(_VERSION)
SciTE
 
Nikolay,  Воспользуюсь случаем, слетела русификация после обновления VSCode, не подскажете где копать?
SciTE
 
В SciTE, ну по крайней мере до версии указанной выше, в качестве внутреннего интерпретатора, используется Lua 5.1, и ее нельзя просто заменить на версию Lua 5.4. В статье выше был предложен вариант использования внешнего интерпретатора  в моем случае это Lua 5.4, для этого был скачен бинарные файлы для виндовс и сброшены в директорию где стоит SciTE. SciTE позволяет это дело автоматизировать, все манипуляции с вести к простому нажатию кнопочек (меню Tools "Компилировать", "Собрать" и "Выполнить").
Нажатие "Выполнить" запускает скрипт во  внутреннем интерпретатор, т.е. используется Lua 5.1
Нажатие "Компилировать" запускает компилятор внешнего интерпретатора, т.е. используется Lua 5.4
Нажатие "Собрать" должен запустить скрипт во  внешнем интерпретаторе, т.е. используя Lua 5.4
Это просто удобно, написал скрипт и простыми нажатиями делаешь проверки в разных средах. Сложности Возникают при вызове среды Lua 5.4 (3 задача), Сейчас код исполняется но куда то поддержка кодировки во внутреннем есть во внешнем нет.
Код
# Команда меню - Выполнить (F5)
# Скрипт запускается с помошью внутреннего интерпретатора Lua и вывод направляется в встроенную консоль
command.go.*.lua;*.macro=dofile $(FilePath)
command.go.subsystem.*.lua;*.macro=3

# Команда меню - Собрать (F7)
# Скрипт выполняется внешним интерпретатором
command.build.*.lua=lua -e "io.stdout:setvbuf 'no'" "$(FilePath)" $(1) $(2) $(3) $(4)
command.build.*.wlua="$(FilePath)" $(1) $(2) $(3) $(4)
command.build.subsystem.*.wlua=2
nikolz, Тут видимо дело в версиях, в Lua 5.3 есть поддержка Lua 5.1, а Lua 5.4 уже нет такой поддержки, да и изменения есть серьезные, которые не поддерживаются в ранних версиях.
Nikolay,  Так ведь просто удобно, нажал кнопочку и привет. Потом просто привычка, быстрая проверка кода, не отходя от "кассы".
Цитата
Nikolay написал:
Руками это компилировать?
Зачем руками собрали проект, нажали кнопку, Все. Не могу судить среды разработчиков, пробовал только VSCode, Notepad++. Первый сложный, второй не удобный, а тут блокнот со своей средой разработки супер!
SciTE
 
Скорее всего на прямую и нельзя, один и тот же код, выводит:

1 Вариант в среде 5.1
thread: 02AE4A58

2 Вариант в среде 5.4
thread: 00000000025ad4e8

Хотя может чего-то и не понимаю?
SciTE
 
Сейчас вот такой вариант
Код
# Команда меню - Собрать (F7)
# Скрипт выполняется внешним интерпретатором
command.build.*.lua=lua -e "io.stdout:setvbuf 'no'" "$(FilePath)" $(1) $(2) $(3) $(4)
command.build.*.wlua="$(FilePath)" $(1) $(2) $(3) $(4)
command.build.subsystem.*.wlua=2
SciTE
 
nikolz, С компиляцией порядок, она на своем месте и вызывается из директории  SciTE.exe, в моем случае вот код
Код
# Команда меню - Компилировать (Ctrl+F7) Lua 5.4 
command.compile.*.lua="Lua-5.4.1\luac.exe" -s -o "$(FileName).luac" "$(FileNameExt)"
Ваш вариант вызова на прямую
Код
# Lua 5.4
command.go.*.lua=D:/lua54/lua54.exe -e "io.stdout:setvbuf 'no'" "$(FileNameExt)"
у меня сразу не проходит, вот ответ "Lua: error checking global scope for command"
Сбросил в директории  SciTE.exe файлы Lua 5.4 так работает,  "Выполнить (F5)" = Lua 5.1   и "Собрать (F7)" = Lua 5.4, правда во втором варианте не работает кодировка (идут кракозябры)
SciTE
 
Добрый день!
Возможно кто-то уже сталкивался с подобно проблемой, и знает как исправить, подскажите?

Вот суть: Пользуюсь SciTE с незапамятных времен, и все меня в нем устраивало, кроме одного с переводом скриптов для использования в среде lua 5.4, стало неудобно пользоваться внутренним интерпретатором SciTE, так как SciTE использует lua 5.1. Оказалось простым усовершенствованием не обойтись, скачал SciTE RU-Board 3.55.102 в надежде что данная версия поддерживает lua 5.4, На деле оказалось lua 5.1. Почитал вот тут https://forum.script-coding.com/viewtopic.php?id=680. "Вообще, команды меню Tools "Компилировать (Ctrl+F7)", "Собрать (F7)" и "Выполнить (F5)" определяются параметрами command.compile, command.build и command.go в файлах .properties для соответствующих языков.
Т.е. можно задать абсолютно любую командную строку, которая выполнится при нажатии на эти клавиши, ..." Решение данной проблемы можно свести к добавлению в SciTE внешний интерпретатор языка Lua 5.4. "Работа в русской сборке SciTE с внешним интерпретатором языка Lua, таким, как Lua для Windows".
Добавил код в файл lua.properties, использовал инструкцию из данной заметки:
"Команду сборки по F7 можно откорректировать следующим образом:"
Код
# Команда меню - Собрать (F7)
# выполняем скрипт lua внешним интерпретатором
command.build.*.lua=lua "$(FilePath)"
command.build.*.wlua="$(FilePath)"
command.build.subsystem.*.wlua=2
"Таким образом, подсветка языка Lua будет и у .lua, и у .wlua. Файлы .lua будут запускаться по F5 встроенным способом, а по F7 — внешним интерпретатором".
На деле, после нажатия F7 и выполнение команды print(_VERSION), получаю вывод: "Lua 5.1" Понятно что не находит путь, где лежит lua 5.4, а как исправить не понимаю, подскажите, наверняка будет полезно не только мне.
Система принятия решений и/или Нечеткая логика(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:  Вы себя о позиционируете как опытного знающего программиста, не хотите обсудить код?
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 24 След.
Наверх