Пожалуйста разместите код в сообщении правильно: Правильно вставляем код на форуме
Возможно это поможет: https://www.mql5.com/ru/docs/basis/types/object_pointers
- www.mql5.com
Это как упражнение по программированию надеюсь? Если да, то похвально.
Вы же не собираетесь ЭТО использовать в торговле? Если да, то :
Есть более надежные и проверенные варианты реализации нейросетей.
Поройтесь по статьям и форуму на этом сайте.
Удачи
Добрый день коллеги!
Есть задача: перевести код нейросети написанный на С++ в MQL5.
На этом куске кода у меня ступор:
Желтым выделил строчки непонятные мне.
Может кто нибудь объяснить логику данного кода?
(я понимаю что * это ссылка на ячейку, но что значит строчка выделенная красным я не понимаю)
Или как бы это выглядело в MQL5, это я пойму))
ещё одна ссылка после которой должно настать просветление https://www.mql5.com/ru/articles/36
MLPP04Acts[40+u] += *w++ * MLPP04Acts[0+i]
*w++ разыменовывание указателя, т.е. то значение которое находится по адресу w нужно инкрементировать )
обычно вместе с указателями сразу изучают и ссылки, если будет попадатся такой значёк "&" в коде, боятся его не нужно ) http://www.quizful.net/post/cpp-for-beginners-pointers-and-references
- 2010.03.25
- MetaQuotes Software Corp.
- www.mql5.com
*w++ разыменовывание указателя, т.е. то значение которое находится по адресу w нужно инкрементировать )
С фига ли?
Инкремент более приоритетная операция - здесь увеличится указатель.
Смысл такой: получаем данные по указателю, после этого указатель переводим на следующий объект.
А че ж простые указатели тут в mql5 не пашут? А я то думал будто mql5 срисован с С++ на все сто. Размечтался....
ок, поехали
double *w = MLPP04Weights, *t = MLPP04Thresholds;
-- как бы w и t указатели на массивы MLPP04Weights и MLPP04Thresholds
точнее
w это MLPP04Weights[0]
t это MLPP04Thresholds[0]
for ( i=0; i < 40; ++i ) MLPP04Acts[40+u] += *w++ * MLPP04Acts[0+i]; /* Subtract threshold */ MLPP04Acts[40+u] -= *t++;
-- получение значений из массивов с последующим переходом на следующий элемент, короче перевожу ;)
указатели double *w, *t заменяем на простые индексы
int w =0;
int t=0;
и далее по тексту используем их как индексы массивов
for ( i=0; i < 40; ++i )
MLPP04Acts[40+u] += MLPP04Weights[w++] * MLPP04Acts[0+i];
/* Subtract threshold */
MLPP04Acts[40+u] -= MLPP04Thresholds[t++];
по идее результат будет аналогичным ;)
Какие индексы? Это веса и пороги сети. Их на массивы переделывать надо.
веса, пороги это и есть массивы ;)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день коллеги!
Есть задача: перевести код нейросети написанный на С++ в MQL5.
На этом куске кода у меня ступор:
MT4_EXPFUNC double __stdcall MLPP04Run(const double *inputs,const int arraysize,double *outputs,const int arraysize1,const int outputType) { int i, j, k, u; double *w = MLPP04Weights, *t = MLPP04Thresholds; /* Process inputs - apply pre-processing to each input in turn, * storing results in the neuron activations array. */ /* Input 0: standard numeric pre-processing: linear shift and scale. */ for ( j=0; j < 8; ++j ) { if ( inputs[0+j] == -9999 ) MLPP04Acts[0+j] = 0.48093986534718336; else MLPP04Acts[0+j] = inputs[0+j] * 1.3013784200224878 + -0.10227559030525137; } /* Input 1: standard numeric pre-processing: linear shift and scale. */ for ( j=0; j < 8; ++j ) { if ( inputs[8+j] == -9999 ) MLPP04Acts[8+j] = 0.49145314384753758; else MLPP04Acts[8+j] = inputs[8+j] * 1.0007011302391895 + -0.00070113023918965582; } /* Input 2: standard numeric pre-processing: linear shift and scale. */ for ( j=0; j < 8; ++j ) { if ( inputs[16+j] == -9999 ) MLPP04Acts[16+j] = 0.51929143170024528; else MLPP04Acts[16+j] = inputs[16+j] * 1.3923156174110272 + -0.069929848289002006; } /* Input 3: standard numeric pre-processing: linear shift and scale. */ for ( j=0; j < 8; ++j ) { if ( inputs[24+j] == -9999 ) MLPP04Acts[24+j] = 0.52980277776401596; else MLPP04Acts[24+j] = inputs[24+j] * 1.1311125619766262 + -0.0064131842661201994; } /* Input 4: standard numeric pre-processing: linear shift and scale. */ for ( j=0; j < 8; ++j ) { if ( inputs[32+j] == -9999 ) MLPP04Acts[32+j] = 0.50269117887263026; else MLPP04Acts[32+j] = inputs[32+j] * 1.0267536506485304 + 0; } /* * Process layer 1. */ /* For each unit in turn */ for ( u=0; u < 16; ++u ) { /* * First, calculate post-synaptic potentials, storing * these in the MLPP04Acts array. */ /* Initialise hidden unit activation to zero */ MLPP04Acts[40+u] = 0.0; /* Accumulate weighted sum from inputs */ for ( i=0; i < 40; ++i ) MLPP04Acts[40+u] += *w++ * MLPP04Acts[0+i]; /* Subtract threshold */ MLPP04Acts[40+u] -= *t++; /* Now apply the hyperbolic activation function, ( e^x - e^-x ) / ( e^x + e^-x ). * Deal with overflow and underflowЖелтым выделил строчки непонятные мне.
Может кто нибудь объяснить логику данного кода?
(я понимаю что * это ссылка на ячейку, но что значит строчка выделенная красным я не понимаю)
Или как бы это выглядело в MQL5, это я пойму))