Первая часть. Лирика (можно не читать)C# я начал изучать год назад, просмотрев курсы S#. До этого программированием не занимался вовсе. Поэтому за код прошу не пинать, лучше подскажите как правильно делать. С удовольствием выслушаю все вопросы, предложения и пожелания! А также выражаю искреннюю благодарность команде S# за их проект!
Вторая часть (Для тех, кто в теме). Многослойный персептрон (как я его реализовал) Моя нейросеть состоит из 1) Первый слой (или входной слой) — это набор признаков(входной вектор) которых мы подаем на вход нейросети. 2) Второй слой нейронов. Каждый нейрон второго слоя связан со всеми нейронами первого(входного) слоя и всеми нейронами третьего слоя нейронов связями(синапсами). 3) Третий слой тоже само что и второй, только связан со вторым слоем и четвертым. 4) Четвертый слой состоит из одного нейрона, выход которого и будет нам нужен. Рис.1.
Особенности нейросети которые стоит упомянуть.
Функция активации гиперболический тангенс
Код
private const double AlfaSigmoid = 0.66666d;
public static double ThFunc(double y)
{
return (1.7159 * Math.Tanh(AlfaSigmoid * y));
}
Производная активационной функции, для обратного распространения ошибки
Код
public static double ThDerivative(double _out)
{
return (AlfaSigmoid * (1.7159d * 1.7159d - _out * _out) / 1.7159d);
}
На каждый нейрон подан дополнительный синапс с постоянным входным значением (-1).
При обучении нейросети в качестве обучающего значения используется значения double (но как правило -1, 0 и 1), в качестве входного набора признаков использую List<double> inputSignals (хоть и double, но как правило (-1, 0 и 1).
Все остальное можно найти в интернете, вот сайт, с которого я взял рисунок
http://www.aiportal.ru/a...s/multi-perceptron.html там же можно найти информацию про персептрон и обратное распространение ошибки.
Третья часть. Сама программаЧтобы обучить нейросеть, нужно создать обучающую последовательность. Из всех разных способов который пробовал, при том что обучающую последовательность постоянно меняю. Я остановился на следующем. В гидре создаю свечи, в примере это пятиминутки. Сохраняю их в Excel, открываю сохраненный файл. В столбике H создаю необходимую логику, в примере это бычья или медвежья свеча. Сохраняем файл в формате CSV. Рис 2
Теперь необходимо прописать путь до папки со свечами, и пут к файлу обучающей последовательности.
Код
private const string PathStorage = @"C:\History";
private const string PathLessons = @"..\\..\\..\\candles_SPFB.RTS@FORTS_TimeFrameCandle_00_05_00.csv";
private const string PathNeuroNet = @"..\\..\\..\\NeuroNet.dat";
private const string PathLog = @"..\\..\\..\\log.txt";
Я как правило сохраняю в файл в ту же папку где лежит NeuroRobot.sln. Туда же сохраняется нейросеть, и лог. В таком случае нужно только папку со свечами прописать.
Файл обучающей последовательности(candles_SPFB.RTS@FORTS_TimeFrameCandle_00_05_00.csv) содержит знания с 1.1.2013 по 1.10.2013. Файл нейросети (NeuroNet.dat) обучен на данных с 1 по 15 января 2013г.
Запускаем программу, переходим на вкладку Lesson. Если активна кнопка «Удалить файл знаний» значить существует обученная сеть, ее можно удалить или доучить.
Если кнопка неактивна и на ней написано файл знаний отсутствует, то можно задать период обучения, я задал первые 15 дней года, всего 809 образов получилось. Также задается таймфрайм, количество нейронов на втором и третьем слое. При этом если в третьем слое поставить 0, то сеть будет двухслойная. В ходе обучения, можно изменять, шаг обучения, момент, порядок предоставления образов. На графике видна среднеквадратичная ошибка сети. Также видна статистика обучения сети. При обновлении минимума ошибки, класс сети сохраняется. Рис 3.Когда дальнейшее обучение сети бесполезно, останавливаем обучение. Переходим на вкладку Stratagy testing.Рис 4.
Задаем период тестирования, я поставил весь январь, жмем StratagyHistoryTesting. Рис 5.
На рисунке видно, что сеть запомнила первые 15 дней года, но уже с 16-го января начала сливать.
С нажатием StratagyHistoryTesting, становится активной вкладка График. В этой вкладке можно смотреть тестирование стратегии.Рис 6.
На втором окне графика черными точками обозначена текущая позиция. Зеленым обозначена желаемое значение из обучающей последовательности. Красным то что выдала нейросеть.
В третьем окне прибыль на текущий момент.
Стратегия простая если следующая свеча бычья покупаем, медвежья продаем.
Ну и самый интересный вопрос. Что подавать на вход? Для стратегии я использовал OXLC последних 4 свечей, переведенных в двоичный формат, получилось 240 единиц и минус единиц.
Всем спасибо за внимание! Жду отзывов, и лайков![biggrin]
А кстати робот лежит в TFS NeuroRobot Public называется.