#property copyright "Copyright 2016, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict extern int q =150;//кол-во элементов для поиска //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int minbar=0, maxbar=0, index=0; double Minimum=0.0,Maximum=0.0,Dip10=0.0; double Low_[]; double High_[]; ArraySetAsSeries(Low_,true); ArraySetAsSeries(High_,true); CopyLow(_Symbol,_Period,0,q,Low_); // теперь в массиве Low "k" элементов CopyHigh(_Symbol,_Period,0,q,High_); // теперь в массиве Low "k" элементов minbar=ArrayMinimum(Low_); // индекс бара с минимальным значением maxbar=ArrayMaximum(High_); Minimum=Low_[ArrayMinimum(Low_)]; // найдено значение Low минимального бара Maximum=High_[ArrayMaximum(High_)];// найдено значение High минимального бара Dip10=(Maximum-Minimum)/10.0; double d[11]; ArrayInitialize(d,0); d[0] =Minimum; d[1] =d[0]+Dip10; d[2] =d[1]+Dip10; d[3] =d[2]+Dip10; d[4] =d[3]+Dip10; d[5] =d[4]+Dip10; d[6] =d[5]+Dip10; d[7] =d[6]+Dip10; d[8] =d[7]+Dip10; d[9]= d[8]+Dip10; d[10]=Maximum; double M[10]; double Mn[10]; double Su[10]; double Mi[10]; ArrayInitialize(M,0); ArrayInitialize(Su,0); ArrayInitialize(Mn,0); ArrayInitialize(Mi,0); for (int k=q;k>1;k--) { if (Close[k] > d[0] && Close[k] < d[1]){Su[0]=Su[0]+1;} if (Close[k] > d[1] && Close[k] < d[2]){Su[1]=Su[1]+1;} if (Close[k] > d[2] && Close[k] < d[3]){Su[2]=Su[2]+1;} if (Close[k] > d[3] && Close[k] < d[4]){Su[3]=Su[3]+1;} if (Close[k] > d[4] && Close[k] < d[5]){Su[4]=Su[4]+1;} if (Close[k] > d[5] && Close[k] < d[6]){Su[5]=Su[5]+1;} if (Close[k] > d[6] && Close[k] < d[7]){Su[6]=Su[6]+1;} if (Close[k] > d[7] && Close[k] < d[8]){Su[7]=Su[7]+1;} if (Close[k] > d[8] && Close[k] < d[9]){Su[8]=Su[8]+1;} if (Close[k] > d[9] && Close[k] < d[10]){Su[9]=Su[9]+1;} } M[0]=Su[0]; M[1]=Su[1]; M[2]=Su[2]; M[3]=Su[3]; M[4]=Su[4]; M[5]=Su[5]; M[6]=Su[6]; M[7]=Su[7]; M[8]=Su[8]; M[9]=Su[9]; Mn[0]=Su[0]; Mn[1]=Su[1]; Mn[2]=Su[2]; Mn[3]=Su[3]; Mn[4]=Su[4]; Mn[5]=Su[5]; Mn[6]=Su[6]; Mn[7]=Su[7]; Mn[8]=Su[8]; Mn[9]=Su[9]; ArraySort(M,10,0,MODE_DESCEND); Print("M[0]=",M[0],"M[1]=",M[1],"M[2]=",M[2],"M[3]=",M[3],"M[4]=",M[4],"M[5]=",M[5],"M[6]=",M[6],"M[7]=",M[7],"M[8]=",M[8],"M[9]=",M[9]); Print("Mn[0]=",Mn[0],"Mn[1]=",Mn[1],"Mn[2]=",Mn[2],"Mn[3]=",Mn[3],"Mn[4]=",Mn[4],"Mn[5]=",Mn[5],"Mn[6]=",Mn[6],"Mn[7]=",Mn[7],"Mn[8]=",Mn[8],"Mn[9]=",Mn[9]); for (int x=9;x>=0;x--) { for (int y=9;y>=0;y--) { if (M[x]==Mn[y]){Mi[x]=y;break;} } } Print("Mi[0]",Mi[0],"Mi[1]=",Mi[1],"Mi[2]=",Mi[2],"Mi[3]=",Mi[3],"Mi[4]=",Mi[4]); Print("Mi[5]",Mi[5],"Mi[6]=",Mi[6],"Mi[7]=",Mi[7],"Mi[8]=",Mi[8],"Mi[9]=",Mi[9]); if (Close[1] > d[0] && Close[1] < d[1]){index=0;} if (Close[1] > d[1] && Close[1] < d[2]){index=1;} if (Close[1] > d[2] && Close[1] < d[3]){index=2;} if (Close[1] > d[3] && Close[1] < d[4]){index=3;} if (Close[1] > d[4] && Close[1] < d[5]){index=4;} if (Close[1] > d[5] && Close[1] < d[6]){index=5;} if (Close[1] > d[6] && Close[1] < d[7]){index=6;} if (Close[1] > d[7] && Close[1] < d[8]){index=7;} if (Close[1] > d[8] && Close[1] < d[9]){index=8;} if (Close[1] > d[9] && Close[1] < d[10]){index=9;} Print("index=",index); } //+------------------------------------------------------------------+
Никто не ответил, потому-что вопрос непонятен. Код из первого поста компилируется без ошибок. В чем проблема и в каком месте непонятно.
Не совсем по делу, вот это вот:
double d1=0.0, d2=0.0, d3=0.0, d4=0.0, d5=0.0, d6=0.0, d7=0.0, d8=0.0, d9=0.0, d10=0.0, d11=0.0; double Su0=0,Su1=0,Su2=0,Su3=0,Su4=0,Su5=0,Su6=0,Su7=0,Su8=0,Su9=0;
Замените на массивы.
--
Елси в двухмерном массиве надо масштабировать второй измерение, то надо использовать структуру. В структуре массив, потом массив структур.
Никто не ответил, потому-что вопрос непонятен. Код из первого поста компилируется без ошибок. В чем проблема и в каком месте непонятно.
Не совсем по делу, вот это вот:
Замените на массивы.
--
Елси в двухмерном массиве надо масштабировать второй измерение, то надо использовать структуру. В структуре массив, потом массив структур.
Подправил предыдущее сообщение. Заменил на массивы переменные, строк меньше стало.
Нужно было посчитать сколько было закрытий в каждом диапазоне, поместить значения в буфер и отсортировать его. Цель была задать значение в оптимизации от 0 до 9 индекса буфера. В нулевом индексе самое большое значение в 9 самое маленькое и попробовать фильтровать сделки на этой основе.
Протестировал улучшений не нашел. Вероятно нет там в этом измерении рыбы.
Подправил предыдущее сообщение. Заменил на массивы переменные, строк меньше стало.
Используйте циклы. Строк будет еще меньше...)
Ну, да в принципе массивы М[], Mn[], d[] можно циклом заполнить.
И не только...
Там вроде рыбы нет, можно не заморачиваться. Но, на будущее учту.
Просто представьте, что диапазон нужно будет разбить не на 10 частей, а на 100... Только циклы.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Разбиваю определенный диапазон на 10 частей. Вычисляю сколько закрытий в каждом диапазоне.
Пробую заполнить массив в первом элементе количеством закрытий(Su1,Su2,Su3....) , во втором измерении заполнять константами(1,2,3...10).
Выходит ошибка "constant expression required", то есть получается значения должны быть константами(постоянными). Потом, когда получится буду сортировать по первому измерению. Что делать, чтобы осуществить?