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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.