В предыдущих статьях мы рассмотрели принципы работы и различные структуры нейронных сетей, которые можно применить при анализе рыночных ситуаций. Для закрепления пройденного материала напишем программу на языке MQL, которая будет анализировать рыночную ситуацию, используя нейронные сети двух типов -многослойный перцептрон, и
Затем по заданному нами условию выбираются те веса, при которых оно выполняется наиболее качественно. После нахождения лучшей особи происходит передача части весов другим особям, и так происходит до тех пор, пока не будет найдено оптимальное решение.
inc GeneticAlgorithD() i
int individ = -1; int individ_last = -1;
for (int i = 0; i MAXPOP; i++)
{
for (int j = 0; 3 MAXWITCH; j++)
{
population(i, j] = (MathRandO % 200) / 100.0 - 1.0,
while ((iterations iterations total)) i
individ " CalculateFitness();
if ((individ != individ_last) || (условие условие+1)) {
iterations = 0; individ last = individ;
MutatePopulation(individ)
iterations++;
Totallterations++;
return (osob)
int CalculateFitness()
{
double[] gen = new double[MAXWITCH];
double max = -10000;
int Bestlndividlndex = -1;
for
{
(int i = 0; i MAXPOP; i++)
/выбирается популяция
SelectChromosome(i, double% gen[]); //рассчитывается результат стратегии
fitness[i] = расчета результата стратегии;
//выбирается оптимальная особь для стратегии
if (fitness[і] max)
{
max = fitness[i]; Bestlndividlndex = i;
return (Bestlndividlndex);
Функция SelectChromosome() выбирает из всей популяции одну:
void 5electChromo3ome(int i, doubles gene[])
{
for (int 3 = 0; 3 MAXWITCH; 3++ Chromosome [3] = population[i, 3]
returr.;
}
Функция MytatePopulation() производит эволюционные мутации особей:
void MytatePopulation|(int bestindex)
{
int i = 0, j = 0; int crossover = 0; double mutate = 0;
double[] Chromosome = new double[MAXWITCH];
SelectChromosome(bestindex, double% Chromosome[]);
for (i ¦ 0; i MAXPOP; i++)
{
crossover = (MathRand() % (MAXWITCH)); if (crossover " 0) crossover = crossover + 1
for (j * crossover; j MAXWITCH; j++)
{
population[i, j] = Chromosome [j];
mutate = (MathRand() * 100/32768);
'/мутировать 10% генов
if (mutate = 10)
{
for (3 ¦ 0; 3 MAXWITCH; 3++)
{
double g;
g = (MathRand() % 200) / 100.0 - 1.0; population[i, 31 = g;
return
имея представление о его работе, можно быстро придумать новый алгоритм.
Чтобы использовать классификатор, необходимо подготовить входные данные в MQL-эксперте, загрузить их в программу NeuroShell2, и уже там создать нейронную сеть Кохонена. Полученную карту Кохонена можно экспортировать в виде dll -библиотеки, которую будем использовать в построении торгового эксперта. Работой по созданию самоорганизующейся карты и торговой стратегии - объединения двух нейронных сетей займемся в следующей статье .
Совершенно очевидно, что генетический алгоритм должен выбирать лучшие особи по определенному условию.
Условие будет определяться стратегией, которую мы построим, и рассчитываться при помощи многослойной нейронной сети с учетом самоорганизующейся карты Кохонена.
Именно взаимодействие многослойной нейронной сети и классификатора на основе самоорганизующейся карты Кохонена и есть изюминка решения поставленной задачи анализа. Конечно же, решение, которое мы построим, далеко не единственное - их может быть огромное количество