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

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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 12 ... 23 След.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Проблема этого "НО" заключается, в методах преобразования и вычислениях этой самой синусоиды, традиционные методы хорошо говорят что было, но принимать решения по ним уже поздно все уже случилось. Что предлагает автор, так как это движение по кругу (колебание), применить вместо синуса косинус (то есть сдвиг по фазе, в обиход вводится понятие фаза - частотные характеристики), таким образом достигается предсказательный характер индикатора, ну и обработка входящих данных методами фильтрации, что в разы убирает отставание сигналов от реального события.

Вот примерно основная идея, кому стало интересно лучше почитать автора.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Альтернативный подход предлагает John Ehlers в своих работах, на мой взгляд он наиболее интересен и заслуживает внимания, с точки зрения формализации, и превращение в стройные алгоритмы, но мало освещен, в нашем сегменте интернета, переводы на русский мне не попадались.
В двух словах суть, вспоминаем тригонометрию из школьного курса, единичный вектор вращаем против часовой стрелки, на конце которого закреплен карандаш и протягиваем. На выходе не что иное как временной ряд - синусоида, мах = 1, мин = -1, центр = 0, идеальный индикатор =1 - продать, =-1 - купить, более того ранее уже освещалось что в предельных точка находятся наиболее вероятный события, если бы не одно но.  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Другое дело период здесь и кроется  «Ахиллесова пята».
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Владимир, Да еще как движется в канале. но Вы графиками не пользуетесь, поэтому этого не замечаете. Да и то что Вы называете свечей - это просто усреднённое значение за период. То что прячут за словом свеча (мне больше нравится бар, просто короче), подразумевает 5 значений за период.  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay,   Вы описали классический традиционный подход, в данном вопросе, а слово "угадать" я вообще не применял, подход заключается не в игре угадай, а разложении временного ряда, на 3 компонента.
А временной ряд не всегда стохастичен, только что в своём примере, я это пытался донести, а установление тренда нам об этом и говорит, и отменяет всю случайность. Да и не утверждаю, что это просто, для меня это наиболее формализованный подход в волновой теории он мне понятен. Конечно не один мат. метод не работает на все случаи жизни, это второй момент, поэтому и важно найти ту грань, где нужно переключить торговлю на другую стратегию. А если бы было просто то математики зарабатывали свои состояния.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Вот принципиальная теоретическая модель, которую предлагаю рассмотреть:

Model = Trend + Cycle + Noice

Если в данной модели удален компонент Trend = 0, то модель выглядит так

Model = 0 + Cycle + Noice

Оставим пока в покое компонент Noice = 0, не "шумит" наш источник данных, идеален, ну или удалили компоненту шум. Модель можно записать следующим образом.

Model = 0 + Cycle + 0

То есть можно говорить о принятии решений, кода цена движется в канале с определенным периодом. Так как интересует торговля внутри дня, то длина выборок относительно не велика.
Когда строятся подобные модели, для того чтоб можно было их применять на практике, то проводятся, определенные мат. преобразования с данными (усреднение, сглаживание ...).
Мало, того что такой подход удаляет часть информации из источника, так еще и вводится отставание при определении интересующего события.
И что с этим делать?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Владимир, В место такой красивой поэмы, Вы показали хоть один пример, того как нужно, Мне кажется Вы упускаете один важный момент, у Вас богатый опыт, видимо все перепробовали, но общаетесь Вы с первоклашками, да и те еще и первый не закончили (это я про себя), вот и получается общение выпускника школы с первоклашкой. Мне думается лучше простой пример.  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Владимир,  Опять манипуляции, зачем же Вы несколько раз повторяете, одно и тоже, это видимо из области "глупость повторенная несколько раз, становится правдой". На поставленные Вам вопросы не отвечаете? Если Вы о принципе Оккам, то куда уже проще с нечеткой логикой, разве что создать огромную веревку из if elseif, но совсем не факт что это проще.
Относительно, нелепых вопросов, очень даже "лепые," четко сформулированы, ответы мне известны, поэтому не нужны, "разжёвывать" не собираюсь, кому нужны легко сам найдет ответы, и построит логические связи для получения главного ответа. Ну не всем дано, это к примеру, программисту с полувековым опытом, предложить проводить операцию на сердце, вот это нелепо. Да и не кого я неучу и да же не указываю, что делать и как делать. Стучать по клавишам не моя стихия, банально ищу короткий путь в своих пояснениях. На деюсь доступно объяснил.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Владимир написал:
Старина Оккам был отнюдь не дурак.
Поясните о чем Вы?
А зачем нужна, очень даже ясна. В место четках Да/Нет вводится степень принадлежности, в зависимости от степени принадлежности делается четкий вывод, Ну к примеру купить не рабочим контрактом, а какую то часть и так далее.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Владимир,  Ну здесь с Вами и не поспоришь. Разве что удивляет вот этот момент
Цитата
Владимир написал:
В частности, я считаю, что нечёткая логика для задач торговли не нужна, если не сказать "вредна".
Я у себя сейчас встроил, и тестирую разные варианты пока относительно торговых стратегий (ТС), кому не знакома проблема, когда  сигнал определенный на пересечениях двух линий дергает туда сюда. Второе я писал, где еще хочу попробовать, ну к примеру поставить количество в зависимость от какого то алгоритма. Но в любом случае не понятно почему вредна?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Владимир, Да. я не писатель не поэт, и уж точно снобизмом не страдаю! Обсуждаю ровно то, что можно программировать, не более. Высказываюсь для для тех кто умеет мыслить, анализировать и обсуждать, разные темы. Вы еще не догадываетесь, для Вас скажу, я еще задумал обсудить прогностические индикаторы, а "не дёрганье кота за хвост", туда и виду.  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Игорь М,  Последний раз, без вся кого ликбеза, пытаюсь Вам пояснить (это уже не однократно здесь озвучивалось и обсуждалось). Да услышит слышащей.

А дело вот в чем, я написал "про Ивана, а Вы мне втюхиваете про Болвана!" Но обо всем и по порядку.

2) Маркет мейкер - компания (или группа компаний) заключившая с биржей договор, одной из главных задач которого, является устранения меж биржевого дисбаланса в котировках.
1) Геп - сильное, мощное движение, когда сносится встречное предложение/спрос, заявки не попадают даже в стакан, продукт высокочастотной тарговли.
3) "Поводырь" - сленг, ведущий индикатор относительно которого принимаются торговые решения.
4) Высока частотная торговля, торговые операции Маркет мейкера или компаний разместивших свою инфраструктуру на бирже, обладающих алгоритмами позволяющими это делать.
Геп на открытие торгового дня, как правило продукт торговой деятельности маркет мейкера, решая предписанные ему задачи, вынужден набирать позицию по невыгодным ценам.
Вынужден по кругу своих обязанностей торговать большими объемами, большие объемы оставляют следы на графике и ленте. Применяемые технологии практически известны.
Строя гипотезы относительно действий ММ можно строить торговые стратегии. Ну а дальше сами.

Ни какой фундаментальной причины я не устанавливаю, более того мне на нее "наплевать", важно ценовое действие, и кто его в моей гипотезе осуществил.
День про который я написал, я торговал, и высказал свои эмоции, указав на интересные моменты, умеющие мыслить и анализировать обратят внимание, кому не интересно просто пропустят.
И это все просто, на деюсь так Вам будет понятно, и ни какой конспирологии! :smile:  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Игорь М, Ну что не пост у Вас, то сплошная поэзия, вот мне нравится: "Не фантазируйте и не приписывайте другим то, чего они не писали". Или вот "Вы такую "классическую работу маркет-мейкера" можете увидеть в колебаниях деревьев на ветру. Это апофения называется.", а вот еще "Может тогда ваше детство закончится и сказки про всемогущих кукловодов, маркет-мейкеров и прочих оставят вас и этот форум.", или "пс. Забудьте вы про кукловодство маркет-мейкеров - это всё конспирология для недалёких." Ну не слог а песня! Восхищен!

Ну пожалуй вот это на мой вкус лучше всего "NG на МБ с утра, естественно, открывается гэпом, так как он привязан. Вот и всё." А позвольте узнать, у столь просвещённого, а кем и чем привязан???

Да и не вежливо оставлять вопросы без ответов, ну да ладно повторюсь. Причина послужившая поводом к развороту, даже фундаментальная, что из этого отменяет?

1) Институт маркет - мейкера на ММВБ?
2) или маркет - мейкеру не нужно обеспечивать ликвидность на своем рынке?
3) а может не нужно следить за меж рыночным спредом (арбитраж)?
4) или он умеет, без финансовых вложений двигать цену?

Мне не нужно себе ответьте.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Еще одна попытка вернуться к обсуждению статьи. "Функцию распределения вероятностей (PDF) можно позаимствовать из области статистики и использовать для изучения рыночных цен без тренда с целью определения торговых стратегий". Почему важно знать ФУНКЦИИ РАСПРЕДЕЛЕНИЯ ВЕРОЯТНОСТЕЙ(PDF),  при выборе стратегии?

Но в начале два слова, для общего понимания вопроса  как измеряется PDF.
График на плоскости, PDF делит события на диапазоны и распределяет эти события в этих диапазонах, каждый диапазон - ячейка содержит
• по оси Y - количество попаданий событий в диапазон;
• по оси X - сам диапазон классификатор.
Плотность распределения отвечает на вопрос, какая вероятность попаданий соответствует каждому диапазону событий.

Краткосрочную торговлю можно рассматривать, как торговлю в канале.

1) Один из методов определяя канала движения цены, устанавливается мак и мин значения за период и проводится нормировка текущей цены в этом канале (Stochastic).
нормировка удаляет тренд, а PDF стохастика, аналогичны распределениям синусоидальной волны. Наиболее вероятное событие на ходится в предельных отклонениях от центра.
Или говорит что достигнуто придельное отклонение скорость изменения мало меняется и поменяет знак, предсказывает разворот. Триггером здесь обычно выступает сам индикатор с прошлым значением.

2) Второй метод расчет RSI,  нормировка удаляет тренд, а PDF RSI, аналогичен нормальному распределению. Наиболее вероятное событие находится в центре.
Сильное отклонение говорит что скоро начнется возврат к среднему значению.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
nikolz,  Ну неужели и это нужно объяснять, ММ - это обобщающей термин, применяемый к сообществу  заключающего договора с биржами. Даже Вы можете стать, если будите соответствовать предъявляемым требованиям. Ну про это Вы и сами начитались. Я не слова не сказал про технологии они у все разные, но есть общие задачи, одну из которых Вы озвучиваете.

К стате, где Ваш пример про сети?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
И ничего Вам график не скажет по этому поводу, пока основная часть участников торгов не узнает об этом и начнется движение.
Вот это движение нам и скажет без указания причины, что идут распродажи, а поведение ММ в рынке ответит на вопрос насколько все серьезно. Я надеюсь, Вы же тоже не считаете что цены прыгают "по щучьему велению по моему хотению". А размер биржи определяет необходимые средства в распоряжении ММ для управления данным рынком, и они рассчитаются.
Дисциплина и это самое главное, можно чего не знать, но если дисциплины нет обязательно улетишь с рынка (и это я себе). Все знаем но на практике все происходит иначе. Вот и мне пример с NG запомнился, что нарушены были мною все допустимые риски. Результат на закрытие дня 16,5% к начальному капиталу, против 80% возможной потери этого капитала. И сколько раз я говорил что так делать не буду, не сосчитать, по этому мой метод алгоритмическая торговля с четко формализованными правилами и  с закрытыми глазами.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay,  Я Вас не совсем понял, кто на что жалуется, и причем тут интеллектуальные способности?
Цитата
Nikolay написал:
И жаловаться после всего этого на прокси, который, по сути, ни на что не влияет - это верх идиотизма.
Описанная Вами ситуация по нефти, понятно что при таком движении снесут любого ММ (ни каких средств, ни у кого не хватит) , и самое благоразумное что они могли сделать - это сбежать с рынка, что они и сделали.  При определенном опыте все читается с одного графика цены, а у нас кроме этого поступает еще масса информации, открытый интерес, количество контрактов, лента, активность...
Не переносить сделки значить не торговать (не принимать риск), но на все что мы можем повлиять, так это на степень принятого риска. Я писал себе алгоритм УПРАВЛЕНИЕ КАПИТАЛОМ ПО ВИНСУ отлично отвечает на данный вопрос, но одного знания мало, нужна дисциплина.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Но куда более важный момент хочется обсудить вот он:
Цитата
VPM написал:
Про функции распределения вероятностей я уже трогал чуть - чуть вопрос. Разные способы нормировки приводят к различным PDF, а значить  нужно строить стратегии с учетом этих функций. Классический пример это стохастик и RSI. Я выкладывал ссылку на небольшую статью John Ehlers, где он это прекрасно показал.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Игорь М,  Спасибо, за отличный ликбез, сразу видно знание вопроса, прослеживается стройный, четкий анализ в установление причины для РАЗВОРОТА.
Только что это отменяет?

1) Институт маркет - мейкера на ММВБ?
2) или маркет - мейкеру не нужно обеспечивать ликвидность на своем рынке?
3) а может не нужно следить за меж рыночным спредом (арбитраж)?
4) или он умеет, без финансовых вложений двигать цену?

Вы не понимая сами,
Цитата
для недалёких
описали только что автоматическую, высокочастотную торговлю "с поводырем". А причины определяемые, как триггер, бывают разные.
Важно, что цену сильно опустили, и нужна была причина для разворота рынка. А я лишь указал на графике, где можно наблюдать классическую работу маркет - мейкера, я ее наблюдал на "ленте", увлекся, просто давненько не торговал такое сильное движение.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
nikolz,  Не понял, а что Вас не устраивает в LuaFuzzy простая библиотека, полностью написана на Lua, без всяких костылей, прекрасно работает на практике. Отвечает на вопрос о двойственности насколько объект принадлежит к то или иной области (например лингвистическая переменная тренд равна 0.65, а флет = 0.35 (в диапазоне 0/1)  ну и торгуем тренд.
Байесовский метод принятия решений не пользовался, если есть готовые библиотеки приведите, или хотя бы пример на луа.
Про функции распределения вероятностей я уже трогал чуть - чуть вопрос. Разные способы нормировки приводят к различным PDF, а значить  нужно строить стратегии с учетом этих функций. Классический пример это стохастик и RSI. Я выкладывал ссылку на небольшую статью John Ehlers, где он это прекрасно показал.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Ну что тут скажешь, быстро не получилось, а медленно и нам не нужно. Вернулся в тему, нечеткая логика, на мой взгляд может пригодиться нам,  в определении стратегии, т.е. пытаемся определить каким методом предпочтительней  в данный момент на данном инструменте торговать. Речь идет о  краткосрочной торговле, торговле по тренду и флете, И вообще возможно ли алгоритмически условно делить рынок на сегменты?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay,  А что неужели нет методов улучшения обучения? Этих персептронов на писано на разных языках, и все годами ждут обучения?  Ну если даже нет ошибки в luann2, то и решением это точно ни назовёшь, ответ через год это ни кому ненужный ответ, ну по крайней мере в нашей сфере.

luann1 меня конечно смущает, более привлекательно выглядит базовый пример с чего все началось (но сайт нынче не открывается, а Вы говорите ссылки, нужно у себя поискать, что имеем то храним)
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Да с уровнем, поддержки немного на путал новый 1.800 -1830.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Интересная ситуация сложилась на рынке ПРИРОДНОГО ГАЗА (NG) , всю прошлую неделю даже раньше, шли мощные продажи, казалось что уже совсем на этих уровнях нет покупателей. И вот вчера 21.02.24г., в работе маркет - мейкер, во всей своей красе. С утра гэпом улучшает свою логовую позицию, разворачивает рынок в рост, мощное пробитие уровня 1.692, запирает "шортистов" на уровне 1.790,
и целый день работает от этого диапазона видимо, разворачиваются и набирают лонговые позиции. А как вы хотели маркет - мейкера обижать! А что дальше? Я предполагаю откат в зону 1.750 и в рост. Ну вовсяком случае я в логе.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Ну, не работает в этой версии обратное распределение, ошибка уменьшается нормально до 0.42, а при достижении менее 0.41 в разы увеличиваются вычислительные мощности. Не удалось дождаться 0.1 уже не говоря про 0.01. Почему так происходит не разобрался, не могу понять, вроде все верно с точки зрения вычислений?
А как красиво модуль написан!
Какой пассаж!  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
nikolz написал:
следующий этап это http://torch.ch/
Библиотека наверняка интересная, но совсем не понятно как ей пользоваться под видовс?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
nikolz,  Просто была попытка в качестве примитива использовать синусоидальную функцию,  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Для тех кто заинтересовался библиотекой luann, вот тут исходники: https://github.com/wixico/luann
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay,  Помещаю я сюда для удобства использования, код не большой полностью функционален, меня берут сильные сомнения, что по ссылке, кто куда то  пойдет искать ошибку.
Написан на луа 5.1, нужно убедиться на соответствие 5.4.
А лишнее я убрал для экономии места, кому нужно всегда можно вернуться к исходникам (в моих все сохранено). Ваше замечание учту.

Сделал исправление
Код
function luann:getRMSE(predictions, expected)
   assert(#predictions == #expected, "ERR: #predictions ~= #expected")
   local numElements = 0
   local sum = 0
   for i=1, #predictions do
      -- for each set of predictions
      for j=1, #predictions[i] do
         -- for each output node
         numElements = numElements+1
         sum = sum + (expected[i][j]-predictions[i][j])^2--math.pow(expected[i][j]-predictions[i][j],2)
      end
   end
   local mse = sum/numElements
   return mse^0.5--math.sqrt(mse)
end
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay, Вы уже не первый кто меня хочет в чем то уличить, а я даже не понимаю в чем?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Это ответ
Код
Если  err = 0.42

Results:
0 0 | 0.087963877174929
0 1 | 0.65479578845313
1 0 | 0.65514033859186
1 1 | 0.67301633908636
Saving network to: demoNetwork.dump
Results:
Output of 0,0: 0.087963877174929
Output of 0,1: 0.65479578845313
Output of 1,0: 0.65514033859186
Output of 1,1: 0.67301633908636
>Exit code: 0    Time: 1.544

Если  err = 0.41 и ниже

Current RMSE: 0.41082711758809
Current RMSE: 0.41051673305992
Current RMSE: 0.4104241333885
Current RMSE: 0.41037984366439
Current RMSE: 0.41035393431294
Current RMSE: 0.41033694994401
Current RMSE: 0.41032496576157
Current RMSE: 0.41031606177729
Current RMSE: 0.41030918840836
Current RMSE: 0.41030372375712
Current RMSE: 0.41029927605292
Current RMSE: 0.41029558629415
Current RMSE: 0.41029247643831
Current RMSE: 0.41028982008542
Current RMSE: 0.41028752503411
Current RMSE: 0.41028552245745
Current RMSE: 0.41028375994307
Current RMSE: 0.41028219687901
Current RMSE: 0.41028080131238
Current RMSE: 0.41027954776023
Current RMSE: 0.41027841565222
Current RMSE: 0.41027738820225
Current RMSE: 0.41027645157721
Current RMSE: 0.41027559427552
Current RMSE: 0.41027480665622
Current RMSE: 0.41027408057764
Current RMSE: 0.41027340911714
Current RMSE: 0.41027278635136
Current RMSE: 0.41027220718234
Current RMSE: 0.41027166719876
Current RMSE: 0.41027116256414
Current RMSE: 0.41027068992629
Current RMSE: 0.41027024634327
Current RMSE: 0.41026982922256
Current RMSE: 0.41026943627071
Current RMSE: 0.41026906545149
Current RMSE: 0.41026871495082
Current RMSE: 0.4102683831473
Current RMSE: 0.41026806858733
Current RMSE: 0.41026776996397
Current RMSE: 0.41026748609891
Current RMSE: 0.41026721592702
Current RMSE: 0.41026695848313
Current RMSE: 0.41026671289054
Current RMSE: 0.41026647835116
Current RMSE: 0.41026625413687
Current RMSE: 0.41026603958203
Current RMSE: 0.41026583407693
Current RMSE: 0.41026563706206
Current RMSE: 0.41026544802301
Current RMSE: 0.41026526648604
Current RMSE: 0.41026509201416
Current RMSE: 0.41026492420362
Current RMSE: 0.4102647626808
Current RMSE: 0.41026460709947
Current RMSE: 0.41026445713833
Current RMSE: 0.4102643124988
Current RMSE: 0.41026417290304
Current RMSE: 0.41026403809221
Current RMSE: 0.41026390782484
Current RMSE: 0.41026378187541
Current RMSE: 0.41026366003308
Current RMSE: 0.41026354210048
Current RMSE: 0.41026342789266
Current RMSE: 0.41026331723616
Current RMSE: 0.41026320996809
Current RMSE: 0.41026310593536
Current RMSE: 0.41026300499395
Current RMSE: 0.41026290700826
Current RMSE: 0.41026281185048
Current RMSE: 0.41026271940006
Current RMSE: 0.41026262954319
Current RMSE: 0.41026254217235
Current RMSE: 0.41026245718585
Current RMSE: 0.4102623744875
Current RMSE: 0.41026229398616
Current RMSE: 0.4102622155955
Current RMSE: 0.41026213923363
Current RMSE: 0.41026206482282
Current RMSE: 0.41026199228929
Current RMSE: 0.41026192156289
Current RMSE: 0.41026185257695
Current RMSE: 0.410261785268
Current RMSE: 0.41026171957563
Current RMSE: 0.4102616554423
Current RMSE: 0.41026159281316


Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Это пример
Код
local luann = require("luann2")
math.randomseed(89890)

learningRate = 0.2;  ---- set between 0, 1
local err = 0.42--01 ---- train until RMSE < 0.01
--------------------

---- create a network with 2 inputs, 3 hidden cells, and 1 output
myNetwork = luann:new({2, 3, 1}, learningRate, 'sigmoid')

local inputs = {
   {0,0}, {1,0}, {0,1}, {1,1}
};
local expectedOutputs = {
   {0}, {1}, {1}, {0}
};

---- train the network
myNetwork:train(inputs, expectedOutputs, err)

---- print the signal of the single output cell when :activated with different inputs
print("Results:")

print("0 0 | " .. myNetwork:forwardPropagate({0,0})[1])
print("0 1 | " .. myNetwork:forwardPropagate({0,1})[1])
print("1 0 | " .. myNetwork:forwardPropagate({1,0})[1])
print("1 1 | " .. myNetwork:forwardPropagate({1,1})[1])

---- Save the network to a file
luann:saveNetwork(myNetwork, "demoNetwork.dump")

--Load the network from a file
newNetwork = luann:loadNetwork("demoNetwork.dump")

---- run the loaded network
print("Results:")

print("Output of 0,0: " .. myNetwork:forwardPropagate({0,0})[1])
print("Output of 0,1: " .. myNetwork:forwardPropagate({0,1})[1])
print("Output of 1,0: " .. myNetwork:forwardPropagate({1,0})[1])
print("Output of 1,1: " .. myNetwork:forwardPropagate({1,1})[1])




Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Попытка быстро собрать нечеткий апgроксиматор на основе двух готовых lua библиотек (luafuzzy, luann) - застряла?
Виновник тому - библиотекa, luann, не проходит обучение если порог err < 0.42. Вот уже который день не могу разобраться  почему?
Если кто то в теме посмотрите,
вот сам модуль
Скрытый текст
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
VPM написал:
Нечеткая логика - равно расширенная логика, полностью совместимая с классической логикой в предельных случаях, обладающая невероятной мощью и простотой.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
nikolz написал:
VPM ,
А чем отличается нечеткая логика от четкой логики?  Можете показать пример на луа?
Ну так пример выложен выше, нажмите кнопку скрытый текст?

Вот, результат Бек - теста, период симуляции 1 торговый день, 4 инструмента, вставил нечеткое правило закрытие позиции, в простую торговую стратегию.

[Mon Feb 19 18:22:22 2024] Info: ETS: 337/-23; 32/1; MO=9.52; AveWin=10.53; AveLoss=-23; PF=14.65; %W=96.97; Fopt=0.97
где,  
337/-23;      -- пункты, выигрыш/проигрыш
32/1;         -- количество сделок, выигрыш/проигрыш
MO=9.52;      -- мат ожидание системы
AveWin=10.53; -- средний выигрыш
AveLoss=-23;  -- средний проигрыш
PF=14.65;     -- профит фактор системы
%W=96.97;     -- процент выигрышных сделок системы
Fopt=0.97     -- оптимальная фракция
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
nikolz, Ползает робот - пылесос и меня это совсем не смущает, стиральная машина стирает и меня это не смущает. В быту куда не ткнись наткнешься на Fuzzy Logic, и это ни кого не смущает. Срок говорит о проверке временем, и подтверждает тот факт, что решать задачи управления лучше простыми методами. Хотя при проектировании Fuzzy System легко наделать ошибок.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Kolossi, Прежде чем, что - то куда - то вставлять, неплохо бы вначале, разработать лингвистические переменные для входящих данных, для выхода, создать правила, разработать алгоритм использования ответов. И это задача далеко не простая. Ну прежде чем встраивать в реал, нужно от тестировать. (Алгоритм создания есть в примере).
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Владимир,  Дифирамб мой в отношении луа, как раз и заключается в том что увидел, как эта задача реализуется на языке программирования mql.
Относительно ADX, это просто упрощенный пример, хорошо известный широкой публике, для понимания вопроса как этим можно пользоваться а нашем контексте.
Про нечеткую логику можно легко "погуглить" (на пример, мне нравится пример управление автомобилем). Обращу внимание лишь на главное.
Пример, задали четкую пороговую границу  TREND = ADX>30 or false, что получается 30.1 тренд а 29.9 нет.  Что же предлагает нечеткая логика. Происходит размытие четко заданных границ, они становятся нечеткими. То есть в приграничных зонах жестко заданных категорий появляется двойственность — сила тренда относится сразу к двум понятиям, но с разной степенью принадлежности.
 
Относительно трендов согласен с Вами, скажу про свой подход гоняю 5 тайм фреймов это минимум (легко могу увеличить только пока не вижу задачи зачем это делать), 3 тайм фрейма это торговые, я про это писал  на страницах "двойной очереди". Главный старший определяет тренд, Затем торговый для поиска сигналов на удержание длительной позиции, и младший на котором все уточняется. Два остальных технические(1 минута и 1 секунда). В своем подходе, выделяю не только тренд, но циклическую компоненту и флат, то есть строю гипотезы о состоянии рынка, от этого зависит, какая стратегия торгует в данный момент, и здесь тоже нечеткая логика.

Волатильность имеет важное значение у меня отвечает за торговые цели, установку параметров sl, tp, но это совершенно другие задачи, определяя направлен тренда - определяем куда наиболее вероятно двигается цена за определенный промежуток времени (если хотите это мера смещения центра, хорошо характеризует альфа в линейной регрессии).

Что касается портфеля, а что мешает Вам написать так: ADX={} ADX[i]=function ADX().  
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Просматривая материалы по теме, мне захотелось пропеть дифирамб луа, судите сами, как относительно просто, элегантно, интуитивно понятно написана библиотека (Все познается в сравнении!)
Все что на страницах данного сайта обсуждается, в конечном итоге с водится к одному - принятию торгового решения, в той или иной рыночной  ситуации. И нечеткая логика нам в этом помогает.
Для огромного количества технических задач создаются AI с использованием нечеткой логике, вот и я переделывая свою программу, подошел на конец к этапу - "бэктестинга".
При котором нужно создовать правила решения управенческих задач, всповнил про нечеткую логику, решил поделиться свими соображениями. Пользоваться этим или не пользоваться решать Вам.
Могу сказать одно, я у себя собираю комбинированный подход эксперт + нечеткая логика.

Выкладываю совсем простой пример (собрал "на коленке"), но от этого не менее мощный.
Определяем силу тренда при помощи алгоритма ADX (J. Welles Wilder) устанавливая четкие правила, ответ индикатора являются входным сигналом для нечеткого индикатора.
Выходной сигнал нечеткого индикатора, будет корректировать нашу позицию на рынке с учетом нечеткой переменной силы тренда, в стратегии это ТП и СЛ; можно задать размер лота; значение процента риска депозита относительно нечеткой переменной или еще чего то там ...  Делитесь идеями, выкладывайте примеры! Хорошей алго торговли!

Скрытый текст
Имитация:
print('системa рекомендаций;')
for adx = 30,60, 5 do
     print('cилы тренда: ADX = ', adx, 'выходной сигнал, с учетом силы тренда корректировать позицию на ',math.floor(mamdani_adx( adx ) ), 'пунктов')
end
Ответы: системa рекомендаций;
cилы тренда: ADX = 30 выходной сигнал, с учетом силы тренда корректировать позицию на 14 пунктов
cилы тренда: ADX = 35 выходной сигнал, с учетом силы тренда корректировать позицию на 14 пунктов
cилы тренда: ADX = 40 выходной сигнал, с учетом силы тренда корректировать позицию на 14 пунктов
cилы тренда: ADX = 45 выходной сигнал, с учетом силы тренда корректировать позицию на 25 пунктов
cилы тренда: ADX = 50 выходной сигнал, с учетом силы тренда корректировать позицию на 25 пунктов
cилы тренда: ADX = 55 выходной сигнал, с учетом силы тренда корректировать позицию на 30 пунктов
cилы тренда: ADX = 60 выходной сигнал, с учетом силы тренда корректировать позицию на 35 пунктов
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
TGB, Спасибо!

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

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

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

Как бы торговал человек, которому как раз присуща нечеткость категорий, различное мнение при схожих сигналах на вход? Он бы пытался оценить тренд, задаваться вопросом: а насколько он средний, или, может быть, он ближе к сильному, или сильный, но не настолько, чтобы входить двойным лотом по стратегии?

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

Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Подскажите пожалуйста, как можно сворачивать окно а при необходимости развернуть, получилось слишком большое окно не очень удобно.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Есть небольшая библиотека написана на луа 5.1.

"LuaFuzzy простая библиотека, полностью написана на Lua, для решения проблем с применением нечеткой логики.  
Она была разработана на основе нечеткой логики арсенале Matlab, поэтому она очень похожа легко понять и использовать его.  
Она реализует систему логического вывода Mamdani".

Предлагаю Вашему вниманию luafuzzy.lua (библиотека не большая для удобства выкладываю сюда)
Код
---------------------------------
-- Fuzzy Operations
---------------------------------

-------------------------------------------------------------------------------
-- Tmin
-------------------------------------------------------------------------------
function tmin(a1,a2)
  if a2 < a1 then
    return a2
  else
    return a1
  end
end

-------------------------------------------------------------------------------
-- Tmax
-------------------------------------------------------------------------------
function tmax(a1,a2)
  if a2 < a1 then
    return a1
  else
    return a2
  end
end

-------------------------------------------------------------------------------
-- Tsum
-------------------------------------------------------------------------------
function tsum(a1,a2)
  --local y = a1 + a2
  return a1 + a2--y -- stop in one(limit)?
end

-------------------------------------------------------------------------------
-- Tprod
-------------------------------------------------------------------------------
function prod(a1,a2)
  return a1*a2
end

---------------------------------
-- Membership Functions (членство)
---------------------------------

-------------------------------------------------------------------------------
--[[-- Gaussian membership function
-- @param x Input value
-- @param params Table of parameters: 
--   - params[1] = standard deviation 
--   - params[2] = mean
-- @return The value of the pertinence
Гауссова функция принадлежности
- @ Параметров х Входное значение
- @ Параметров ПАРАМЕТРЫ Таблица параметров:
--- ПАРАМЕТРЫ [1] = стандартное отклонение
--- ПАРАМЕТРЫ [2] = средняя
- @ Возвращать значение уместности]]
-------------------------------------------------------------------------------
function gaussmf( x, params )
  return math.exp( -((x - params[2])^2)/(2*params[1]^2))
end

-------------------------------------------------------------------------------
--[[-- Trapezoidal membership function
-- @param x Input value
-- @param params Table of parameters(see chart below)
-- @return The value of the pertinence
--
-- pertinency
- Функция принадлежности трапецеидальной
- @ Параметров х Входное значение
- @ Параметров ПАРАМЕТРЫ Таблица параметров (см. таблицу ниже)
- @ Возвращать значение уместности
- уместность]]
--   ^
--   |
--   |  /2+++3\  
--   | /       \
--  -|1---------4-->x
-------------------------------------------------------------------------------
function trapmf( x, params)
  if x > params[1] and x < params[2] then
    return (x-params[1])/(params[2]-params[1])
  elseif x >= params[2] and x < params[3] then
    return 1
  elseif x >= params[3] and x < params[4] then
    return (params[4]-x)/(params[4]-params[3])
  else
    return 0
  end
end

-------------------------------------------------------------------------------
--[[-- Triangular membership function
-- @param x Input value
-- @param params Table of parameters(see chart below)
-- @return The value of the pertinence
--
-- pertinency
- Треугольные функции принадлежности
- @ Параметров х Входное значение
- @ Параметров ПАРАМЕТРЫ Таблица параметров (см. таблицу ниже)
- @ Возвращать значение уместности
- уместность]]
--   ^
--   |
--   |  /2\  
--   | /   \
--  -|1-----3-->x
-------------------------------------------------------------------------------
function trimf( x, params )
  if x > params[1] and x < params[2] then
    return (x-params[1])/(params[2]-params[1])
  elseif x >= params[2] and x < params[3] then
    return  (params[3]-x)/(params[3]-params[2])
  else
    return 0
  end
end

---------------------------------
-- Deffuzification Functions
---------------------------------

-------------------------------------------------------------------------------
-- Centroid deffuzyfication method
-- @param fs A fuzzyset with pairs of x and y like: fs[1].x, fs[1].y
-- @returm Return the geometric center value
-------------------------------------------------------------------------------
function centroid( fs )
  if #fs <= 1 then
    error('invalid number of fuzzyset entries')
  end
  local accxy = 0
  local accy = 0
  for i,v in ipairs(fs) do    
    if v.y > 0 then
      accxy = accxy + v.x*v.y
      accy = accy + v.y
    end
  end
  if accy > 0 then  
    return accxy/accy
  else
    return (fs[1].y-fs[#fs].y)/2
  end
end

---------------------------------
-- Fuzzy Inference System
---------------------------------

-------------------------------------------------------------------------------
 --[[-- Method to solve a fuzzy system
-- @param self The fuzzy system
-- @param ... A vararg list of input values
-- @return A vararg list of output values
Метод решить нечеткой системы
- @ Параметр self нечеткая система
- @ Параметр ... Список переменных аргументов входных значений
- @ Возвращать список VARARG выходных значений]]
-------------------------------------------------------------------------------
local function solvefuzzy( self, ... )
  local fuzzy = self
  local inpvals = {...}
  -- error check
  if #fuzzy.inps <= 0 then error('invalid number of inputs') end
  if #fuzzy.outs <= 0 then error('invalid number of outputs') end
  if #fuzzy.rules <= 0 then error('invalid number of rules') end
  -- solve each input
  for i,inp in ipairs(fuzzy.inps) do
    -- current input value
    local x = inpvals[i]
    
    -- error check
    if x > inp.mx or x < inp.mn then
      error('value ' .. x .. ' out of range for input \'' .. inp.name .. '\'')
    end
    -- save the current value of the function for each lingvar
    for _,lg in pairs(inp.lingvars) do
      lg.value = lg.mf( x, lg.params )
    end
  end

  -- for each rule...
  for ri,r in ipairs(fuzzy.rules) do
    --
    -- Errors Check
    --
    -- range errors check
    if #r.pres <= 0 then error('invalid number of premises') end
    if #r.imps <= 0 then error('invalid number of implications') end
    -- premises errors check
    for pi=1,#r.pres do
      if not fuzzy.inps[r.pres[pi].ifpart] then 
        error('invalid \'if part = '..r.pres[pi].ifpart..'\' for premise '..pi..' of rule ' .. ri) 
      end      
      if not fuzzy.inps[r.pres[pi].ifpart].lingvars[r.pres[pi].ispart] then
        error('invalid \'is part = '..r.pres[pi].ispart..'\' for premise '..pi..' of rule ' .. ri) 
      end
    end
    -- implications errors check
    for ii,imp in ipairs(r.imps) do
      if not fuzzy.outs[imp.thenpart] then 
        error('invalid \'then part = '..imp.thenpart..'\' for implication '..ii..' of rule ' .. ri) 
      end      
      if not fuzzy.outs[imp.thenpart].lingvars[imp.ispart] then 
        error('invalid \'is part = '..imp.ispart..'\' for implication '..ii..' of rule ' .. ri) 
      end      
    end
    -- connection function error check
    if not fuzzy[r.connmethod] then
      error('invalid \'connection method = '..r.connmethod..'\' for rule '..ri..'. (must be \'andmethod\' or \'ormethod\')') 
    end
    --
    -- Calculate the result value for a rule...
    --
    -- retrive the connection function
    local conn = fuzzy[r.connmethod]
    -- result value of premises
    r.value = fuzzy.inps[r.pres[1].ifpart].lingvars[r.pres[1].ispart].value
    -- for each premise...
    for pi=2,#r.pres do
      local v = fuzzy.inps[r.pres[pi].ifpart].lingvars[r.pres[pi].ispart].value
      r.value = conn(v, r.value)
    end
    --
    -- Calculate the resulting fuzzyset for each implication...
    --
    for _,imp in ipairs(r.imps) do
      -- retrive the out's table
      local out = fuzzy.outs[imp.thenpart]
      -- retrive the lingvar fr om the out table
      local lg = out.lingvars[imp.ispart]
      -- save the fuzzyset for each implication
      imp.fuzzyset = {}
      -- compute the step
      local step = (out.mx - out.mn)*fuzzy.step
      -- calculate the resulting fuzzyset
      for i=out.mn,out.mx,step do
        -- computes the mf value for i
        local lgval = lg.mf( i, lg.params )        
        -- compute the implication result
        local v = fuzzy.implicmethod( lgval , r.value )
        -- add the result to the fuzzy set
        table.insert( imp.fuzzyset, { x=i, y=v } )
      end
    end -- end implications
  end -- end rules
  --
  -- Computes output...
  --
  -- result table
  local outvals = {}
  -- solve each output
  for i,out in ipairs(fuzzy.outs) do
    -- clear previews fuzzyset
    out.fuzzyset = nil
    -- for each rule...
    for _,r in ipairs(fuzzy.rules) do
      --
      -- Aggregation
      --
      -- for each implication
      for _,imp in ipairs(r.imps) do
        if out.name == imp.thenpart then
          if not out.fuzzyset then
            out.fuzzyset = {}
            -- copy the first implication fuzzyset
            for k,v in ipairs(imp.fuzzyset) do
              out.fuzzyset[k] = { x=v.x, y=v.y }
            end
          else
            -- calculate the resulting fuzzyset with aggregation method
            for i,v in ipairs(out.fuzzyset) do
              -- computes the new value
              out.fuzzyset[i] = { x=v.x, y = fuzzy.aggregmethod( v.y, imp.fuzzyset[i].y ) }
            end
          end
        end
      end
    end
    --
    -- Defuzzification...
    --
    -- call deffuzyfication method
    out.value = fuzzy.defuzzmethod( out.fuzzyset )
    -- add output value to result table
    table.insert( outvals, out.value )    
  end

  return unpack( outvals )
end

---------------------------------
-- Fuzzy System
---------------------------------
--
-------------------------------------------------------------------------------
--[[-- Method to add a new linguistic variable to a fuzzy input or output
-- @param self The variable's table
-- @param name Name of the variable
-- @param mf The membership function
-- @param params Table of parameters of the membership function
-- @return The lingvar's table
Метод для добавления нового языкового переменной нечеткой входа или выхода
- @ Параметров самостоятельно таблице переменной
- @ Параметров имя Имя переменной
- @ Параметров MF функция принадлежности
- @ Параметров ПАРАМЕТРЫ Таблица параметров функции принадлежности
- @ Вернуться таблицу в lingvar в]]
-------------------------------------------------------------------------------
local function addlingvar( self, name, mf, params )
  local var = self
  local lg = {}
  lg.name = name
  lg.mf = mf
  lg.params = params
  var.lingvars[lg.name] = lg
  return lg  
end

-------------------------------------------------------------------------------
--[[-- Method to add a new input variable to a fuzzy system
-- @param self The fuzzy system table
-- @param name Name of the variable
-- @param mn Lower lim it of values
-- @param mx Upper limit of values
-- @return The variable's table
- Метод, чтобы добавить новую переменную ввода на нечеткой системы
- @ Параметров самостоятельно нечеткой системной таблицы
- @ Параметров имя Имя переменной
- @ Параметров млн. Нижний предел значений
- @ Параметров м Верхний предел значений
- @ Вернуться таблицу переменной]]
-------------------------------------------------------------------------------
local function addinp( self, name, mn, mx )
  local fis = self
  local inp = {}
  inp.name = name
  inp.mn = mn
  inp.mx = mx
  inp.lingvars = {}     
  inp.addlingvar = addlingvar  
  table.insert( fis.inps, inp )
  fis.inps[inp.name] = inp
  return inp
end

-------------------------------------------------------------------------------
--[[-- Method to add a new output variable to a fuzzy system
-- @param self The fuzzy system table
-- @param name Name of the variable
-- @param mn Lower limit of values
-- @param mx Upper limit of values
-- @return The variable's table
Метод для добавления нового выходной переменной к нечеткой системы
- @ Параметров самостоятельно нечеткой системной таблицы
- @ Параметров имя Имя переменной
- @ Параметров млн. Нижний предел значений
- @ Параметров м Верхний предел значений
- @ Вернуться таблицу переменной]]
-------------------------------------------------------------------------------
local function addout( self, name, mn, mx )
  local fis = self
  local out = {}
  out.name = name
  out.mn = mn
  out.mx = mx
  out.lingvars = {}     
  out.addlingvar = addlingvar  
  table.insert( fis.outs, out )
  fis.outs[out.name] = out
  return out
end

-------------------------------------------------------------------------------
--[[-- Method to add a new premise to a rule
-- @param self The rule's table
-- @param neg Flag to informe if the implication output should be negated
-- @param ifpart Name of the input variable
-- @param ispart Name of the linguistic variable of the input
-- @return The premises table
- Метод, чтобы добавить новое помещение, чтобы правило
- @ Параметров самостоятельно таблице в правиле
- @ Параметров нег Флаг, Informe если выход вывод следует быть сведены на нет
- @ Параметров ifpart Имя входной величины
- @ Параметров ispart Название лингвистической переменной входа
- @ Вернуть таблицу помещения]]
-------------------------------------------------------------------------------
local function addpremise( self, neg, ifpart, ispart )
  local rule = self
  local prem = {}
  prem.neg = neg
  prem.ifpart = ifpart
  prem.ispart = ispart
  table.insert( rule.pres, prem )
  return prem
end

-------------------------------------------------------------------------------
--[[-- Method to add a new implication to a rule
-- @param self The rule's table
-- @param neg Flag to informe if the implication output should be negated
-- @param thenpart Name of the output variable
-- @param ispart Name of the linguistic variable of the ouput
-- @return The implication's table--]]
-------------------------------------------------------------------------------
local function addimplic( self, neg, thenpart, ispart )
  local rule = self
  local impl = {}
  impl.neg = neg
  impl.thenpart = thenpart
  impl.ispart = ispart
  table.insert( rule.imps, impl )
  return impl
end

-------------------------------------------------------------------------------
--[[-- Method to add a new rule to a fuzzy sistem
-- @param self The fuzzy system
-- @param weight The weight of the rule
-- @param connmethod The connection method. (must be: 'andmethod' or 'ormethod')
-- @return The rule's table--]]
-------------------------------------------------------------------------------
local function addrule( self, weight, connmethod )
  local fis = self
  local rule = {}
  rule.weight = weight
  rule.connmethod = connmethod
  rule.pres = {}
  rule.imps = {}
  rule.addpremise = addpremise
  rule.addimplic = addimplic
  table.insert( fis.rules, rule )
  return rule
end

-------------------------------------------------------------------------------
-- Create a new fuzzy system
-- @return A new table with the fuzzy system
-------------------------------------------------------------------------------
function luafuzzy()
  -- create new table(создать новую таблицу)
  local fuzzy = {}
  
  -- and method
  fuzzy.andmethod = tmin
  
  -- or method
  fuzzy.ormethod = tmax
  
  -- implication method(метод Смысл)
  fuzzy.implicmethod = tmin
  
  -- aggregation method()
  fuzzy.aggregmethod = tmax
  
  -- deffuzification method
  fuzzy.defuzzmethod = centroid
  
  -- step used to compute a discrete fuzzyset(Шаг используется для вычисления дискретного fuzzyset)
  fuzzy.step = 0.01
  
  -- table os rules
  fuzzy.rules = {}
  
  -- table of inputs
  fuzzy.inps = {}
  
  -- tabla of outputs
  fuzzy.outs = {}
  
  -- method to add a new input
  fuzzy.addinp = addinp
  
  -- method to add a new output
  fuzzy.addout = addout
  
  -- method to add a new rule
  fuzzy.addrule = addrule
  
  -- method to solve the fuzzy inferece system
  fuzzy.solve = solvefuzzy
  
  return fuzzy
end
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Система принятия решений и/или Нечеткая логика(FuzzyLogic)
==================================================

"Системы поддержки принятия решения (СППР) (Decision Support System, DSS) - это интерактивные автоматизированные системы, помогающие лицу, принимающему решения, использовать данные и модели для решения слабо структурированных проблем".

В этой ветке предлагаю обсудить область применения Fuzzy Logic в задачах трейдинга.
реализации систем правил в задачах принятии управленческих решений, управление риском (риск менеджмент), управление позицией (мани менеджмент), построение торговых стратегий.

В общем случае, область применения нечеткой логики не знает границ.
В любом алгоритме, в любой системе правил, где используются четкие выводы (истина и ложь, 1 или 0), можно пробовать заменить их на степень истинности (степень принадлежности), для более точного отражения реальности.
Нечеткая логика - равно расширенная логика, полностью совместимая с классической логикой в предельных случаях, обладающая невероятной мощью и простотой.
Наш мир, фундаментально нечеток.
Сдвиговые регистры, циклические массивы. Экономим память
 
nikolz, Не знаю кто что проходил, но мой вариант  Вот ,
Код
function List.new()
 --return {first = 0, last = -1}
 return {first = 0, last = 0}
end

local list=List.new()
local length=10; local M=1000--00--00
print("объем начального массива", M, "Кол. элементов в созданном length=",length);
local count1 = collectgarbage("count") -- получаем текущий размер памяти
------------------------------ LIFO
for i=1, M do

print(i, ')','Начальные индексы', 'list.first =', list.first, '; list.last =', list.last )

List.pushlast(list,i)
print(i, ')','Вставил', 'index list.last =', list.last,'; присвоил значение элементa =',list[list.last], '(',collectgarbage("count"),')' )

if i>length then
List.popfirst(list)
print( i, 'Операция - Удаление первого:', ')', 'присвоил индекс первоve элементу =', list.first, 'вернул значение первого элементa =', list[list.first] ,'(',collectgarbage("count"),')' ) --, list.first
end

end
print("LIFO (вариант реализации стека с помощью двусторонней очереди.) ----------------------");
print("начальный объем занятой памяти",count1);

print("число элементов в LIFO list после "..(M).." циклов функции рор=" ..(list.last-list.first))
local countOUT = collectgarbage("count")
print("объем занятой памяти",countOUT);
--------------------------------
collectgarbage("collect")
print("объем занятой памяти после сборщика мусора",collectgarbage("count"));
это стек, который в трейдинге называют динамическим окном, у меня в этом примере все доделано,  
то что вы демонстрируете это просто вставка элементов в массив, как она вообще может уменьшаться?
Сдвиговые регистры, циклические массивы. Экономим память
 
nikolz,  программа и тест есть на 25 странице в моей теме Двойные очереди.

Сложно с Вами с программистами, каждый на своей волне, "забейте", проще самому провести.
Сдвиговые регистры, циклические массивы. Экономим память
 
nikolz,  Это я и хотел сравнить, сделать один размер массивов, один размер окна прогнать на скорость на память, на время исполнения?
Цитата
nikolz написал:
и еще...
ваша стек-очередь напоминает недоделанный циклический массив.
Если его доделать, то он будет делать ровно тоже самое, что и мой вариант сдвига массива выше.
--------------------
Циклический массив работает быстрее, чем сдвиг массива.
Но в луа из него медленнее брать данные.
Его интереснее делать на C и встраивать сразу в индикаторы и фильтры.
Но это уже другая тема.
Сдвиговые регистры, циклические массивы. Экономим память
 
Вот из букваря:

Стек — это коллекция, элементы которой получают по принципу «последний вошел, первый вышел» (Last-In-First-Out или LIFO).
Это значит, что мы будем иметь доступ только к последнему добавленному элементу.

Очереди очень похожи на стеки. Они также не дают доступа к произвольному элементу, но, в отличие от стека, элементы кладутся (enqueue) и забираются (dequeue) с разных концов.
Такой метод называется «первый вошел, первый вышел» (First-In-First-Out или FIFO).
То есть забирать элементы из очереди мы будем в том же порядке, что и клали. Как реальная очередь или конвейер.

Двусторонняя очередь (Double-ended queue), или дек (Deque), расширяет поведение очереди.
В дек можно добавлять или удалять элементы как с начала, так и с конца очереди.
Такое поведение полезно во многих задачах, например, планирование выполнения потоков или реализация других структур данных.

Позже мы рассмотрим вариант реализации стека с помощью двусторонней очереди.
Сдвиговые регистры, циклические массивы. Экономим память
 
nikolz,  Вы попробуйте пример,   никакие nil не вставляются, если Вы об этом
if first > list.last then   return nil   end,
то это только проверка на ошибку.

В моем примере этой ошибки быть не может, так как вставляется последний элемент,  массив нарастает до значения length  if i>length then, (то есть определен размер окна).
После достижения идет присвоение последнего  и переписывание первого значения окна. Все.
Сдвиговые регистры, циклические массивы. Экономим память
 
Я Вам говорю про этот вариант, в Вашем первоначальном есть логическая ошибка, это тоже окно ну или стек:

Пример от nikolz,  оказал не оценимую помощь, помог разобраться в чем была путаница и не до понимание, помог собрать вариант который я объяснял.

Ниже пример, то о чем пытался я сказать.
И что мы видим, реализован принцип LIFO  «последний вошел, первый вышел» (Last-In-First-Out или LIFO). Это вариант стека с помощью двусторонней очереди, не смотря на то что алгоритм называется двусторонняя очередь, собран СТЕК!  

function List.new()
 --return {first = 0, last = -1}
 return {first = 0, last = 0}
end

Код
local list=List.new()
local length=10; local M=1000--00--00
print("объем начального массива", M, "Кол. элементов в созданном length=",length);
local count1 = collectgarbage("count") -- получаем текущий размер памяти
------------------------------ LIFO
for i=1, M do

print(i, ')','Начальные индексы', 'list.first =', list.first, '; list.last =', list.last )

List.pushlast(list,i)
print(i, ')','Вставил', 'index list.last =', list.last,'; присвоил значение элементa =',list[list.last], '(',collectgarbage("count"),')' )

if i>length then
List.popfirst(list)
print( i, 'Операция - Удаление первого:', ')', 'присвоил индекс первоve элементу =', list.first, 'вернул значение первого элементa =', list[list.first] ,'(',collectgarbage("count"),')' ) --, list.first
end

end
print("LIFO (вариант реализации стека с помощью двусторонней очереди.) ----------------------");
print("начальный объем занятой памяти",count1);

print("число элементов в LIFO list после "..(M).." циклов функции рор=" ..(list.last-list.first))
local countOUT = collectgarbage("count")
print("объем занятой памяти",countOUT);
--------------------------------
collectgarbage("collect")
print("объем занятой памяти после сборщика мусора",collectgarbage("count"));
Сдвиговые регистры, циклические массивы. Экономим память
 
nikolz,  Вы можете сравнить это метод с
local lifo=List.new() List.pushlast(lifo,i) List.popfirst(lifo),
и где какой использовать лучше или предпочтительней?
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 12 ... 23 След.
Наверх