MQL4 - automated forex trading   /  

Code Base

Code Base  Советники  МTC "Сombo" Авторизуйтесь или зарегистрируйтесь, чтобы добавить новый код

Этот индикатор для
MetaTrader 4

Мобильный трейдинг!
Купите лицензию и торгуйте мобильно

Имя:
МTC "Сombo" [ en ]
Автор: Reshetov (27.02.2008 09:54)
Рейтинг: 9
Скачано: 8591
Скачать:
 Combo_Right.mq4 (4.6 Kb) View
Постановка задачи для данной МТС звучит так:

Пусть у нас есть некая базовая торговая система - БТС. Необходимо
спроектировать и обучить нейросеть таким образом, чтобы она могла
делать то, на что неспособна БТС. В результате чего должна получиться
торговая система из двух комбинированных и взаимнодополняющих друг
друга БТС и НС.

Или говоря по простонародному, незачем изобретать велосипед, коли он
уже давно изобретен. Ведь зачем пытаться научить кого либо быстро
бегать, если есть автомобиль или летать, если есть вертолет?

Если у нас есть трендовая ТС, то необходимо обучить нейросеть только
контртрендовой стратегии. Потому что, система предназначенная для
трендов не в состоянии адекватно торговать в трендах боковых, распознавать
откаты или развороты. Можно, конечно взять две МТС, одну потрендовую, вторую контртрендовую и поставить торговать на один чарт. Но с другой стороны, также можно и обучить нейронную сеть дополнять какую либо торговую систему.

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

  1. Вход в рынок длинной позицией
  2. Вход в рынок короткой позицией
  3. Неопределенное состояние

Собственно третье состояние - это передача управления БТС, в то время, как в первых двух торговые сигналы выдаются нейросетью.

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

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

Но самый первый этап, предваряющий обучение НС, состоит в оптимизации БТС.

Чтобы не запутаться, номер этапа заносится во входной параметр МТС c
идентификатором - pass. А идентификаторы входных параметров,
соответствующих номеру этапа заканчиваются на число равное этому самому
номеру.

Итак, предварительная подготовка к оптимизации и обучению НС. В в
тестере в свойствах эксперта, вкладка "Тестирование" установим
начальный депозит $1000000 (так, чтобы не создать искуственного
маржинколла во время оптимизации), оптимизируемый параметр "Balance" и
включим генетический алгоритм.

Переходим во вкладку "Входные параметры" свойств советника.
Устанавливаем размер лота открываемых позиций, присвоив идентификатору
lots значение 1.

Оптимизацию будем проводить по модели: "По ценам открытия (Быстрый метод на сформировавшихся барах, только для советников с явным контролем открытия баров).", поскольку такой контроль в алгоритме МТС присутствует.

Первый этап оптимизации. Оптимизация БТС:

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

tp1 - тейкпрофит БТС. Оптимизируется значениями от 10 до 100 с шагом 1
sl1 - стоплосс БТС. Оптимизируется значениями от 10 до 100 с шагом 1
p1 - период осциллятора CCI, который применяется в БТС. Оптимизируется значениями от 3 до 100 с шагом 1

После оптимизации БТС получаем результаты:


Второй этап. Обучение перцептрона отвечающего за короткие позиции:

Входному параметру pass придаем значение 2, т.е. соответствующее номеру этапа.
Убираем галочки оптимизации, выставленные на предыдущем этапе. Сохраняем, на всякий случай входные параметры, полученные на предыдущем этапе в файл.

Устанавливаем галочки оптимизации для параметров второго этапа, т.е. идентификаторы которых заканчиваются двойкой:

x12, x22, x32, x42 - весовые коэффициенты перцептрона, распознающего короткие позиции. Оптимизируются значениями от 0 до 200 с шагом 1.
tp2 - тейкпрофит позиций, открываемых перцептроном. Оптимизируется значениями от 10 до 100 с шагом 1
sl2 - стоплосс позиций, открываемых перцептроном. Оптимизируется значениями от 10 до 100 с шагом 1
p2 - период значений разницы цен, который анализируется перцептроном. Оптимизируется значениями от 3 до 100 с шагом 1.

Запустим обучение через оптимизацию ГА. По завершении получаем результаты:

Третий этап. Обучение перцептрона отвечающего за длинные позиции:

Входному параметру pass придаем значение 3, т.е. соответствующее номеру этапа.
Убираем галочки оптимизации, выставленные на предыдущем этапе.
Сохраняем, на всякий случай входные параметры, полученные на предыдущем
этапе в файл.

Устанавливаем галочки оптимизации для параметров второго этапа, т.е. идентификаторы которых заканчиваются тройкой:

x13, x23, x33, x43 - весовые коэффициенты перцептрона, распознающего длинные позиции. Оптимизируются значениями от 0 до 200 с шагом 1.
tp3 - тейкпрофит позиций, открываемых перцептроном. Оптимизируется значениями от 10 до 100 с шагом 1
sl3 - стоплосс позиций, открываемых перцептроном. Оптимизируется значениями от 10 до 100 с шагом 1
p3 - период значений разницы цен, который анализируется перцептроном. Оптимизируется значениями от 3 до 100 с шагом 1.

Запустим обучение через оптимизацию ГА. По завершении получаем результаты:



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

Входному параметру pass придаем значение 4, т.е. соответствующее номеру этапа.
Убираем галочки оптимизации, выставленные на предыдущем этапе.
Сохраняем, на всякий случай входные параметры, полученные на предыдущем
этапе в файл.

Устанавливаем галочки оптимизации для параметров второго этапа, т.е. идентификаторы которых заканчиваются четверкой:

x14, x24, x34, x44 - весовые коэффициенты перцептрона первого слоя. Оптимизируются значениями от 0 до 200 с шагом 1.
p4 - период значений разницы цен, который анализируется перцептроном. Оптимизируется значениями от 3 до 100 с шагом 1.

Запустим обучение через оптимизацию ГА. По завершении получаем результаты:


Все, нейронная сеть обучена.

У МТС есть еще один неоптимизируемый входной параметр mn - магический номер, т.е. идентификатор позиций, чтобы торговая система не путала свои ордера с ордерами открытыми вручную или другими МТС. Значение магического номера должно быть уникальным и не совпадать с магическими номерами позиций которые не были открыты данным советником.

P.S.

  • Размер начального депозита определяется как абсолютная просадка умноженная на два, т.е. с запасом прочности.
  • Советник в исходниках не оптимизирован
  • Если возникнет необходимость заменить встроенную БТС , алгоритмом другой торговой системы, то необходимо изменить содержимое функции basicTradingSystem()
  • Чтобы не вводить вручную начальные, конечные значения и размеры шагов оптимизации, можно взять готовый файл combo.set и поместив его в папку \tester MT4, загрузить в свойствах советника в тестере.

  • Переоптимизация советника выполняется в выходные, т.е. в субботу или (либо) в воскресенье, но только в том случае, если результаты предыдущей недели были убыточными. Наличие убытков говорит, что рынок изменился и необходима переоптимизация. Наличие прибыли, говорит о том, что МТС не нуждается в переоптимизации и достаточно хорошо распознает рыночные паттерны
К сожалению? в начальную, выложенную здесь версию исходников закралась досадная ошибка: одна из закрывающихся фигурных скобок стояла не на месте, из-за чего 4 этап обучался и интерпретировался не корректно. Просьба ко всем, кто скачал файл Combo.mq4 обновиться до версии Combo_Right.


43 комментария: 1 2 3 4 5   Авторизуйтесь или зарегистрируйтесь, чтобы добавить новый комментарий
TheXpert писал(а):

Вся логика находится внутри супервизора, он физически не может отдать сразу два противоположных сигнала. Впрочем, не суть.

if (pass == 2) {
 
написать
 
if (pass >= 2) {

Вся логика внутри супервизора не может, потому что всецело зависит от переменной pass.

Прежде чем вы напишите свой эксперт предлагаю подумать над слудующими вопросами. Предположим Вы реализуете работу всего эксперта только через if (pass >= 2) { , но при этом доступ ко второму перцептрону оставите в виде if (pass == 3) { , что получится при обращении к процедуре супервизор? Если pass=1 - то перцептроны будут отключены, и будет работать только БТС. Если pass=2 - то будет работать перцептрон 1 + БТС. Если pass=3 - то будет работать перцептрон 2 + БТС, до 1-го перцептрона просто недойдёт, потому что установлены выходы из процедуры Supervisor()  по return( , либо при сигнале от перцептрона, либо при обработке БТС - всё равно выход. Если же при такой реализации установить pass=4 или более - то будет работать ТОЛЬКО перцептрон 1 + БТС, всё по тем же вышеописанным причинам.

Если же реализовать также и if (pass >= 3) { , то по тем же вышеописаным причинам при pass=4 или более  - будет работать ТОЛЬКО перцептрон 2 + БТС. До первого просто доходить не будет, потому что return(  первой проверки обязательно сработает. Такая запись будет просто некорректной.

02.04.2008 20:46 Kadet
В том-то и дело, что может. Уровни НС для разнонаправленых сигналов в данной логике реализованы через разные, совершенно не связанные друг с другом перцептроны. Они совершенно неодинаковые, у коротких позиций свой уровень, а у длинных - свой. Попробую изобразить в виде катринки на примере простейших линий:

 

______________________________________________________________ (уровень Sell) (сигнал вниз)

З О Н А   П Е Р Е Х Л Ё С Т А (уровень Sell показывает сигнал вниз (-1), а уровень Buy - сигнал вверх (+1))

______________________________________________________________(уровень Buy) (сигнал вверх)

На этом простом примере я попытался показать, что уровень Sell, который будет показывать сигнал на продажу если проверочное значение будет ниже уровня, а уровень Buy - наоборот. Но на схеме видно, что может существовать зона, при которой могут дать сигналы оба уровня.

Вы, TheXpert, предлагаете совершенно разделить проверку 1-го перцептрона и 2-го внутри процедуры  Supervisor(), что повлечёт одновременную проверку и одного и другого, а как следствие при проверке 1-го перцептрона (уровня Sell) он может дать (-1) - сигнал к продаже, а при проверке 2-го перцептрона - (+1) - сигнал к покупке. А предлагаемая Вами модернизация основной процедуры (start) будет сначали проверять на (+1) а затем последовательно - на (-1).

Причём... Внимательней проанализировав Вашу модернизацию пришёл к выводу, что она совершенно исключает работу по схеме Юрия. Т.е. Ваша модернизация привела к тому, что работа советника будет осуществляться только на БТС, либо только НС-короткие + БТС, либо только НС-длинны + БТС, полностью исключая использование совокупной (полноуровневой) работы. Дело в том, что переменную pass автор ввёл, на сколько я понял, сугубо для обучения советника. Только при установке pass = 4  советник начинает работать полностью, начинают работать и БТС и НС-короткие и НС-длинные. При установке параметров pass 1 работает только БТС, при установке pass 2  работают НС-короткие + БТС, при установке pass 3  работают НС-длинные+ БТС. Вы исключили pass = 4, но при этом в процедуре Supervisor()  оставили проверку на pass 2  и pass 3. На каком pass  Вы собираетесь запускать общую схему работы советника?


Вся логика находится внутри супервизора, он физически не может отдать сразу два противоположных сигнала. Впрочем, не суть.

Насчет pass -- верно подмечено, я хотел исправить но не было времени, а потом забыл...

Надо вместо

if (pass == 2) {
 
написать
 
if (pass >= 2) {

Понадеялся, так сказать на внимательность читающих, и не прогадал :).

На следующей неделе выложу свой вариант. Тогда и поговорим.

02.04.2008 20:11 TheXpert

На счёт уровней, TheXpert, думаю не стоит спорить. В принципе те же я... только вид сбоку. Просто я 1-й и 2-й уровни считаю как подуровни первого уровня, т.к. они реализуют одну и туже первую ступень задачи, только для разных направлений. Да и Бог с ними.

 


TheXpert писал(а):

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

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

 

______________________________________________________________ (уровень Sell) (сигнал вниз)

З О Н А   П Е Р Е Х Л Ё С Т А (уровень Sell показывает сигнал вниз (-1), а уровень Buy - сигнал вверх (+1))

______________________________________________________________(уровень Buy) (сигнал вверх)

На этом простом примере я попытался показать, что уровень Sell, который будет показывать сигнал на продажу если проверочное значение будет ниже уровня, а уровень Buy - наоборот. Но на схеме видно, что может существовать зона, при которой могут дать сигналы оба уровня.

Вы, TheXpert, предлагаете совершенно разделить проверку 1-го перцептрона и 2-го внутри процедуры  Supervisor(), что повлечёт одновременную проверку и одного и другого, а как следствие при проверке 1-го перцептрона (уровня Sell) он может дать (-1) - сигнал к продаже, а при проверке 2-го перцептрона - (+1) - сигнал к покупке. А предлагаемая Вами модернизация основной процедуры (start) будет сначали проверять на (+1) а затем последовательно - на (-1).

Причём... Внимательней проанализировав Вашу модернизацию пришёл к выводу, что она совершенно исключает работу по схеме Юрия. Т.е. Ваша модернизация привела к тому, что работа советника будет осуществляться только на БТС, либо только НС-короткие + БТС, либо только НС-длинны + БТС, полностью исключая использование совокупной (полноуровневой) работы. Дело в том, что переменную pass автор ввёл, на сколько я понял, сугубо для обучения советника. Только при установке pass = 4  советник начинает работать полностью, начинают работать и БТС и НС-короткие и НС-длинные. При установке параметров pass 1 работает только БТС, при установке pass 2  работают НС-короткие + БТС, при установке pass 3  работают НС-длинные+ БТС. Вы исключили pass = 4, но при этом в процедуре Supervisor()  оставили проверку на pass 2  и pass 3. На каком pass  Вы собираетесь запускать общую схему работы советника?

02.04.2008 19:18 Kadet
Kadet писал(а):

Вот не могу понять TheXpert, Вы гопорите про "порог активации" и отрицаете необходимость 2-го (по Вашим словам 3-го) уровня НС, но мне кажется именно этот порог и реализован через этот 2-й уровень НС, только в вашем примере это реализовано через простое число, а Юрий этоже реализовал через уровень НС.

1 Уровень -- покупка

2 уровень -- продажа

3 уровень -- контроль за 1 и 2 уровнями. Это не порог активации, это контроль. Суть порога активации в том, что мы отбрасываем слабые сигналы.

Суть контроля в том, что мы не торгуем при конфликтах между выходами контрольного и подконтрольного уровней.

Если я неправ, пусть автор меня поправит.


Вот не могу понять TheXpert, Вы гопорите про "порог активации" и отрицаете необходимость 2-го (по Вашим словам 3-го) уровня НС, но мне кажется именно этот порог и реализован через этот 2-й уровень НС, только в вашем примере это реализовано через простое число, а Юрий этоже реализовал через уровень НС.

 

TheXpert писал(а):
Ну и естественно  заменить условия на более строгие 

 

//else -- для оптимизаторов раскомментировать :)

Из логики, предложенной автором - нельзя убирать else иначе будут логические ошибки. Дело в том, что в советнике разделены короткие и длинные позиции, т.е. для каждого из них свои уровни НС. При такой схеме образуются так называемые "зоны перехлёста", т.е. могут появляться значения НС, которые будут удовлетворять и условиям на покупку (+1) и условиям на продажу (-1), т.е. одновременно из Supervisor() одновременно может прийти и команда на продажу и команда на покупку. Хотя если взять чистый Юрин советник - его, else, действительно здесь можно исключить, т.к. он уже реализован в процедуре Supervisor() . Если же брать в расчёт Ваши, TheXpert, предложения то услове else просто необходимо.


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


Насчет RefreshRates() . Полезная функция в нетривиальном советнике. Она обновляет текущую информацию. Т.е. обновятся цены.

В данном советнике нужды в ней нет. ИМХО, это жалкие остатки от чего-то много более навороченного.

02.04.2008 14:16 TheXpert
Интересная идея!

Спасибо Юрий!

Ну, конечно же, БТС - просто лажовая. Грубо говоря - так, для примера взятая.

Взял вашу логику. Натянул на свою механику - заработало. Далее - моя механика показаласть медленной. Рализовал её по примеру Вашей логики, т.е. создал БТС в виде НС. Поработал с величиной лота. Пошла гораздо быстрее и лучше.

Т.е. получилось уже не 2-х уровневая, а скажем - 2-х с половиной уровневая НС, т.е. БТС работает отдельно от основной НС.

Тестирую. Пока устойчивый плюс. Посмотрим что будет далее.

В общем спасибо за идею.

Но есть ряд вопросов.

1. В частности немного не пойму зачем в идёт постоянное обновление данных советника:    RefreshRates();?
Не совсем понимаю смысла этой функции. Из описания не очень-то врубился.

2. Что означает фраза: "Дообучение советника в процессе работы"? Может её я увидел не в этой статье, но всё же связанной с нейросетями. Т.е. я её понимаю как - сам советник автоматически, самостоятельно подстраивает свои же параметры в процессе работы. Не совсем понимаю как это можно реализовать без ручной оптимизации советника.

3. Вы, Юрий, очень хорошо описали процесс оптимизации советника, причём нужно отдать Вам должное - очень логично и просто индексы параметров - очень хорошая идея. Спасибо и за неё. Но в процессе оптимизации постоянно сталкиваюсь с такой проблемой. Делю период оптимизации на две части исторических данных - ну скажем беру 4 месяца и делю их на основной период оптимизации (3 мес. - 1-3 мес.) и проверочный - (1 мес. - 4-й). Оптимизирую по основному (3-х месяцному) периоду. Получаю "море" данных. Теперь найденые оптимизатором параметры устанавливаю в параметры советника. Проверяю их на 4-м месяце. Очень часто приходится лопатить долго и рутинно, чтобы найти достойные параметры, т.е. нормально работавшие и на основном периоде и на проверочном. Ни как не могу найти технологию, которая бы могла помочь в решении этой проблемы.

4. Не совсем ясно зачем произведено разделение длинных и коротких позиций. Я поэкспериментировал на эту тему. Релизовал логику коротких и длинные позиции через одну НС, т.е. если выше "плоскости" НС (+1) - длинная позиция, если ниже (-1) -  короткая. Оптимизировал. Затем отключал поочерёдно то короткие, то длинные позиции. Получилась интересная картина. Объединённый советник даёт положительные результаты. При выделении позиций - отрицательные. Причём схема выделения для разнонаправленных позиций своих собственных параметров зачастую даёт худшие результаты, чем объединённая. Интересная ситуация. Пока в ней до конца не разобрался.

TheXpert писал(а):

Я довольно долго занимался нейронками и в принципе представляю все их достоинства и недостатки.

...

3. Если говорить честно, это не нейросеть в чистом виде. Во первых, не хватает порогового значения без него разделяющая способность НС намного меньше. Во вторых ИМХО, стОит добавить порог активизации выхода. Что это значит? Возвращать сигнал на торговлю, только если превышен порог активизации.

Вот не могу понять TheXpert, Вы гопорите про "порог активации" и отрицаете необходимость 2-го (по Вашим словам 3-го) уровня НС, но мне кажется именно этот порог и реализован через этот 2-й уровень НС, только в вашем примере это реализовано через простое число, а Юрий этоже реализовал через уровень НС.

 

TheXpert писал(а):
Ну и естественно  заменить условия на более строгие 

 

//else -- для оптимизаторов раскомментировать :)

Из логики, предложенной автором - нельзя убирать else иначе будут логические ошибки. Дело в том, что в советнике разделены короткие и длинные позиции, т.е. для каждого из них свои уровни НС. При такой схеме образуются так называемые "зоны перехлёста", т.е. могут появляться значения НС, которые будут удовлетворять и условиям на покупку (+1) и условиям на продажу (-1), т.е. одновременно из Supervisor() одновременно может прийти и команда на продажу и команда на покупку. Хотя если взять чистый Юрин советник - его, else, действительно здесь можно исключить, т.к. он уже реализован в процедуре Supervisor() . Если же брать в расчёт Ваши, TheXpert, предложения то услове else просто необходимо.

02.04.2008 12:16 Kadet

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


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

Позволю себе сделать несколько замечаний:


1. Третья сеть не нужна, ИМХО, одна отвечает за покупку, вторая за продажу, все, этого достаточно.

Система перерождается в такую:

double Supervisor() {
 
   if (pass == 3) {
      if (perceptron2() > 0 /* && basicTradingSystem() > 0 */) {
//если раскомментировать получаем систему, которая просто следит и отбрасывает некорректные сигналы БТС
         sl = sl3;
         tp = tp3;
         return(1);
       } else {
         return(basicTradingSystem());
       }
   }
 
   if (pass == 2) {
      if (perceptron1() < 0 /* && basicTradingSystem() < 0 */) {
//если раскомментировать получаем систему, которая просто следит и отбрасывает некорректные сигналы БТС
         sl = sl2;
         tp = tp2;
         return(-1);
       } else {
         return(basicTradingSystem());
       }
 
   }
   return(basicTradingSystem());
}

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


2. Сигналы на торговлю, когда БТС молчит -- странновато как-то -- мы же оптимизируем систему. Решить проблему просто --

   double Supervisor() {
      if (basicTradingSystem() == 0) return(0);
      ...
   }


3. Если говорить честно, это не нейросеть в чистом виде. Во первых, не хватает порогового значения без него разделяющая способность НС намного меньше. Во вторых ИМХО, стОит добавить порог активизации выхода. Что это значит? Возвращать сигнал на торговлю, только если превышен порог активизации. Например:

double perceptron1()   {
   double       w1 = x12 - 100;
   double       w2 = x22 - 100;
   double       w3 = x32 - 100;
   double       w4 = x42 - 100;
   // double T = t4 - 100;
   double a1 = Close[0] - Open[p2];
   double a2 = Open[p2] - Open[p2 * 2];
   double a3 = Open[p2 * 2] - Open[p2 * 3];
   double a4 = Open[p2 * 3] - Open[p2 * 4];
   double res = (w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4 // )/Close[0] - T); // Делим на Close[0] для унификации
   if (MathAbs(res) > ActivityThreshold) return(res); // ActivityThreshold -- порог активизации
   else return(0);
}
Ну и естественно  заменить условия на более строгие
   if (Supervisor() > 0) {
      ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, 1, Bid - sl * Point, Bid + tp * Point, WindowExpertName(), mn, 0, Blue); 
      if (ticket < 0) {
         again();      
      }
   //else -- для оптимизаторов раскомментировать :)
   if (Supervisor() < 0) {
      ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, 1, Ask + sl * Point, Ask - tp * Point, WindowExpertName(), mn, 0, Red); 
      if (ticket < 0) {
         again();
      }
   }

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


31.03.2008 19:09 TheXpert
jerrimix писал(а):
Господа не тратьте время зря, то что выложил господин Решетов впринципе не может работать это всего лишь попытка сделать базовую модель Нейронной сети, поэтому советник на основе НС размером в 4,6 кбайта впринципе не может работать :-) Его надо обвешивать и доделывать. А для тех скептиков кто обсирает НС скажу, Вы не разбирались с ними так не говорите, у НС и трейдинга вместе большое будущее. Попробуйте хотябы для начала разобраться с пакетом NeuroShell DayTrader, а потом уж говорите.


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

Но счтиаю все что продают сигналы, советники,  тс и тп. ЭТО только для очень и очень недалеких людей. Надо быть полностью наверное в ЖО если соглашаться на такую ерунду ). Я совсем не хочу сказать что БЕСПЛАТНО которые советники вот это тема )) НЕТ просто на основе тех же элемнтарных нейросетей можно привязывать свои тс которой пользуешься вот и все

27.03.2008 00:41 Shel

Скажите поалуйста если вам не сложно ответить на мои глупые вопросы ;)

Я хотел бы узнать а где в коде combo_right находится привязка к CCI так как хотелось бы попробовать и другие индикаторы на основе этой сети и возможно ли это сделать?

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

Спасибо. 

27.03.2008 00:33 Shel

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

23.03.2008 23:29 Garfish
Господа не тратьте время зря, то что выложил господин Решетов впринципе не может работать это всего лишь попытка сделать базовую модель Нейронной сети, поэтому советник на основе НС размером в 4,6 кбайта впринципе не может работать :-) Его надо обвешивать и доделывать. А для тех скептиков кто обсирает НС скажу, Вы не разбирались с ними так не говорите, у НС и трейдинга вместе большое будущее. Попробуйте хотябы для начала разобраться с пакетом NeuroShell DayTrader, а потом уж говорите.
21.03.2008 21:14 jerrimix