![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Пробовал трейлинг прикручивать результат ухудшался по этому решил "нафига козе баян". С такими небольшими тейками нет смысла трейлинговать.
оптимизировал, провел форвард-тесты, поставил на демку, пока очень даже не плохо. буду разбираться, через неделю выложу график баланса.
кто нибудь представляет процесс лечения зубов через жопу, этот подход к организации системы аналогичен
Скажите поалуйста если вам не сложно ответить на мои глупые вопросы ;)
Я хотел бы узнать а где в коде combo_right находится привязка к CCI так как хотелось бы попробовать и другие индикаторы на основе этой сети и возможно ли это сделать?
И еще хотелось бы узнать по поводу обучения нейросети... Оптимизация это понятно, а вот куда данные обучения сохроняются и сохронятся ли они вообще?
Спасибо.
Господа не тратьте время зря, то что выложил господин Решетов впринципе не может работать это всего лишь попытка сделать базовую модель Нейронной сети, поэтому советник на основе НС размером в 4,6 кбайта впринципе не может работать :-) Его надо обвешивать и доделывать. А для тех скептиков кто обсирает НС скажу, Вы не разбирались с ними так не говорите, у НС и трейдинга вместе большое будущее. Попробуйте хотябы для начала разобраться с пакетом NeuroShell DayTrader, а потом уж говорите.
кстати на счет этого пакета насколько я понимаю он платный и сигналы там идут платные.. если я не прав то поправьте
Но счтиаю все что продают сигналы, советники, тс и тп. ЭТО только для очень и очень недалеких людей. Надо быть полностью наверное в ЖО если соглашаться на такую ерунду ). Я совсем не хочу сказать что БЕСПЛАТНО которые советники вот это тема )) НЕТ просто на основе тех же элемнтарных нейросетей можно привязывать свои тс которой пользуешься вот и все
Я довольно долго занимался нейронками и в принципе представляю все их достоинства и недостатки. Между прочим, первым, что я пытался сделать узнав про Forex, это было написание собственной прогнозирующей нейросистемы :) , впрочем, попытка закончилась неудачно.
Для начала -- система имеет право на жизнь, хотя требует периодической перенастройки.
Позволю себе сделать несколько замечаний:
1. Третья сеть не нужна, ИМХО, одна отвечает за покупку, вторая за продажу, все, этого достаточно.
Система перерождается в такую:
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. Сигналы на торговлю, когда БТС молчит -- странновато как-то -- мы же оптимизируем систему. Решить проблему просто --
if (basicTradingSystem() == 0) return(0);
...
}
3. Если говорить честно, это не нейросеть в чистом виде. Во первых, не хватает порогового значения без него разделяющая способность НС намного меньше. Во вторых ИМХО, стОит добавить порог активизации выхода. Что это значит? Возвращать сигнал на торговлю, только если превышен порог активизации. Например:
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);
}
Ну и естественно заменить условия на более строгие
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();
}
}
Если позволит автор, могу переписать и выложить советника в своем варианте -- если будет время, то со сравнительной характеристикой обоих вариантов.
Спасибо Юрий!
Ну, конечно же, БТС - просто лажовая. Грубо говоря - так, для примера взятая.
Взял вашу логику. Натянул на свою механику - заработало. Далее - моя механика показаласть медленной. Рализовал её по примеру Вашей логики, т.е. создал БТС в виде НС. Поработал с величиной лота. Пошла гораздо быстрее и лучше.
Т.е. получилось уже не 2-х уровневая, а скажем - 2-х с половиной уровневая НС, т.е. БТС работает отдельно от основной НС.
Тестирую. Пока устойчивый плюс. Посмотрим что будет далее.
В общем спасибо за идею.
Но есть ряд вопросов.
1. В частности немного не пойму зачем в идёт постоянное обновление данных советника: RefreshRates();?
Не совсем понимаю смысла этой функции. Из описания не очень-то врубился.
2. Что означает фраза: "Дообучение советника в процессе работы"? Может её я увидел не в этой статье, но всё же связанной с нейросетями. Т.е. я её понимаю как - сам советник автоматически, самостоятельно подстраивает свои же параметры в процессе работы. Не совсем понимаю как это можно реализовать без ручной оптимизации советника.
3. Вы, Юрий, очень хорошо описали процесс оптимизации советника, причём нужно отдать Вам должное - очень логично и просто индексы параметров - очень хорошая идея. Спасибо и за неё. Но в процессе оптимизации постоянно сталкиваюсь с такой проблемой. Делю период оптимизации на две части исторических данных - ну скажем беру 4 месяца и делю их на основной период оптимизации (3 мес. - 1-3 мес.) и проверочный - (1 мес. - 4-й). Оптимизирую по основному (3-х месяцному) периоду. Получаю "море" данных. Теперь найденые оптимизатором параметры устанавливаю в параметры советника. Проверяю их на 4-м месяце. Очень часто приходится лопатить долго и рутинно, чтобы найти достойные параметры, т.е. нормально работавшие и на основном периоде и на проверочном. Ни как не могу найти технологию, которая бы могла помочь в решении этой проблемы.
4. Не совсем ясно зачем произведено разделение длинных и коротких позиций. Я поэкспериментировал на эту тему. Релизовал логику коротких и длинные позиции через одну НС, т.е. если выше "плоскости" НС (+1) - длинная позиция, если ниже (-1) - короткая. Оптимизировал. Затем отключал поочерёдно то короткие, то длинные позиции. Получилась интересная картина. Объединённый советник даёт положительные результаты. При выделении позиций - отрицательные. Причём схема выделения для разнонаправленных позиций своих собственных параметров зачастую даёт худшие результаты, чем объединённая. Интересная ситуация. Пока в ней до конца не разобрался.
Я довольно долго занимался нейронками и в принципе представляю все их достоинства и недостатки.
...
3. Если говорить честно, это не нейросеть в чистом виде. Во первых, не хватает порогового значения без него разделяющая способность НС намного меньше. Во вторых ИМХО, стОит добавить порог активизации выхода. Что это значит? Возвращать сигнал на торговлю, только если превышен порог активизации.
Вот не могу понять TheXpert, Вы гопорите про "порог активации" и отрицаете необходимость 2-го (по Вашим словам 3-го) уровня НС, но мне кажется именно этот порог и реализован через этот 2-й уровень НС, только в вашем примере это реализовано через простое число, а Юрий этоже реализовал через уровень НС.
Ну и естественно заменить условия на более строгие
Из логики, предложенной автором - нельзя убирать else иначе будут логические ошибки. Дело в том, что в советнике разделены короткие и длинные позиции, т.е. для каждого из них свои уровни НС. При такой схеме образуются так называемые "зоны перехлёста", т.е. могут появляться значения НС, которые будут удовлетворять и условиям на покупку (+1) и условиям на продажу (-1), т.е. одновременно из Supervisor() одновременно может прийти и команда на продажу и команда на покупку. Хотя если взять чистый Юрин советник - его, else, действительно здесь можно исключить, т.к. он уже реализован в процедуре Supervisor() . Если же брать в расчёт Ваши, TheXpert, предложения то услове else просто необходимо.
Вот не могу понять TheXpert, Вы гопорите про "порог активации" и отрицаете необходимость 2-го (по Вашим словам 3-го) уровня НС, но мне кажется именно этот порог и реализован через этот 2-й уровень НС, только в вашем примере это реализовано через простое число, а Юрий этоже реализовал через уровень НС.
1 Уровень -- покупка
2 уровень -- продажа
3 уровень -- контроль за 1 и 2 уровнями. Это не порог активации, это контроль. Суть порога активации в том, что мы отбрасываем слабые сигналы.
Суть контроля в том, что мы не торгуем при конфликтах между выходами контрольного и подконтрольного уровней.
Если я неправ, пусть автор меня поправит.
Вот не могу понять TheXpert, Вы гопорите про "порог активации" и отрицаете необходимость 2-го (по Вашим словам 3-го) уровня НС, но мне кажется именно этот порог и реализован через этот 2-й уровень НС, только в вашем примере это реализовано через простое число, а Юрий этоже реализовал через уровень НС.
Ну и естественно заменить условия на более строгие
Из логики, предложенной автором - нельзя убирать else иначе будут логические ошибки. Дело в том, что в советнике разделены короткие и длинные позиции, т.е. для каждого из них свои уровни НС. При такой схеме образуются так называемые "зоны перехлёста", т.е. могут появляться значения НС, которые будут удовлетворять и условиям на покупку (+1) и условиям на продажу (-1), т.е. одновременно из Supervisor() одновременно может прийти и команда на продажу и команда на покупку. Хотя если взять чистый Юрин советник - его, else, действительно здесь можно исключить, т.к. он уже реализован в процедуре Supervisor() . Если же брать в расчёт Ваши, TheXpert, предложения то услове else просто необходимо.
Не могу согласиться. В один момент времени функция не может возвращать два разных значения, так что else при раскомментировании не меняет логики, а всего лишь экономит один вызов функции при срабатывании первого условия.
Насчет RefreshRates() . Полезная функция в нетривиальном советнике. Она обновляет текущую информацию. Т.е. обновятся цены.
В данном советнике нужды в ней нет. ИМХО, это жалкие остатки от чего-то много более навороченного.