Очереди и двойные очереди в луа

Страницы: Пред. 1 ... 12 13 14 15 16 ... 26 След.
RSS
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
В результате этого появилась теория и методы робастного оценивания.
написал: nikolz, Приведите пример.
Цитата
Nikolay написал:
С этим не поспоришь.
Да еще как поспоришь, но речь не об этом. Быть успешным не обязательно быть умным и грамотным :smile:  
 
Цитата
VPM написал:Nikolay написал:
Цитата
Двоичный поиск вполне быстро найдет его, надо просто перейти на числовое представление времени (unix time).
А можно пример.

Вот простейшая реализация

Код
local function is_date(val)
    if type(val) ~= "table" then return false end
    local status = pcall(function() return os.time(val); end)
    return status
end

local function get_time_index(ds, time)
    local bs
    function bs(bi, ei)
        local i2 = math.ceil((ei-bi)/2) + bi
        while not is_date(ds:T(i2)) and i2 < ei do
            i2 = i2+1
        end
        if not is_date(ds:T(i2)) then return end
        local t = os.time(ds:T(i2))
        if ei - bi == 1 then return ei, ds:T(ei) end
        if t > time then return bs(bi, i2) end
        if t < time then return bs(i2, ei) end
        return i2, ds:T(i2)
    end
    return bs(1, ds:Size())
end

local ti = get_time_index(ds, os.time({hour = 9, min = 33, sec = 0, day = 1, month = 11, year = 2023})

 
Nikolay, Спасибо ушел разбираться.
 
Цитата
Nikolay написал:
Вот простейшая реализация
Не чего себе простейшая? Прокомментируйте пожалуйста ф. обратного вызова. Не понимаю откуда возникают gthtvtyyst bi, ei ?
 
Цитата
VPM написал:
Не чего себе простейшая? Прокомментируйте пожалуйста ф. обратного вызова. Не понимаю откуда возникают gthtvtyyst bi, ei ?
Это элементарная рекурсия. Есть первый вызов с 1 и ds:Size(). А потом каждый раз делится пополам интервал.
 
Проба пера, вот время заказа  os.time({hour = 9, min = 00, sec = 0, day = 14, month = 11, year = 2023})

ответ с 4 тайм фреймах
[Tue Nov 14 15:50:16 2023] Trace: Source:  SPBFUT, BRZ3, 1
[Tue Nov 14 15:50:16 2023] Trace: Source:  SPBFUT, BRZ3, 5
[Tue Nov 14 15:50:16 2023] Trace: Source:  SPBFUT, BRZ3, 120
[Tue Nov 14 15:50:16 2023] Trace: Source:  SPBFUT, BRZ3, 1440
[Tue Nov 14 15:50:16 2023] Info: BRZ3; 1; 65537!
[Tue Nov 14 15:50:16 2023] Info: [65537] 14/11/2023; 9:0:0; o[65537]=83.42; h[65537]=83.43; l[65537]=83.33; c[65537]=83.35
[Tue Nov 14 15:50:16 2023] Info: BRZ3; 5; 65537!
[Tue Nov 14 15:50:16 2023] Info: [65537] 14/11/2023; 9:0:0; o[65537]=83.42; h[65537]=83.43; l[65537]=83.33; c[65537]=83.4
[Tue Nov 14 15:50:16 2023] Info: BRZ3; 120; 5516!
[Tue Nov 14 15:50:16 2023] Info: [5516] 14/11/2023; 10:0:0; o[5516]=83.4; h[5516]=83.42; l[5516]=83.03; c[5516]=83.27
[Tue Nov 14 15:50:16 2023] Info: BRZ3; 1440; 1093!
[Tue Nov 14 15:50:16 2023] Info: [1093] 14/11/2023; 0:0:0; o[1093]=83.43; h[1093]=83.43; l[1093]=82.42; c[1093]=82.82


На минутных отрабатывает, на Н2 идет сбой?
Цена открытия сессии
на D1 14/11/2023; 0:0:0; o[1093]=83.43;
на M1 M5  [65537] 14/11/2023; 9:0:0; o[65537]=83.42;
 
Я же написал, что это упрощенный вариант. Выше писал, что надо учитывать ситуации когда искомая точка находится внутри бара. В данном случае время 09:00 будет внутри бара 08:00-10:00.
Т.е. надо добавлять еще проверку на границы, останавливаться когда одна из границ это начало искомого бара.
 
Понятно, написал и забыл не получится покрупней мере у меня :sad:

А что делать с ценной открытия, это даже не техническая ошибка.
Не хочется таких слов произносить, но другие не находятся - это выглядит как "прямая манипуляция рынком".
Но это уже вопрос к разработчикам?
Как такое возможно?
 
Цитата
VPM написал:
Понятно, написал и забыл не получится покрупней мере у меня  

А что делать с ценной открытия, это даже не техническая ошибка.
Не хочется таких слов произносить, но другие не находятся - это выглядит как "прямая манипуляция рынком".
Но это уже вопрос к разработчикам?
Как такое возможно?
Ну так все зависит от задачи. Алгоритм простой. Можно все еще проще сделать. Просто циклом бежать от последнего к первому бару и найти тот, где время входит в бар.
Уж проще некуда. Если бар есть, а его может не быть, то у него есть данные.
 
Цитата
Nikolay написал:
Ну так все зависит от задачи. Алгоритм простой. Можно все еще проще сделать. Просто циклом бежать от последнего к первому бару и найти тот, где время входит в бар.
Задачу не очень наверно понятно описываю, попробую по другому.

Так как торговля внутридневная , то анализ делаем дневного бара на истории которую хранит квик.
наименьший день  которую хранит квик будет определять наименьший  тф М1,
так как все тф. меньше дневного входят в него, то прогоняя цену ds[M1]:C(index)  по разным тф. >M1 < D1,
можно оценивать т.входа, т.выхода, стоплосс, такепрофит, оценивать алгоритмы и много чего, с выводом необходимых меток на график.

Как я делал был 1 инструмент, данные читал с графика,
задавал точку входа да и просто циклом пробегал, беря цену закрытия с М1, по свечам допустим Н1, при этом необходимо свечи разных тф синхронизировать(т.е. если если наступил новый час нужно перевести минуту и час)

Писатель с меня еще тот, если что не понятно написал лучше спросите.  
 
Цитата
Nikolay написал:
Вот простейшая реализация
Алгоритм мне понравился, нужно привыкнуть и погонять, пока смущает сложность,
Вы сами в самом начале писали про надежность.
Я несколько скриптов бросал с хорошими идеями из-за сложности, поиск ошибок занимает значительное время, теперь все упрощаю, что бы было понятно с первого взгляда.
 
Цитата
VPM написал:
Алгоритм мне понравился, нужно привыкнуть и погонять, пока смущает сложность,
Вы сами в самом начале писали про надежность.
Я несколько скриптов бросал с хорошими идеями из-за сложности, поиск ошибок занимает значительное время, теперь все упрощаю, что бы было понятно с первого взгляда.
Да, надежность важна. Но она тоже не должна быть избыточной. Как я написал выше - самый надежный, и самый простой вариант - это циклом пройтись от первого или последнего бара, проверяя время каждого бара. Как только оно пересечется с искомым - вот он ваш индекс. Но сложность этого алгоритма линейна. Впрочем, для данных Квика, наверно, этого достаточно. Очень редко когда число бар больше 10 тыс. Вот если их существенно больше и надо часто искать, то надо думать о снижении сложности.


Отлаживать не так и сложно, если в необходимых местах осуществлять проверки на тип данных, сами данные. Выводит отладочную информацию в лог. Сразу будет видно, где что не так.
 
Цитата
Nikolay написал:
Отлаживать не так и сложно, если в необходимых местах осуществлять проверки на тип данных, сами данные. Выводит отладочную информацию в лог. Сразу будет видно, где что не так.
Не поверите другой раз не могу лог загрузить из-за  объема после дня работы скрипта. Да тип данных начал добавлять согласен.
Цитата
Nikolay написал:
Как я написал выше - самый надежный, и самый простой вариант - это циклом пройтись от первого или последнего бара, проверяя время каждого бара. Как только оно пересечется с искомым - вот он ваш индекс.
И тут не все благополучно, поджидают  подводные камни, так как время открытия бара разное на разных тф. на клиринге расходится. Уже молчу про выпадающее бары.
 
Цитата
VPM написал:
И тут не все благополучно, поджидают  подводные камни, так как время открытия бара разное на разных тф. на клиринге расходится. Уже молчу про выпадающее бары.
А это здесь уже не важно. Время открытия бара это данность. Если бар есть, то и время есть. Если бара нет, то это пустой бар и надо просто взять ближайший. Все зависит от необходимой методики определения.
Если надо определить индексы баров для времени 10:13, то для минутки это будет точное совпадение. Для 2-ух минут - бар 10:12. Для трех, четырех тоже  - 10:12. Для 5-и 10-и минут 10:10. Для 30 минут часа 10:00. Для двух часов зависит от кратности часа. И т.д. Всегда можно найти ближайшей бар к искомой точке.
 
Да это согласен можно найти, но ведь речь идет о простом алгоритме в рамках единого итератора с переходом к реальным торгам.
 
Цитата
nikolz написал:
В результате этого появилась теория и методы робастного оценивания.
Так о что с примером?
 
Добрый день!

Можно подвести промежуточный итог, на тему обсуждаемую выше.
Собрал небольшую программу, в основе лежит функция поиска приложенная  Nikolay,  за что ему скажем отдельное спасибо!
Пока не очень разобрался как работает, но работает супер, (а к хорошему привыкаешь быстро :smile: ).

То, для чего и как, много сказано выше, здесь лишь о своей реализации.
Подход: на оси времени графика есть текущее значение цены,
правая сторона от текущее значение цены - это зона прогнозов;
леваявая сторона - это история, определяя период тестирования определяем зону тестирования.

Я в своих подходах, зону тестирования еще делю на две.
1) фон - служит для определения того что происходит на рынке при старте торгового алгоритма; и для разгона алгоритмов использующих историю данных.
2) собственно сам тест то что сообственно обсуждалось выше.

Для прогона теста задаю количество дней тестируемых, сдвигаю индекс на таймфрейме дня, находим начальную дату и время.
(Установил ограничения только внутридневные не больше 60 мин. такова пока особенность ф. поиска).
От общего итератора пока тоже отказался, просто в алгоритм добавил счетчик для сдвига индексов тайм фреймов.
Прогоняем стратегию, результат W/L обрабатываю методом описанным выше получаю экспресс оценку, торговой стратегии,
если необходимо то и торговой системы целиком.
Да добавил визуализацию вывод на график сигналов и параметров RM.

Теперь обрабатывает портфель из бумаг, в общем то и все,
еще раз спасибо Nikolay, и удачной торговли!  
 
Цитата
VPM написал:
Цитата
nikolz написал:
В результате этого появилась теория и методы робастного оценивания.
Так о что с примером?
Я не часто смотрю форум. Поэтому отвечаю на Ваш вопрос сейчас.
Простой пример:
------------------
В на малом предприятии работает 10 человек, включая директора.
Зарплата каждого из 9 работников  составляет  50 тысяч рублей. Зарплата директора 450 тысяч.
Средняя зарплата составляет составляет 90 тысяч рублей.
-----------------  
Если Вы возьмете данные Росстата по зарплатам либо по пенсиям, то увидите подобную картину.
---------------
Для нормального закона распределения , средняя величина - это центр тяжести или линия симметрии функции плотности вероятности.  или иначе говоря - это первый момент.
И этот момент рассчитывают как арифметическое среднее или  функцией SMA.
--------------------
Среднее при нормальном распределении есть характеристика,  вокруг которой симметрично распределяются значения случайной величины.
------------------  
В приведенном мною вполне реального примера  среднее значение в 90 тысяч превышает 90% значений случайной величины.
Т е это среднеарифметическое никак не характеризует уровень доходов большинства.
-----------------------
В статистике о такой оценке первого момента  говорят , что оно имеет сильное смещение и является несостоятельным, так как не позволяет получить реальную картину дохода большинства работников.
---------------------
Так вот , в подобном случае для вычисления среднего используют робастные методы. Для среднего наиболее часто используют два метода.  Первый - это медиана. Второй - это метод Кули и Тьюки.
-------------------
В моем примере оба метода дадут одинаковый результат, равный 50 тысяч.
----------------
А теперь скажите, какая из оценок 90 или 50 позволяют статистически оценить уровень доходов большинства?
================
Что же касается фондовых рынков, то ситуация следующая:
--------------------
Нормальный закон распределения предполагает, что значения случайной величины  изменяется  с одинаковой вероятностью относительно значения первого момента функции распределения.
---------------------------
Т е если среднее получается 100 рублей то равновероятно должно быть и 200 рублей и 0 рублей ,
а также и 300 рублей и минус 200 рублей. Но такое же быть не может, Верно?
----------------------
А это значит, что функция закона распределения цены несимметричная, а значит закон не нормальный,
а следовательно и первый момент нельзя вычислять как арифметическое среднее ну и так далее.
---------------------
И вот и получается, что Вы принимаете за основу всех своих вычисления ошибочное утверждение о нормальном распределении цены и считаете что-то и прогнозируете что-то.
И все эти Ваши вычисления, мягко сказать, филькина грамота.
----------------
Я лишь кратко и очень упрощенно попытался объяснить Вам Ваше заблуждение.
-----------------
Но вы не отчаивайтесь, так как именно так  же как и Вы считает уровень зарплат и пенсий Росстат и ЦБ и правительство.
-----------------------------------------
Поэтому большинство граждан РФ никак не могут понять, почему их зарплата или пенсия всегда ниже средней.
 
nikolz, я у Вас спрашивал про методы робастного оценивания или  ссылку где посмотреть? Ну да ладно.

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

Если вкратце, то среднее у нормального распределения ==0,
в Вашем примере расчет простого среднего служит для привидения к такому виду и не для каких других целей.
В трейдинге самое простое привидение считают доходности  р1/р2 - 1, при этом нужно удалить тренд.
Преобразование Фишера любые переменные приводит к такому виду.
Я не хочу азбукой заниматься, вот ссылка John R. Hauser "Numerical Methods for Nonlinear Engineering Models"
с примерами  написанными на луа 5.1, если интересно смотрите можно и поэкспериментировать.
 
Цитата
VPM написал:
John R. Hauser "Numerical Methods for Nonlinear Engineering Models
Приведенная Вами книга никак не опровергает то, что я вам пытался объяснить.
---------------------------
Причем здесь распределение Фишера?  И где Вы его применили в своем роботе? Покажите.
Или Вы это указали для показа, собственных знаний?
-----------------------------
Я не собираюсь Вас переубеждать. так как это не имеет смыcла. Вы возражаете не мне , а статистической науке.
-----------------------------
Если будет желание повысить свою грамотность в этой области вот вам ссылки:
------------------------
цитата(http://datascientist.one/chto-takoe-robastnost/):
Что такое робастность?

Робастность (англ. robustness, от robust — «крепкий», «сильный», «твёрдый», «устойчивый») — свойство статистического метода, характеризующее независимость влияния на результат исследования различного рода выбросов, устойчивости к помехам. Робастный метод — метод, направленный на выявление выбросов, снижение их влияния или исключение их из выборки.

На практике наличие в выборках даже небольшого числа резко выделяющихся наблюдений (выбросов) способно сильно повлиять на результат исследования, например, метод наименьших квадратов и метод максимального правдоподобия подвержены такого рода искажениям и значения, получаемые в результате исследования, могут перестать нести в себе какой-либо смысл. Для исключения влияния таких помех используются различные подходы для снижения влияния «плохих» наблюдений (выбросов), либо полного их исключения. Основная задача робастных методов — отличить «плохое» наблюдение от «хорошего», притом даже самый простой из подходов — субъективный (основанный на внутренних ощущениях исследователя) — может принести значительную пользу, однако для мотивированной отбраковки все же исследователями применяются методы, имеющие в своей основе некие строгие математические обоснования. Этот процесс представляет собой весьма нетривиальную задачу для статистика и определяет собой одно из направлений статистической науки.

Привожу ссылки для Вас :
в торговле
https://szma.com/wp-content/uploads/2016/10/Musaev_Spiiran2010_14.pdf  -
цитата:
Повышение статистической устойчивости комплекса алгоритмического обеспечения управления торговыми, инвестиционными и финансовыми операциями является частным случаем общей проблемы повышения устойчивости функционирования динамических систем в условиях неопределенности. При этом под статистической устойчивостью алгоритма обработки будем понимать способность оценок, формируемых на основе этого алгоритма, сохранять
свои точностные характеристики при наличии отклонений вероятностных характеристик исходных данных относительно параметров
априорно принятой математической модели. В современной математической литературе [3, 6, 9, 10, 11, 13, 14, 17 и др.] методы обработки, алгоритмы и оценки, удовлетворяющие требованию статистической устойчивости, принято называть робастными.
----------------------------------
по теме робастное оценивание:
https://ami.nstu.ru/~headrd/MSA/MSA_3.htm
https://www.researchgate.net/publication/316973167_Robastnye_metody_i_algoritmy_oceni­vania_korrelaci...
https://habr.com/ru/articles/174705/
https://present5.com/robastnoe-statisticheskoe-ocenivanie-grubye-oshibki-i-metody-ix/
--------------------------------------
Будут вопросы, спрашивайте
 
nikolz, за приведенные ссылки спасибо, полистаю на досуге.

Касаемо моих замечаний:

1) Знание мои так себе, (последние четверть века занимался другими вещами).
2) Книгу Вам привел потому, что там не только описаны распределения, моменты и много еще чего,
но и то как пользоваться, а главное приводятся запрограммированные примеры (берете код и пробуете, можно даже в квике).
3) Касаемо Вашего примера, нужно вспомнить правило 3 сигм (куда с какой вероятностью попадаю результаты),
ну и конечно, простое среднее здесь применять нельзя, ну про Вы сами накидали ссылок.
4) Ни о каком распределение Фишера речи нет,
я говорю о необходимости подготовки данных прежде чем использовать нормальное распределение,
одним из таких является  - Преобразование Фишера.

"Преобразование Фишера, изменяет плотность распределения любой волны таким образом, что оно приближается к нормальному (гауссову) распределению".
Код
local trasform_fisher=function()--преобразования Фишера (Fisприводятсяher Transform)
--Преобразование Фишера имеет вид: 0.5* (log( (1 + x) / (1 - x) ) )

    local log=math.log
local F={}; F[1] = 0
local start=true
    return function(I,x)

if I == 1 or start then F={}; F[I] = 0; start=false end
x = x and (x>=1 and 0.999 or x<=-1 and (-0.999) or x) or 0
local f1=(I>1 and F[I-1] or 0)
local fich = (1-x)~=0 and 0.25*log((1+x)/(1-x)) + 0.5*f1 or 0
F[I] = fich
    return F[I]--fich
end
end
 
Цитата
nikolz написал:
И где Вы его применили в своем роботе? Покажите.
Робот звучит гордо! :smile:

Свой подход я публиковал выше,  модульность в написании робота обсуждалась здесь.

Мой подход;
1) Торговая стратегия - это набор правил (на открытие, закрытие и т.д.);
2) Торговая система - это набор торговая стратегий;
3) Робот - это голова, ноги (чтоб можно было убежать вовремя), руки (что бы сделки совершать), в общем полная самостоятельность;

Я пишу подробно что бы можно было изъясняться на одном языке, а не поучаю.

У меня запрограммирована одна токая Торговая стратегия - "Выведение Торговли Стратегий От Функций Распределения Вероятности".
Она очень простая. При на писании допустил концептуальную ошибку, сейчас не пользуюсь - отключил, нужно править.
 
По просьбам "местных трудящихся",
Цитата
nikolz написал:
И где Вы его применили в своем роботе? Покажите.
Поправил, публикую как есть. подключил у себя :lol:

Это скрипт на стратегию Выведение торговли стратегий от Функций Распределения Вероятности опубликованную Джон Эхлерс  в его  статье, скрипт простой написан мною.
О чем разговор:
Суть стратегии от автора, определение маловероятного события, т.е. выброса цены в зону > 3G or <-3G. В примере приведенным nikolz, это Зарплата директора 450 тысяч.
Это событие является сигналом на совершение сделки.
Так как событие статистически значимое, то нужно ожидать возврата цены к ее среднему значению. В общем и все.
Код
function Cached.Channel_PDF_Ehlers()

   ---- Выведение торговли стратегий от Функций Распределения Вероятности (Джон Эхлерс)
   ---- VPM ©
   
   local log=math.log;
   local floor=math.floor;
   
   local fPeriodDC;
   local ftrasform_fisher;

   local Norm={}
   local Psn={}
   local Price={}
   local HH={} 
   local LL={} 
   local Fich={}
   local Dox={}
   local I1=0;
   local hh,ll=0,0;
   return function( I, FSettings, ds )
      local I=I or 1;
      local ds = ds or nil;
      local FSettings = FSettings or {};
                local v_t = FSettings.v_t or 'C';
      local P = FSettings.period or 20;
      local up = FSettings.up or 3.0;
      local dw = FSettings.dw or -3.0;
      --local up1 = FSettings.up1=1.62;
      --local dw1 = FSettings.dw1=-1.62;
      
      local N = FSettings.N or 8;
      local avto_P = FSettings.avto_P or 0;
      local BaseDepthInBars=FSettings.depth or 0;
      ----------------------------------------
      
      local c0 = Value( I,'C',ds ) or 0;
      local newbar = I>1 and I>I1 or false;
      if I == 1 then 
         
         Price={}; Price[I] = c0;
         HH={}; HH[I] = c0;
              LL={}; LL[I] = c0;
         Norm={}; Norm[I] = 0;
         Psn={}; Psn[I] = 0;
         Fich={}; Fich[I] = 0;
         
         fPeriodDC=Cached.DominantCycle()--Cached.PeriodDC()
         ftrasform_fisher=trasform_fisher()
         I1=0;
      end
      
      --local c1 = I>1 and Value( I-1,'O',ds ) or c0;
      
      local p1 = I>1 and Value( I-1,v_t,ds ) or c0; --Price[I-1]
      local p0 = Value( I,v_t,ds ) or 0;
      Price[I] = p0; --if v_t == '4' then Price[I] = p0 end
      
      ---- avto Period:
      if avto_P == 1 then

         --local transform = FSettings.transform or 1;              --local metod = (FSettings.metod or 1 )
              --local bw_ss = (FSettings.bw_ss or 1 )
              --local pole_ss = (FSettings.pole_ss or 0 )

                        P = fPeriodDC( I, { ['v_t']='M',['period']=P,['N']=N}, ds )
         P = floor( P )
      end
      
      if I>P then  --and newbar 
          hh,ll=Price[I-P],Price[I-P];
         for i=P,1, -1 do
         
               if Price[I-i]>hh then hh=Price[I-i] end
               if Price[I-i]<ll then ll=Price[I-i] end
               
          end
      end
      
      ---- Norm
      local norm1 = I>1 and Norm[I-1] or 0;
      local norm2 = I>2 and Norm[I-2] or norm1;
      local hl=(hh-ll);
      local norm = hl~=0 and (p0-ll)/hl or 0;
      Norm[I] = norm;

      ---- Psn
      local psn1=I>1 and Psn[I-1] or norm;
      local psn=(norm + 2*norm1 + norm2)*0.25;
      Psn[I] = psn;
      
      ---- Fich
      local fich1 = I>1 and Fich[I-1] or psn;
      local fich2 = I>2 and Fich[I-2] or fich1;
      local fich = ftrasform_fisher(I,(psn-0.5)*2 )--0.25*log( (2+psn)/(2-psn) )+ 0.5*fich1
      Fich[I]=fich;
      
      ---- lead
      local lead = 2*fich-fich1;
      -----------------------------
      
      local out1,out = fich1,fich;
      local red,green = nil,nil;
      if out > out1 then
          red,green = nil,out;
         if lead>up then
             red,green = nil,lead;
         end
      elseif out < out1 then
          red,green = out,nil;
         if lead<dw  then
              red,green = lead,nil;
         end
      end
      
      I1=I;
      ------------------------------
      
      local size = ds==nil and Size() or ds:Size() or 0;
      if BaseDepthInBars>0 and size-BaseDepthInBars>0 and I <= size-BaseDepthInBars then return nil,nil end
      
      --message( I ..' '.. tostring(red)..' '..tostring(green)..' '..tostring(out1)..' '..tostring(out) )
      return up,dw,red,green,lead,out
      
   end
end
 
Я же в своей торговой системе применяю этот подход иначе.
Суть, в определении зон перепроданости / перекуплености (вместо стандартного стохастика),
так как данный алгоритм имеет отставание 1-2 бара, и компенсация еще убирает 1 бар.
Фактически "шагаем в ногу со временем"!  :smile:  
 
Да. если найдется щшибка в коде, напишите,
Скрин шот не получилось вставить ну да ладно.
 
VPM,

Полагаю Вы это знаете:

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

Z-преобразование Фишера — это формула, которую мы можем использовать для преобразования коэффициента корреляции Пирсона ( r ) в значение (zr), которое можно использовать для расчета доверительного интервала для коэффициента корреляции Пирсона.

Формула выглядит следующим образом:

z г = ln ((1 + г) / (1-г)) / 2

Например, если коэффициент корреляции Пирсона между двумя переменными оказывается равным r = 0,55, то мы можем рассчитать z r следующим образом:

  • z г = ln ((1 + г) / (1-г)) / 2
  • z r = ln ((1+0,55) / (1-0,55)) / 2
  • zr = 0,618

Оказывается, выборочное распределение этой преобразованной переменной следует нормальному распределению .

Это важно, поскольку позволяет рассчитать доверительный интервал для коэффициента корреляции Пирсона.

Без выполнения этого Z-преобразования Фишера мы не смогли бы рассчитать надежный доверительный интервал для коэффициента корреляции Пирсона.

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

Коэффициент корреляции Пирсона (также известный как «коэффициент корреляции продукта и момента») является мерой линейной связи между двумя переменными X и Y.

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

Можете пояснить, как Вы вычисляете Коэффициент корреляции Пирсона и какое он имеет отношения к цене акций?

 
https://en.wikipedia.org/wiki/Fisher_transformation
 
Цитата
nikolz написал:
Можете пояснить, как Вы вычисляете Коэффициент корреляции Пирсона и какое он имеет отношения к цене акций?
Так выше же представлен код?
это полноценный индикатор, сейчас работает у меня, нужно ему прикрутить голову, и все пробуйте.
Там и все есть расчеты, Кроме модуля оценки несущей частоты, но он не нужен.
Цену Лучше брать  медианную или по другому усреднённую,  по умолчанию это СLOSE, на больших  тайм фреймах будет перерисовывать.

Вот голова:

Settings={}
Settings.Name = "1Channel_PDF_Ehlers";
Settings.Depth=600;
Settings.v_t = "C";
Settings.period = 20;
--Settings.transform = 1 --0
--Settings.widhl = 0
Settings.avto_P = 0;
Settings.up=3.0;
Settings.dw=-3.0;
--Settings.up1=1.62;
--Settings.dw1=-1.62;

local f;
function Init()
 
f = Channel_PDF_Ehlers();


   Settings.line={
--{Name = '0',Type = TYPE_DASHDOT, Width = 1, Color = RGB(0, 0, 0) },
--{Name = '+1',Type = TYPE_DASHDOT, Width = 1, Color = RGB(0, 0, 0) },
--{Name = '-1',Type = TYPE_DASHDOT, Width = 1, Color = RGB(0, 0, 0) },
{Name = '+3',Type = TYPE_DASHDOT, Width = 1, Color = RGB(0, 0, 0) },
{Name = '-3',Type = TYPE_DASHDOT, Width = 1, Color = RGB(0, 0, 0) },
{Name = 'Red',Type = TYPE_HISTOGRAM, Width = 1 ,Color = RGB(180, 0, 0) },
{Name = 'Green',Type = TYPE_HISTOGRAM, Width = 1 ,Color = RGB(0,180, 0) },
{Name = 'PDF1',Type = TYPE_DASHDOT, Width = 1 ,Color = RGB(240, 100, 40) },
{Name = 'PDF',Type = TYPE_LINE, Width = 2 ,Color = RGB(180, 200, 240) }
   };
return #Settings.line
end

OnCalcul ate = function (index)
return  f( index, Settings )
end
 
Цитата
nikolz написал:
Оказывается,  выборочное распределение  этой преобразованной переменной следует  нормальному распределению  .
Ну так вот же
Цитата
VPM написал:
"Преобразование Фишера, изменяет плотность распределения любой волны таким образом, что оно приближается к нормальному (гауссову) распределению".
Код
local trasform_fisher=function()--преобразования Фишера (Fisприводятсяher Transform)
--Преобразование Фишера имеет вид: 0.5* (log( (1 + x) / (1 - x) ) )

   local log=math.log
local F={}; F[1] = 0
local start=true
   return function(I,x)

if I == 1 or start then F={}; F = 0; start=false end
x = x and (x>=1 and 0.999 or x 1 and F[I-1] or 0)
local fich = (1-x)~=0 and 0.25*log((1+x)/(1-x)) + 0.5*f1 or 0
F = fich
   return F--fich
end
end
 
P. S.
Скрипт выводит 6 линий:
2 это придельные для наглядности нужно перевести значение на 1.5;
сам ответ функции;
опережающая линия компенсация отставания;
гистограммы зеленая и красная отражают ускорение.
Ниже 0 - медведи, выше 0 -  быки.

Это полноценная торговая стратегия, конечно применять без дополнительного фильтра нужно осторожно.
Функция циклическая сильно зависит от периода оценки.
Я использую как дополнительный фильтр для оценки зон пере(куплено/продано).

Если будут идеи пишите. Удачной торговли.
 
Цитата
nikolz написал:
Это важно, поскольку позволяет рассчитать доверительный интервал для коэффициента корреляции Пирсона.
  Давно не заходил на форум. Интересно, у кого представления, что фондовый рынок описывается вероятностной моделью, для которой имеют реальный смысл ее характеристики. Понятно, что если нет хорошей модели рынка, то можно брать за основу и вероятностную. Но, кто понимает, то это большая "натяжка". У меня нет такой убедительной модели, но, если бы она была, то должна бы была учитывать пирамидальное поведение "толпы" рвущейся за прибылью, а также наличие инсайдерских каналов. Это точно не вероятностная модель.
 
TGB, Ну вот добрались и до "модели рынка", а все начиналось с безобидной статистической экспрес оценки сделок торговой системы.

Ну давайте сначала, речь идет о преобразовании данных, с применением прямого преобразования Фишера:

Утверждение 1) "Преобразование Фишера, изменяет плотность распределения любой волны таким образом,
что оно приближается к нормальному (гауссову) распределению";
Утверждение 2) Преобразование Фишера, увеличивает идентификацию маловероятного события - “черного лебедя”;

В приведённом примере, торговая стратегия, основана (не на событии) на предсказании возвращения назад к норме (к своей средней),
после выявленного маловероятного события "черного лебедя".

Нету здесь не вероятностной модели рынка, не еще какой либо, скорее это фильтр (detrender), который можно интерпретировать и как стратегию во флате.  
 
 
Цитата
VPM написал:
скорее это фильтр (detrender),
   Как ни странно, но ваш фильтр это грубая модель учета
Цитата
TGB написал:
пирамидального поведения "толпы" рвущейся за прибылью
:smile:
 
Добрый день!

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

Что это модель - "грубая модель учета пирамидального поведения "толпы" рвущейся за прибылью"?

И зачем ее вообще нужно описывать поведения "толпы"?
У толпы всегда есть вожак (Маркет Мейкер).
 
Что делает алгоритм:

1) За период находит Мах Мин;
2) Проводится нормировка;
3) Усредняем полученный результат, получаем задержку в 1 бар;
4) Применяем преобразование Фишера  (усиление сигнала на хвостах, перевод к норм. распределению, что позволяет оперировать аппаратом т. вероятности)
5) Компенсация отставания.

Гасит низко частотные колебания, сохраняя при этом высоко частотную компоненту с минимальной задержкой.
Я искал замену стандартному схоластику, работает точнее и с минимальным отставанием.
 
Поясню для всех, о чем собственно разговор (или обо всем и по порядку).

Так как мы занимаемся алгоритмической торговлей,
то один из подходов для успешной торговли, это получение цифровой модели поведения цены.
А что еще нужно, у Вас есть функция получаете ответ и торгуете! :smile:

Упрощенное представление модели, это разложение источника на примитивы.
В тех. анализе:
- низкочастотная составляющая (тренд) - это средние, регрессия и т.д.;
- высокочастотная составляющая - это осцилляторы.
В сумме это модель.

Мое утверждение что скрин отражает лишь одну из компонент более сложной модели.
TGB,  усмотрел  в этом модель.  
 
Но все это лирика,
а вот организация структуры данных в программе, оказывается не простым делом в луа.
В очередной раз поймал утечку памяти в скрипте. 1000кВ на старте до 30000кВ на конец дня  :cry:
Такое поведение, раньше замечалось при наличии ошибки в программе, которую луа по какой то причине пропускает.

Прислушался к автору, "Таблицы в Lua — это не одна из структур данных, — это единственная структура данных.",
перевожу все переменные в формат таблицы луа,
не знаю поможет?

Другая проблема локальная переменная внутри блока не обновляется, помнит свое первое значение,
в формате таблицы обновляется в качестве локальной нет? Кто то знаком с такой проблемой?
 
Цитата
VPM написал:
Прислушался к автору, "Таблицы в Lua — это не одна из структур данных, — это единственная структура данных.",
перевожу все переменные в формат таблицы луа,
не знаю поможет?
Я думаю, что автор будет впечатлён.
 
Цитата
Игорь М написал:
Цитата
VPM написал:
Прислушался к автору, "Таблицы в Lua — это не одна из структур данных, — это единственная структура данных.",
перевожу все переменные в формат таблицы луа,
не знаю поможет?
Я думаю, что автор будет впечатлён.
Не понимаю к чему этот сарказм?
 
Цитата
VPM написал:
Но все это лирика,
а вот организация структуры данных в программе, оказывается не простым делом в луа.
В очередной раз поймал утечку памяти в скрипте. 1000кВ на старте до 30000кВ на конец дня  
Такое поведение, раньше замечалось при наличии ошибки в программе, которую луа по какой то причине пропускает.

Прислушался к автору, "Таблицы в Lua — это не одна из структур данных, — это единственная структура данных.",
перевожу все переменные в формат таблицы луа,
не знаю поможет?
Нет особой проблемы с утечками. Основные утечки могут быть с неконтролируемым ростом массивов (таблиц), которые являются глобальными или захваченными в замыканиях.
Локальные переменные по выходу из области видимости (функции, например) уничтожаются сборщиком мусора.

Чаще всего я встречаю проблемы расчета алгоритмов на всем диапазоне баров. Создаются таблицы для хранения конечных данных, так и вспомогательных. Но при этом не учитывают, что они не все нужны. Например, для расчета EMA, нужно одно прошлое значение. Но чаще всего хранят все данные. Они, конечно, может и нужны, но чаще всего не на всем диапазоне. А в более сложных алгоритмах таких массивов будет много, и если баров, скажем 60 тыс, то все это остается в памяти.

Цитата
Другая проблема локальная переменная внутри блока не обновляется, помнит свое первое значение,
в формате таблицы обновляется в качестве локальной нет? Кто то знаком с такой проблемой?
Без примера, сложно что-то ответить. Любая переменная доступна для изменения в своей области видимости.
 
Nikolay, Спасибо, Вы как всегда лаконичны!

Посмотрел Вас на дзене, кое что интересного нашел для себя, переделаю работу со временем.

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

Можете здесь что то посоветовать, в организации переменных и их очистке?
Я собственно начинал эту веточку с организации очередей, но Вы и Владимир не советовали с этим связываться?
 
Да забыл сказать, таблицу луа организую с помощью setmetatable, может они плохо чистятся?
Вот пример организации таблицы.

local pos={};
function pos:new() -- проинициализируем поля, процедуры и функции нашего класса
---- Создает экземпляр теперь уже объекта, описывает поля объекта и присваивает полям начальные значения.
local obj = {
[0]=0,
['d']='0',
['t']='0',
['o']='x',
['q']=0,
['p']=0,
['id']=0,
['f']=nil,
tp=function(self,v)
           if self.q>0 then
   return self.p+v
elseif self.q<0 then
   return self.p-v
else
   return 0
end
       end,
sl=function(self,v)
           if self.q>0 then
   return self.p-v
elseif self.q<0 then
   return self.p+v
else
   return 0
end
       end,
};
----далее превращаем таблицу в класс
setmetatable(obj,self)
---- объект получает доступ к методам класса
self.__index = self
---- возвращаем наш объект (экземпляр класса)
return obj
end  
 
Цитата
Nikolay написал:
Локальные переменные по выходу из области видимости (функции, например) уничтожаются сборщиком мусора.
Область видимости это как минимум 3 блока, если записать так
Код
do 
    local a=1
end
то она не очистится, получается так?
 
Цитата
VPM написал:
Цитата
Игорь М написал:
 
Цитата
VPM написал:
Прислушался к автору, "Таблицы в Lua — это не одна из структур данных, — это единственная структура данных.",
перевожу все переменные в формат таблицы луа,
не знаю поможет?
 Я думаю, что автор будет впечатлён.
Не понимаю к чему этот сарказм?
Да какой сарказм-то... Я реально думаю, что автор будет впечатлён тем, что его фраза "Таблицы в Lua —... — это единственная структура данных" способна вызвать действие "перевожу все переменные в формат таблицы луа". Что это такое "перевожу все переменные в формат таблицы луа", как и зачем?
 
Предположу, следующее.
Согласно документации :
В Lua существует восемь базовых типов: nil, boolean, number, string, function, userdata, thread и table.
-----------------
Только параметры последних 4 типов позволяют ссылаться на них через указатели.
-------------------------
Очевидно автор  все переменные типа number, string записывает как таблицы.
------------------------
Такой прием используется для создание в луа новых типов с новыми свойствами,
например вектора, матрицы и т д
 
Добрый день!

Да под запутался опять с видимостью переменных, а она напрямую зависит с очисткой.
К истокам!
Цитата
Игорь М написал:
Да какой сарказм-то... Я реально думаю, что автор будет впечатлён тем, что его фраза "Таблицы в Lua —... — это единственная структура данных" способна вызвать действие "перевожу все переменные в формат таблицы луа". Что это такое "перевожу все переменные в формат таблицы луа", как и зачем?
Так вот выше я показываю пример:
Цитата
Вот пример организации таблицы.

local pos={};
function pos:new() -- проинициализируем поля, процедуры и функции нашего класса
---- Создает экземпляр теперь уже объекта, описывает поля объекта и присваивает полям начальные значения.
local obj = {
[0]=0,
['d']='0',
['t']='0',
['o']='x',
['q']=0,
['p']=0,
['id']=0,
['f']=nil,
tp=function(self,v)
          if self.q>0 then
  return self.p+v
elseif self.q<0 then
  return self.p-v
else
  return 0
end
      end,
sl=function(self,v)
          if self.q>0 then
  return self.p-v
elseif self.q<0 then
  return self.p+v
else
  return 0
end
      end,
};
----далее превращаем таблицу в класс
setmetatable(obj,self)
---- объект получает доступ к методам класса
self.__index = self
---- возвращаем наш объект (экземпляр класса)
return obj
end  
Цитата
Вот пример организации таблицы.

local pos={};
function pos:new() -- проинициализируем поля, процедуры и функции нашего класса
---- Создает экземпляр теперь уже объекта, описывает поля объекта и присваивает полям начальные значения.
local obj = {
[0]=0,
['d']='0',
['t']='0',
['o']='x',
['q']=0,
['p']=0,
['id']=0,
['f']=nil,
tp=function(self,v)
           if self.q>0 then
   return self.p+v
elseif self.q<0 then
   return self.p-v
else
   return 0
end
       end,
sl=function(self,v)
           if self.q>0 then
   return self.p-v
elseif self.q<0 then
   return self.p+v
else
   return 0
end
       end,
};
----далее превращаем таблицу в класс
setmetatable(obj,self)
---- объект получает доступ к методам класса
self.__index = self
---- возвращаем наш объект (экземпляр класса)
return obj
end  
"ООП, "которого нет"
Структура с методами это простейший вариант объекта.
Метод это функция, сохраненная в элементе таблицы.
Метатаблица способна менять обычное поведение других таблиц.

Что же нам это дает?

Вся сила метатаблиц в метаметодах.
Метаметоды - Это "магические" методы, которые позволяют менять существующее поведение таблицы.
"Магические" они потому, что их логика зависит от того, как они называются."

Маленькая книга о Lua
 
nikolz, Вы как то все пытаетесь усложнить,
ну смотрите если "Таблицы в Lua —... — это единственная структура данных",
из которой легко выводятся все остальные, то зачем изобретать очередной "велосипед",
если это прекрасно работает, а примеры описываются первоклассными специалистами.
Берем и пользуемся!
 
Цитата
VPM написал:
Nikolay, Спасибо, Вы как всегда лаконичны!

Посмотрел Вас на дзене, кое что интересного нашел для себя, переделаю работу со временем.

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

Можете здесь что то посоветовать, в организации переменных и их очистке?
Я собственно начинал эту веточку с организации очередей, но Вы и Владимир не советовали с этим связываться?
Я не использую Дзен, так что, видимо, это не про меня.

Что касается примера, основной вопрос - зачем? Какую задачу это решает. Создавать объект ради объекта - это тупиковый путь, хоть и популярный лет 20 назад. А во многих языках даже обязательный.
Но это не относится к Lua. Да, здесь многое завязано на таблицы, если не почти все, если считать _G. Но это не значит, что нет других объектов first class citizen.
 
Цитата
VPM написал:
Область видимости это как минимум 3 блока, если записать так

Причем здесь три блока, и почему три? Область видимости - это конкретное определение. Это может быть весь контекст файла, может быть функция, может область do end, цикл и др. Каждый раз - это конкретный пример, и нет магического значения числа блоков. В книге автора языка есть целый раздел посвященный локальным переменным.
Цитата

Код
   do  
     local  a =  1 
 end 
  
то она не очистится, получается так?

Очиститься, а точнее, цитируя: "локальная переменная перестает существовать, как только заканчивается ее область видимости, позволяя сборщику мусора освободить память, занимаемую ее значением". Блок же закончился. И в вышеупомянутой книге - это описывается.
Страницы: Пред. 1 ... 12 13 14 15 16 ... 26 След.
Читают тему
Наверх