← К каталогу
Исходный код · ID 1153

NeuroProba

neuroproba.mq5
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

NeuroProba — пользовательский индикатор для MetaTrader 4, отображающий три линии в отдельном окне: выходное значение нейронной сети (Answer), сигнал учителя (Teacher) и ошибку (Error). В основе работы лежит простая многослойная нейронная сеть с 9 входными нейронами, обучаемая на исторических данных цен.

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

Результат расчёта нейронной сети отрисовывается как линия Answer, а ошибка обучения — как линия Error. Индикатор использует функцию активации на основе гиперболического тангенса для формирования выходного значения.

Настройки программы

НастройкаОписание
????????? ??? ? ????????? ??????? (BeginBar) BeginBar — Начальный бар для расчёта и обучения (по умолчанию 300).
???????? ??? ? ????????? ??????? (EndBar) EndBar — Конечный бар для расчёта и обучения (по умолчанию 201).
?????????? ????????? ?????? (StudyNumber) StudyNumber — Количество полных итераций обучения нейронной сети (по умолчанию 100).
???????? ????????????? ??????? (Betta) Betta — Параметр, используемый при вычислении функции активации нейронной сети (по умолчанию 0.5).
??????????? ???????? (StudyCoeff) StudyCoeff — Коэффициент, определяющий скорость корректировки весов при обучении (по умолчанию 0.1).
2.0/MathSqrt(9); (MaxRandom) MaxRandom — Максимальное значение для случайной инициализации весов сети (по умолчанию 0.66).
Получить полный код

Поиск по коду файла

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Blue
#property indicator_color3 Red

extern int       BeginBar=300; // ????????? ??? ? ????????? ???????
extern int       EndBar=201; // ???????? ??? ? ????????? ???????
extern int       StudyNumber=100; // ?????????? ????????? ??????
extern double    Betta=0.5; // ???????? ????????????? ???????
extern double    StudyCoeff=0.1; // ??????????? ????????
extern double    MaxRandom=0.66;//2.0/MathSqrt(9);

double NeuroExitBuffer[]; // ???????? ???????? ?????????
double TeacherBuffer[]; // ????????? ???????? ????????? (????????? ???????)
double ErrorBuffer[]; // ?????????? ?? ?????? ????

double deviation; // ?????????? ?? ?????? ???? ???????? 
double GradientFirstLay[9][9];// ??? ??????? ????????? 1-?? ????
double GradientSecondLay[9]; //  ??? ??????? ????????? 2-?? ????
double OutputFirstLay[9]; // ????? ?????? ??????? ???????
double SecondSum;// ????? ????????? ???? - ???????? ????????????? ???????
double FirstLayWeights[9][9]; // ???? ???????? ??????? (???????? ????)
double OutputSecondWeights[9]; // ???? ????????? ???????
double InputNormalX[100][9]; // ??????????????? ??????? ??????? ????????
double InputX[9]; // ??????? ??????? ?????? (?????????????????)
double Norm?;// ????? ???????? ???????? ???????
double U_First[9];// ???????? ?? ?????? ???? ??????? (???????) ????????
double U_Second;//  ???????? ?? ?????? ????????? ??????? (???????? ????????????? ???????)
double SigmaCurr;
double Differ;

double NormalRand(double MaxValue=1.0)
   {
   double answer;
   answer=MathRand()/32767.0;
   answer=MaxValue*answer;
   return(answer);
   }

double Sigma(double argument)
   {
   double help;
   help=(MathExp(argument)-MathExp(-argument))/(MathExp(argument)+MathExp(-argument));
   return(help);
   }

double GetArgument()
   {
   int j;
   double answer=0.0;
   for (j=0;j<9;j++)
      {
      answer=answer+OutputSecondWeights[j]*OutputFirstLay[j];
      }
   return(answer);
   }

void GetFirstLayOutput()
   {
   int j,t;
   for (j=0;j<9;j++)
      {
      OutputFirstLay[j]=0.0;      
      for (t=0;t<9;t++)
         {
         OutputFirstLay[j]=OutputFirstLay[j]+FirstLayWeights[j,t]*InputX[t];
         }
      }
   return(0);
   }

void SetGradientWeights()
   {
   int j,t;
   for (j=0;j<9;j++)
      {

      for (t=0;t<9;t++)
         {
         GradientFirstLay[j,t]=OutputSecondWeights[j]*InputX[t]*deviation*Differ;

         }

      GradientSecondLay[j]=OutputFirstLay[j]*deviation*Differ;
      }
   }

void ChangeWeigts()
   {
   int i,k;
   for (i=0;i<9;i++)
      {
      for (k=0;k<9;k++)
         {
         FirstLayWeights[i,k]=FirstLayWeights[i,k]-StudyCoeff*GradientFirstLay[i,k];
         }
      OutputSecondWeights [i]=OutputSecondWeights [i]-StudyCoeff*GradientSecondLay[i];// ????????? ????? ????????? ???????
      } 
   }

void PrintWeights()
   {
   int i,k;
   for (i=0;i<9;i++)
      {
      for (k=0;k<9;k++)   
         {

         }

      }
 

Показано первые 50% кода (символов: 4698)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
469,80₽ ≈ $5.74