Здравствуйте, гость ( Вход | Регистрация )

26 страниц V < 1 2 3 4 > »   
Ответить в эту темуОткрыть новую тему
> Perceptron, Нейронная сеть
leonid553
сообщение 25.3.2007, 14:04
Сообщение #11





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



Понятно теперь стало - почему в реале советник с индикатором WPR постоянно сливает!
Я там не предусмотрел, что его шкала находится только в +зоне.
И оптимизация , конечно, получилась случайной!
Особенно это заметно при оптимизации параметра SL.
Сейчас вот исправил в коде условие на вход - и результаты меняются на глазах!
Прибыль увеличивается не быстро, зато становится гораздо надежней!
Графики идут плавно, без провалов.
Кроме того, вспомнилась твоя идея - задавать "запрещенный" диапазоп выходного значения перцептрона. Чтобы советник - в этом диапазоне отдохнул, подумал немного "как дальше с этим жить...". smile.gif
Вот график оптимизации , GBPUSD, стохастик, M30, с янв. 2007г.


Эскизы прикрепленных изображений
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 25.3.2007, 14:52
Сообщение #12





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



А вот результат оптимизации от пред. поста
Качество моделирования 89.96%
Начальный депозит 1000.00
Чистая прибыль 1736.52
Общая прибыль 2315.04
Общий убыток -578.52
Относительная просадка 15.19% (203.20)
Всего сделок 50
Короткие позиции (% выигравших) 28 (82.14%)
Длинные позиции (% выигравших) 22 (86.36%)
Прибыльные сделки (% от всех) 42 (84.00%)
Убыточные сделки (% от всех) 8 (16.00%)
Самая большая
прибыльная сделка 325.52
убыточная сделка -72.96
Средняя
прибыльная сделка 55.12
убыточная сделка -72.31
Максимальное количество
непрерывных выигрышей (прибыль) 11 (675.08)
непрерывных проигрышей (убыток) 2 (-144.36)
Максимальная
непрерывная прибыль (число выигрышей) 675.08 (11)
непрерывный убыток (число проигрышей) -144.36 (2)


Эскизы прикрепленных изображений
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 26.3.2007, 15:40
Сообщение #13





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



Не всё, однако, так хорошо!
Результат был получен при оптимизации от 1 янв. до 16 марта. При прогоне до сег. дня - 26 марта - обнаружилось подряд 5 лосей!
Стал разбираться - прогнал с 2004 года, результат(фунт, м30):
668 сделок =+375-313, общий профит=+45 пипсов !
Причем короткие 412 сделок, длинные - 276.
Обнаружилось вот что:
Поскольку в советнике использован вызов стохастика, я взял точку отсчета - среднюю линию стохастика = 50.
Но - вот тут и присутствует ошибка!
Значения перцептрона у нас в коде заданы либо <50, либо >50, - но при положительной, однополярной шкале стохастика на выходе перцептрона почти всё время будут получаться значения - больше 50-ти (независимо от положения) - это очевидно! И в результате невпопад открываются короткие сделки! Да и значения перцептрона при этом надо задавать либр выше, либо ниже уровней перепроданности/перекупл-ти.
Выход - изменить шкалу стохастика на двухполярную. Или брать другой индикатор!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
NoName
сообщение 26.3.2007, 16:55
Сообщение #14





Группа: Активный участник
Сообщений: 514
Регистрация: 1.5.2006
Из: Украина, Кременчуг
Пользователь №: 146
Спасибо сказали: 0 раз(а)



Цитата
Поскольку в советнике использован вызов стохастика, я взял точку отсчета - среднюю линию стохастика = 50.
Но - вот тут и присутствует ошибка!


А нельзя ли сдесь привести код функции Perceptron () ?
Не совсем представляю как ты взял эту точку отсчёта от уровня 50.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 26.3.2007, 18:18
Сообщение #15





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



вот так сделал для текущей buy-позиции:
int ticket = -1;
// check for opened position - контроль откытых позиций
int total = OrdersTotal();
for(int i = 0; i < total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
// check for symbol & magic number
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
int prevticket = OrderTicket();
// long position is opened - длинная позиция открылась
//далее проверяется условие - ЕСЛИ НА МОМЕНТ ОТКРЫТИЯ НОВОГО БАРА ПОЛУЧЕННЫЙ ПРОФИТ
//БОЛЬШЕ РАЗМЕРА СТОПЛОССА И ЗНАЧЕНИЕ ПЕРЦЕПТРОНА <50 - ПЕРЕВОРАЧИВАЕМСЯ
if(OrderType() == OP_BUY)
{
// check profit
if(Bid > (OrderStopLoss() + (sl * 2 + spread) * Point))
{
if(perceptron() < 50)
{
// reverse
ticket = OrderSend(Symbol(), OP_SELL, lots * 2, Bid, 3,
Ask + sl * Point, 0, "AI", MagicNumber,
0, Red);
Sleep(30000);
if(ticket < 0)
{
prevtime = Time[1];
}
else
{
OrderCloseBy(ticket, prevticket, Blue);
}
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 26.3.2007, 18:35
Сообщение #16





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



Похоже, я тут вообще не в кон задал
if(perceptron() < 50)
- надо подумать здесь!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
NoName
сообщение 26.3.2007, 19:35
Сообщение #17





Группа: Активный участник
Сообщений: 514
Регистрация: 1.5.2006
Из: Украина, Кременчуг
Пользователь №: 146
Спасибо сказали: 0 раз(а)



Цитата
Похоже, я тут вообще не в кон задал
if(perceptron() < 50)
- надо подумать здесь!


Конечно не в кон smile.gif Я почему и попросил функцию Perceptron().
Ну вобщем не важно уже, ты понял сам в чём дело.

Предлагаю проблему решить таким путём:

Код

double perceptron()
  {
   double w1 = x1 - 100;
   double w2 = x2 - 100;
   double w3 = x3 - 100;
   double w4 = x4 - 100;
   double a1 =  iStochastic(NULL,0, Kperiod, Dperiod, slowing, MODE_SMA, 0, MODE_MAIN, 0)   - 50;
   double a2 =  iStochastic(NULL,0, Kperiod, Dperiod, slowing, MODE_SMA, 0, MODE_MAIN, 7)   - 50;
   double a3 =  iStochastic(NULL,0, Kperiod, Dperiod, slowing, MODE_SMA, 0, MODE_MAIN, 14) - 50;
   double a4 =  iStochastic(NULL,0, Kperiod, Dperiod, slowing, MODE_SMA, 0, MODE_MAIN, 21) - 50;
   return(w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4);
  }


От значения стохастика отнимаем наш уровень 50 и получаем двухполярный стохастик с областью определения от -50 до +50.
Среднюю линию, в таком случае, можно считать равной нулю.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
NoName
сообщение 26.3.2007, 20:05
Сообщение #18





Группа: Активный участник
Сообщений: 514
Регистрация: 1.5.2006
Из: Украина, Кременчуг
Пользователь №: 146
Спасибо сказали: 0 раз(а)



Вот, модернизировал для наглядности wink.gif



Вверху стандартный, внизу полярный.

Индикатор прилагаю:
Прикрепленный файл  StochasticPolar.rar ( 1.04 килобайт ) Кол-во скачиваний: 671

Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 27.3.2007, 9:49
Сообщение #19





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



Благодарю, Андрей.
Вставил этот кусочек кода.
чтобы избежать подгонки при оптимизации решил оптимизировать по всей доступной истории.
С мая 2004г. закачаны минутки с Альпари по всем тф. А с янв. 2007г - текущие котировки Лайта.
Результат получился - от +6000 до +8500 (м30 и н1)
Даже "побаловался" с контрольными точками.
Не думаю, что на этот раз имеет место подгонка! Три года - это не месяц-два, и подгонка здесь мало вероятна!
Причем прибыль идет оч. последовательно вверх, но в неком диапазоне - почти идеальном канале - обозначил на графике баланса зел. линиями. (без ММ)
Оч . жаль, однако, что пока внутри этого канала ситуация ещё не определена.
Это напоминает мне муравьев - которые тащат соломинку в муравейник. Всякий из нас часто такое наблюдал в детстве. Каждый муравей тянет соломинку в с свою сторону , но в сумме соломинка непостижимом образом всё-таки движется в сторону муравейника!
Если взять и разбить этот общий полученный профитный результат по месяцам - то картина не очень впечатляет.
Однако в сумме мы имеем достаточно надежный общий профит!
Осталось теперь перейти к деталям. И внутри нашего канала свести к минимуму просадку, либо (менее желательно) увеличивать профит.
Вот еще проблема, впрочем, небольшая осталась.


Эскизы прикрепленных изображений
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 27.3.2007, 10:08
Сообщение #20





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



А Проблема вот в чем:
---------------------------------------------------------------------------------
// long position is opened -длинная позиция открылась
//далее проверяется условие - ЕСЛИ НА МОМЕНТ ОТКРЫТИЯ НОВОГО БАРА ПОЛУЧЕННЫЙ ПРОФИТ
//БОЛЬШЕ РАЗМЕРА СТОПЛОССА И ЗНАЧЕНИЕ ПЕРЦЕПТРОНА <25 - ПЕРЕВОРАЧИВАЕМСЯ
if(OrderType() == OP_BUY)
{
// check profit
if(Bid > (OrderStopLoss() + (sl * 2 + spread) * Point))
{
if(perceptron() < 25)
{
// reverse
-----------------------------------------------------------------------------------
для короткой позиции , соответственно, наоборот:
if(perceptron() > -25)
{
// reverse
Изначально это значение перцептрона было=0, но я для стохастика таким образам обозначил переворот позиции на условных границах зон перекупл/перепрод.
И оказалоссь, что на конечном результате эти мои изменения вообще не сказываются!
Но ведь должны!
Вот только сейчас в коде - в самом конце обнаружилось ещё:
}
// check for long or short position possibility - возможность контроля длинной/короткой позиции
if(perceptron() > 50)
{
//long
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Bid - sl * Point, 0,
"ST", MagicNumber, 0, Blue);
if(ticket < 0)
{
Sleep(30000);
prevtime = Time[1];
}
}
else
{
// short
ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, 3, Ask + sl * Point, 0,
"ST", MagicNumber, 0, Red);
if(ticket < 0)
{
Sleep(30000);
prevtime = Time[1];
}
}
//--- exit
return(0);
--------------------------------------------------------------------------------
Здесь я забыл поменять.
И ещё - мне непонятен механизм входа при самой первой сделке, т.е. при включении советника. А это, между тем, тоже существенно!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

26 страниц V < 1 2 3 4 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 28.3.2024, 20:54