Матрица - размерность массива 2, вектор - одномерный массив. Ничего сложного. НО кто придумал назвать вектором одномерный массив (вернее кто придумал понятно), вот его логику понять видимо не смогу никогда))))
В Учебнике по МТ4 так хорошо всё объяснялось. На пальцах иногда разжёвывали. А тут... порог вхождения слишком велик. Даже просто перечитывая справочник, что такое вектор, что такое матрица, я не понимаю, как их использовать.
boolCreateData(matrix &data, matrix &target, constintcount) { //--- инициализируем матрицы исходных данных и результатов if(!data.Init(count, 3) || !target.Init(count, 1)) returnfalse; //--- заполняем матрицу исходных данных случайными значениями data.Random(-10, 10); //--- рассчитываем целевые значения для обучающей выборки vectorX1 = MathPow(data.Col(0) + data.Col(1) + data.Col(1), 2); vectorX2 = MathPow(data.Col(0), 2) + MathPow(data.Col(1), 2) + MathPow(data.Col(2), 2); if(!target.Col(X1 / X2, 0)) returnfalse; //--- возвращаем результат returntrue; }
Как это? Куда здесь сувать показания индикатора исторические и фактические, как создать наборы сетов и к ним фактических данных... Какая-то форма записи необычная.
Через цикл в обычный массив загоняешь разницу цен или показания индикаторов: первые 10 значений истории загнял, а последнее - фактическое значение, то есть то, что должно получится. И нейросеть проверяет это. В примерах из здешних статей так и делается, но вот этот шаблон из справочника, он кажется каким-то... более умным, чтоли. Если все пытаются подогнать веса в тестере стратегий, то тут обратное распространение ошибки, круто же.
Но, блин, перепрофилировать данный шаблон под практикум форекса прямо засада
В Учебнике по МТ4 так хорошо всё объяснялось. На пальцах иногда разжёвывали. А тут... порог вхождения слишком велик. Даже просто перечитывая справочник, что такое вектор, что такое матрица, я не понимаю, как их использовать.
boolCreateData(matrix &data, matrix &target, constintcount) { //--- инициализируем матрицы исходных данных и результатов if(!data.Init(count, 3) || !target.Init(count, 1)) returnfalse; //--- заполняем матрицу исходных данных случайными значениями data.Random(-10, 10); //--- рассчитываем целевые значения для обучающей выборки vectorX1 = MathPow(data.Col(0) + data.Col(1) + data.Col(1), 2); vectorX2 = MathPow(data.Col(0), 2) + MathPow(data.Col(1), 2) + MathPow(data.Col(2), 2); if(!target.Col(X1 / X2, 0)) returnfalse; //--- возвращаем результат returntrue; }
Как это? Куда здесь сувать показания индикатора исторические и фактические, как создать наборы сетов и к ним фактических данных... Какая-то форма записи необычная.
Через цикл в обычный массив загоняешь разницу цен или показания индикаторов: первые 10 значений истории загнял, а последнее - фактическое значение, то есть то, что должно получится. И нейросеть проверяет это. В примерах из здешних статей так и делается, но вот этот шаблон из справочника, он кажется каким-то... более умным, чтоли. Если все пытаются подогнать веса в тестере стратегий, то тут обратное распространение ошибки, круто же.
Но, блин, перепрофилировать данный шаблон под практикум форекса прямо засада
А где Вы вообще взяли этот код? Смотрю в хелпе ME, там как бы и нет таких методов ( .Random) - очень странно, а в коде всплывает.
Вообще там похоже ещё хелп не поспевает за вводимыми функциями, к примеру в хелпе
void matrix.FromBuffer(const int rows, const int cols, const scalar array[], const int count=-1, const int offset=0)
Ivan Butko #: Алексей, подскажите, пожалуйста, ещё, как работать с векторами?
Не нахожу примеры на сайте...
В шаблоне какая-то математическая функция, да и векторов почему то два
Да белиберда они там делают - возводят в степень числа в столбцах по разному и суммируют, потом делят друг на друга...Для заполнения целевыми матрица target - ей нужен одномерный массив - но я сам не понял, как передать. Возможно, что через вектор только, но как его заполнить - не понятно. Поразбирайтесь со статьёй тут, может поймете лучше меня. Новый дизайн статей не позволяет мне их нормально открывать на нетбуке - может позже ещё посмотрю.
Для решения математических задач в MQL5 были добавлены матрицы и векторы. Новые типы имеют встроенные методы для написания краткого и понятного кода, который близок к математической записи. Массивы — это хорошо, но матрицы во многих случаях лучше.
Да белиберда они там делают - возводят в степень числа в столбцах по разному и суммируют, потом делят друг на друга...Для заполнения целевыми матрица target - ей нужен одномерный массив - но я сам не понял, как передать. Возможно, что через вектор только, но как его заполнить - не понятно. Поразбирайтесь со статьёй тут, может поймете лучше меня. Новый дизайн статей не позволяет мне их нормально открывать на нетбуке - может позже ещё посмотрю.
В Учебнике по МТ4 так хорошо всё объяснялось. На пальцах иногда разжёвывали. А тут... порог вхождения слишком велик. Даже просто перечитывая справочник, что такое вектор, что такое матрица, я не понимаю, как их использовать.
boolCreateData(matrix &data, matrix &target, constintcount) { //--- инициализируем матрицы исходных данных и результатов if(!data.Init(count, 3) || !target.Init(count, 1)) returnfalse; //--- заполняем матрицу исходных данных случайными значениями data.Random(-10, 10); //--- рассчитываем целевые значения для обучающей выборки vectorX1 = MathPow(data.Col(0) + data.Col(1) + data.Col(1), 2); vectorX2 = MathPow(data.Col(0), 2) + MathPow(data.Col(1), 2) + MathPow(data.Col(2), 2); if(!target.Col(X1 / X2, 0)) returnfalse; //--- возвращаем результат returntrue; }
Как это? Куда здесь сувать показания индикатора исторические и фактические, как создать наборы сетов и к ним фактических данных... Какая-то форма записи необычная.
Через цикл в обычный массив загоняешь разницу цен или показания индикаторов: первые 10 значений истории загнял, а последнее - фактическое значение, то есть то, что должно получится. И нейросеть проверяет это. В примерах из здешних статей так и делается, но вот этот шаблон из справочника, он кажется каким-то... более умным, чтоли. Если все пытаются подогнать веса в тестере стратегий, то тут обратное распространение ошибки, круто же.
Но, блин, перепрофилировать данный шаблон под практикум форекса прямо засада
Синтаксиса не знаю. В Дата вместо рандом суете клоз, видимо как то Дата.Массив клоз., А вот с целевыми надо думать, возможно найти на участке массива клоз экстремумы, или через зигзаг пропустить и отобрать, или тупо по три максимальных максимума и минимума с раздвижкой 5-10 баров отобрать.
//+------------------------------------------------------------------+//| Метод генерации выборки |//+------------------------------------------------------------------+bool CreateData(matrix &data, matrix &target, constint count)
{
//--- инициализируем матрицы исходных данных и результатовif(!data.Init(count, 3) || !target.Init(count, 1))
returnfalse;
//--- заполняем матрицу исходных данных случайными значениями//data.Random(-10, 10);//Имеем матрицу 1000 строк и 3 столбцаdouble arr_Mass[][3];
//ArrayResize(arr_Mass,count*3);//Создали массив для записи данныхArrayResize(arr_Mass,count);//Создали массив для записи данныхfor(int i=0; i<count; i++)
{
arr_Mass[i][0]=1;//Заполнили первый столбец предикторами
arr_Mass[i][1]=2;//Заполнили второй столбец предикторами
arr_Mass[i][2]=3;//Заполнили третий столбец предикторами
}
//data.FromBuffer(count,3,arr_Mass,-1,0);
data.Assign(arr_Mass);
Print("data after Assign(arr_Mass) \n", data);
//--- рассчитываем целевые значения для обучающей выборки//vector X1 = MathPow(data.Col(0) + data.Col(1) + data.Col(1), 2);//vector X2 = MathPow(data.Col(0), 2) + MathPow(data.Col(1), 2) + MathPow(data.Col(2), 2);//if(!target.Col(X1 / X2, 0))// return false;vector V_Target;//Вектор для получения массива с целевыми и передачи в матрицуint arr_Target[];//Массив для целевойArrayResize(arr_Target,count);//Изменяем массив на заданное число строк в выборкеint T_Rand=0;//Будем писать рандомfor(int i=0; i<count; i++)
{
T_Rand=rand();//Получаем случайное число от 0 до 32767if(T_Rand>32767/2)arr_Target[i]=1;//Если число меньше половины от максимального случайного, то целевая 1else arr_Target[i]=0; //иначе целевая "0"
}
V_Target.Assign(arr_Target);//Копируме массив в векторif(!target.Col(V_Target,0))//Копируем вектор в матрицу, если ошибка то вернём false функцииreturnfalse;
Print("data after Col(V_Target)", target);
//--- возвращаем результатreturntrue;
}
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Матрица - размерность массива 2, вектор - одномерный массив. Ничего сложного. НО кто придумал назвать вектором одномерный массив (вернее кто придумал понятно), вот его логику понять видимо не смогу никогда))))
В Учебнике по МТ4 так хорошо всё объяснялось. На пальцах иногда разжёвывали. А тут... порог вхождения слишком велик. Даже просто перечитывая справочник, что такое вектор, что такое матрица, я не понимаю, как их использовать.
В том же примере
//--- генерируем обучающую выборку
if(!CreateData(m_data, m_target, train))
return;
...
...
bool CreateData(matrix &data, matrix &target, const int count){
//--- инициализируем матрицы исходных данных и результатов
if(!data.Init(count, 3) || !target.Init(count, 1))
return false;
//--- заполняем матрицу исходных данных случайными значениями
data.Random(-10, 10);
//--- рассчитываем целевые значения для обучающей выборки
vector X1 = MathPow(data.Col(0) + data.Col(1) + data.Col(1), 2);
vector X2 = MathPow(data.Col(0), 2) + MathPow(data.Col(1), 2) + MathPow(data.Col(2), 2);
if(!target.Col(X1 / X2, 0))
return false;
//--- возвращаем результат
return true;
}
Как это? Куда здесь сувать показания индикатора исторические и фактические, как создать наборы сетов и к ним фактических данных... Какая-то форма записи необычная.
Через цикл в обычный массив загоняешь разницу цен или показания индикаторов: первые 10 значений истории загнял, а последнее - фактическое значение, то есть то, что должно получится. И нейросеть проверяет это. В примерах из здешних статей так и делается, но вот этот шаблон из справочника, он кажется каким-то... более умным, чтоли. Если все пытаются подогнать веса в тестере стратегий, то тут обратное распространение ошибки, круто же.
Но, блин, перепрофилировать данный шаблон под практикум форекса прямо засада
В Учебнике по МТ4 так хорошо всё объяснялось. На пальцах иногда разжёвывали. А тут... порог вхождения слишком велик. Даже просто перечитывая справочник, что такое вектор, что такое матрица, я не понимаю, как их использовать.
В том же примере
//--- генерируем обучающую выборку
if(!CreateData(m_data, m_target, train))
return;
...
...
bool CreateData(matrix &data, matrix &target, const int count){
//--- инициализируем матрицы исходных данных и результатов
if(!data.Init(count, 3) || !target.Init(count, 1))
return false;
//--- заполняем матрицу исходных данных случайными значениями
data.Random(-10, 10);
//--- рассчитываем целевые значения для обучающей выборки
vector X1 = MathPow(data.Col(0) + data.Col(1) + data.Col(1), 2);
vector X2 = MathPow(data.Col(0), 2) + MathPow(data.Col(1), 2) + MathPow(data.Col(2), 2);
if(!target.Col(X1 / X2, 0))
return false;
//--- возвращаем результат
return true;
}
Как это? Куда здесь сувать показания индикатора исторические и фактические, как создать наборы сетов и к ним фактических данных... Какая-то форма записи необычная.
Через цикл в обычный массив загоняешь разницу цен или показания индикаторов: первые 10 значений истории загнял, а последнее - фактическое значение, то есть то, что должно получится. И нейросеть проверяет это. В примерах из здешних статей так и делается, но вот этот шаблон из справочника, он кажется каким-то... более умным, чтоли. Если все пытаются подогнать веса в тестере стратегий, то тут обратное распространение ошибки, круто же.
Но, блин, перепрофилировать данный шаблон под практикум форекса прямо засада
А где Вы вообще взяли этот код? Смотрю в хелпе ME, там как бы и нет таких методов ( .Random) - очень странно, а в коде всплывает.
Вообще там похоже ещё хелп не поспевает за вводимыми функциями, к примеру в хелпе
void matrix.FromBuffer(const int rows, const int cols, const scalar array[], const int count=-1, const int offset=0)
frombuffer
Создает матрицу из одномерного массива
но по факту получаю ошибку
А так функцию можно было бы поменять на нечто такое
В общем как то так запустилось - заполняйте массив своими данными, как угодно. Целевую так же надо переделать, что б заполнялась.
В общем как то так запустилось - заполняйте массив своими данными, как угодно. Целевую так же надо переделать, что б заполнялась.
Спасибо большое, что разобрались! Попробую
В общем как то так запустилось - заполняйте массив своими данными, как угодно. Целевую так же надо переделать, что б заполнялась.
Алексей, подскажите, пожалуйста, ещё, как работать с векторами?
Да белиберда они там делают - возводят в степень числа в столбцах по разному и суммируют, потом делят друг на друга...Для заполнения целевыми матрица target - ей нужен одномерный массив - но я сам не понял, как передать. Возможно, что через вектор только, но как его заполнить - не понятно. Поразбирайтесь со статьёй тут, может поймете лучше меня. Новый дизайн статей не позволяет мне их нормально открывать на нетбуке - может позже ещё посмотрю.
Да белиберда они там делают - возводят в степень числа в столбцах по разному и суммируют, потом делят друг на друга...Для заполнения целевыми матрица target - ей нужен одномерный массив - но я сам не понял, как передать. Возможно, что через вектор только, но как его заполнить - не понятно. Поразбирайтесь со статьёй тут, может поймете лучше меня. Новый дизайн статей не позволяет мне их нормально открывать на нетбуке - может позже ещё посмотрю.
В Учебнике по МТ4 так хорошо всё объяснялось. На пальцах иногда разжёвывали. А тут... порог вхождения слишком велик. Даже просто перечитывая справочник, что такое вектор, что такое матрица, я не понимаю, как их использовать.
В том же примере
//--- генерируем обучающую выборку
if(!CreateData(m_data, m_target, train))
return;
...
...
bool CreateData(matrix &data, matrix &target, const int count){
//--- инициализируем матрицы исходных данных и результатов
if(!data.Init(count, 3) || !target.Init(count, 1))
return false;
//--- заполняем матрицу исходных данных случайными значениями
data.Random(-10, 10);
//--- рассчитываем целевые значения для обучающей выборки
vector X1 = MathPow(data.Col(0) + data.Col(1) + data.Col(1), 2);
vector X2 = MathPow(data.Col(0), 2) + MathPow(data.Col(1), 2) + MathPow(data.Col(2), 2);
if(!target.Col(X1 / X2, 0))
return false;
//--- возвращаем результат
return true;
}
Как это? Куда здесь сувать показания индикатора исторические и фактические, как создать наборы сетов и к ним фактических данных... Какая-то форма записи необычная.
Через цикл в обычный массив загоняешь разницу цен или показания индикаторов: первые 10 значений истории загнял, а последнее - фактическое значение, то есть то, что должно получится. И нейросеть проверяет это. В примерах из здешних статей так и делается, но вот этот шаблон из справочника, он кажется каким-то... более умным, чтоли. Если все пытаются подогнать веса в тестере стратегий, то тут обратное распространение ошибки, круто же.
Но, блин, перепрофилировать данный шаблон под практикум форекса прямо засада
Синтаксиса не знаю. В Дата вместо рандом суете клоз, видимо как то Дата.Массив клоз., А вот с целевыми надо думать, возможно найти на участке массива клоз экстремумы, или через зигзаг пропустить и отобрать, или тупо по три максимальных максимума и минимума с раздвижкой 5-10 баров отобрать.
Хорошо! Гляну,спасибо
Пожалуйста.
Если не получилось, вот пример доковырял...
Если не получилось
Ууу, видать это надолго...
Пожалуйста.
Если не получилось, вот пример доковырял...
Благодарю Вас! Сейчас попробую