Написал я значит так, всё хорошо, но громоздко))) Хочется лаконичности))) Есть варианты?
//+------------------------------------------------------------------+//| Fraktal_Time_Frame.mq5 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//+------------------------------------------------------------------+//_____________________________________Массивы для фракталов____________________________________double FractalDown_W1[],FractalUP_W1[]; // одномерный динамический массив, так как в [] пустоdouble FractalDown_D1[],FractalUp_D1[]; // одномерный динамический массив, так как в [] пустоdouble FractalDown_H4[],FractalUp_H4[]; // одномерный динамический массив, так как в [] пустоdouble FractalDown_1H[],FractalUp_1H[]; // одномерный динамический массив, так как в [] пустоdouble FractalDown_30[],FractalUp_30[]; // одномерный динамический массив, так как в [] пустоdouble FractalDown_15[],FractalUp_15[]; // одномерный динамический массив, так как в [] пусто//____________________________________Переменные под хендлы____________________________________int Fractal_W1;
int Fractal_D1;
int Fractal_H4;
int Fractal_1H;
int Fractal_30;
int Fractal_15;
//_____________________________________________________________________________________________datetime Time_Mass_OLD[7]; //массивы для нранения времени открытия нулевого бараdatetime Time_Mass_NEW[7]; //ассивы для нранения времени открытия нулевого бара//+------------------------------------------------------------------+intOnInit()
{
Fractal_W1=iFractals(Symbol(),PERIOD_W1);
Fractal_D1=iFractals(Symbol(),PERIOD_D1);
Fractal_H4=iFractals(Symbol(),PERIOD_H4);
Fractal_1H=iFractals(Symbol(),PERIOD_H1);
Fractal_30=iFractals(Symbol(),PERIOD_M30);
Fractal_15=iFractals(Symbol(),PERIOD_M15);
Time_Mass_OLD[1]= iTime(NULL,PERIOD_W1,0);
CopyBuffer(Fractal_W1,0,TimeCurrent(),Bars(Symbol(),PERIOD_W1),FractalUP_W1); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer(Fractal_W1,1,TimeCurrent(),Bars(Symbol(),PERIOD_W1),FractalDown_W1); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries(FractalUP_W1,true); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries(FractalDown_W1,true);//Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
Time_Mass_OLD[2]= iTime(NULL,PERIOD_D1,0);
CopyBuffer(Fractal_D1,0,TimeCurrent(),Bars(Symbol(),PERIOD_D1),FractalUp_D1); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer(Fractal_D1,1,TimeCurrent(),Bars(Symbol(),PERIOD_D1),FractalDown_D1); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries(FractalUP_W1,true); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries(FractalDown_W1,true);//Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
Time_Mass_OLD[3]= iTime(NULL,PERIOD_H4,0);
CopyBuffer(Fractal_H4,0,TimeCurrent(),Bars(Symbol(),PERIOD_H4),FractalUp_H4); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer(Fractal_H4,1,TimeCurrent(),Bars(Symbol(),PERIOD_H4),FractalDown_H4); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries(FractalUP_W1,true); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries(FractalDown_W1,true);//Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
Time_Mass_OLD[4]= iTime(NULL,PERIOD_H1,0);
CopyBuffer(Fractal_1H,0,TimeCurrent(),Bars(Symbol(),PERIOD_H1),FractalUp_1H); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer(Fractal_1H,1,TimeCurrent(),Bars(Symbol(),PERIOD_H1),FractalDown_1H); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries(FractalUP_W1,true); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries(FractalDown_W1,true);//Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
Time_Mass_OLD[5]= iTime(NULL,PERIOD_M30,0);
CopyBuffer(Fractal_30,0,TimeCurrent(),Bars(Symbol(),PERIOD_M30),FractalUp_30); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer(Fractal_30,1,TimeCurrent(),Bars(Symbol(),PERIOD_M30),FractalDown_30); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries(FractalUP_W1,true); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries(FractalDown_W1,true);//Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
Time_Mass_OLD[6]= iTime(NULL,PERIOD_M15,0);
CopyBuffer(Fractal_15,0,TimeCurrent(),Bars(Symbol(),PERIOD_M15),FractalUp_15); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer(Fractal_15,1,TimeCurrent(),Bars(Symbol(),PERIOD_M15),FractalDown_15); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries(FractalUP_W1,true); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries(FractalDown_W1,true);//Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях./* Alert("OnInit");
ArrayRemove(FractalDown_W1,0,WHOLE_ARRAY);
ArrayPrint(
FractalUP_W1, // выводимый массив
0, // количество десятичных знаков после запятой
NULL, // разделитель между значениями полей структуры
0, // индекс первого выводимого элемента
WHOLE_ARRAY, // количество выводимых элементов
ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_ALIGN
);
ArrayRemove(FractalUp_1H,0,WHOLE_ARRAY);
ArrayPrint(
FractalDown_W1, // выводимый массив
0, // количество десятичных знаков после запятой
NULL, // разделитель между значениями полей структуры
0, // индекс первого выводимого элемента
WHOLE_ARRAY, // количество выводимых элементов
ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_ALIGN
); *///------------------------------------------------------------------return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
Time_Mass_NEW[1]= iTime(NULL,PERIOD_W1,0);
Time_Mass_NEW[2]= iTime(NULL,PERIOD_D1,0);
Time_Mass_NEW[3]= iTime(NULL,PERIOD_H4,0);
Time_Mass_NEW[4]= iTime(NULL,PERIOD_H1,0);
Time_Mass_NEW[5]= iTime(NULL,PERIOD_M30,0);
Time_Mass_NEW[6]= iTime(NULL,PERIOD_M15,0);
for(int tik =1; tik <= 6; tik++)
{
if(Time_Mass_NEW[tik]!=Time_Mass_OLD[tik])
{
switch(tik)
{
case1:
Time_Mass_OLD[tik]=Time_Mass_NEW[tik];
CopyBuffer(Fractal_W1,0,TimeCurrent(),Bars(Symbol(),PERIOD_W1),FractalUP_W1); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer(Fractal_W1,1,TimeCurrent(),Bars(Symbol(),PERIOD_W1),FractalDown_W1); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries(FractalUP_W1,true); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries(FractalDown_W1,true);//Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
;
break;
case2:
Time_Mass_OLD[tik]=Time_Mass_NEW[tik];
CopyBuffer(Fractal_D1,0,TimeCurrent(),Bars(Symbol(),PERIOD_D1),FractalUp_D1); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer(Fractal_D1,1,TimeCurrent(),Bars(Symbol(),PERIOD_D1),FractalDown_D1); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries(FractalUP_W1,true); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries(FractalDown_W1,true);//Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
;
break;
case3:
Time_Mass_OLD[tik]=Time_Mass_NEW[tik];
CopyBuffer(Fractal_H4,0,TimeCurrent(),Bars(Symbol(),PERIOD_H4),FractalUp_H4); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer(Fractal_H4,1,TimeCurrent(),Bars(Symbol(),PERIOD_H4),FractalDown_H4); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries(FractalUP_W1,true); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries(FractalDown_W1,true);//Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
;
break;
case4:
Time_Mass_OLD[tik]=Time_Mass_NEW[tik];
CopyBuffer(Fractal_1H,0,TimeCurrent(),Bars(Symbol(),PERIOD_H1),FractalUp_1H); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer(Fractal_1H,1,TimeCurrent(),Bars(Symbol(),PERIOD_H1),FractalDown_1H); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries(FractalUP_W1,true); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries(FractalDown_W1,true);//Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
;
break;
case5:
Time_Mass_OLD[tik]=Time_Mass_NEW[tik];
CopyBuffer(Fractal_30,0,TimeCurrent(),Bars(Symbol(),PERIOD_M30),FractalUp_30); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer(Fractal_30,1,TimeCurrent(),Bars(Symbol(),PERIOD_M30),FractalDown_30); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries(FractalUP_W1,true); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries(FractalDown_W1,true);//Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
;
break;
case6:
Time_Mass_OLD[tik]=Time_Mass_NEW[tik];
CopyBuffer(Fractal_15,0,TimeCurrent(),Bars(Symbol(),PERIOD_M15),FractalUp_15); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer(Fractal_15,1,TimeCurrent(),Bars(Symbol(),PERIOD_M15),FractalDown_15); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries(FractalUP_W1,true); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries(FractalDown_W1,true);//Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
;
break;
}
}
}
/* int n=0;
//----------------------------------------------------
//--- 1 далее используем оператор цикла for для поиска первого верхнего фрактала
int i=Bars(Symbol(),PERIOD_W1); //Колличество баров на H1 графике
for(n=0; n< i; n++)
{
//--- если непустое значение, прерываем цикл
if(FractalUP_W1[n]!=EMPTY_VALUE)
break;
}
//--- запишем ценовое значение первого фрактала в переменную UpFractal_1 из массива с индексом где обнаружился верхний фрактал
double UpFractal_1=FractalUP_W1[n];
Alert("UpFractal_1= ",UpFractal_1);
//---
ArrayPrint(
FractalUP_W1, // выводимый массив
0, // количество десятичных знаков после запятой
NULL, // разделитель между значениями полей структуры
0, // индекс первого выводимого элемента
WHOLE_ARRAY, // количество выводимых элементов
ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_ALIGN
);
ArrayPrint(
FractalDown_W1, // выводимый массив
0, // количество десятичных знаков после запятой
NULL, // разделитель между значениями полей структуры
0, // индекс первого выводимого элемента
WHOLE_ARRAY, // количество выводимых элементов
ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_ALIGN
); */
}
//+------------------------------------------------------------------+
Только вот фракталов меньше чем баров в окне недельного графика, и при заполнении массива ценовыми значениями фракталов заполняется только 90 клеток, и вся остальная разметка памяти избыточна Получактся сначала нужно посчитать колличество фракталов, а уже потом применять ArrayResize для резервирования памяти?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
я подписан на сигнал у провайдера сигнала зделка 0.02 лота а у меня почемуто исполняется 0.01 подскажите почему так?
Ответы на самые популярные вопросы собраны в специальной теме FAQ по сервису Сигналы
Вам в первую очень нужно ознакомиться с:
Подскажите что не так с этим кодом
Подскажите что не так с этим кодом
---
P.S. а вообще, много чего не так, с тем-же массивом к примеру.
---
P.S. а вообще, много чего не так, с тем-же массивом к примеру.
Спасибо за помощь и за наводку!!! Вот так компилируется
Массив Funct (BRN, W1) вне допустимого диапазона
Что может быть?Подправил чутка, почти как нужно работает, до 51.20 там вылетает с ошибкой
Массив Funct (BRN, W1) вне допустимого диапазона
Что может быть?Попробуйте так, у вас не задана размерность массива
А вообще, это не лучшее решение
Подправил чутка, почти как нужно работает, до 51.20 там вылетает с ошибкой
Массив Funct (BRN, W1) вне допустимого диапазона
Что может быть?Строчка решившая проблему краша
Правильно теперь? Поправьте если не сложно.
Подправил чутка, почти как нужно работает, до 51.20 там вылетает с ошибкой
Массив Funct (BRN, W1) вне допустимого диапазона
Что может быть?При этом, вы копируете в массив HandleFractalUP_W1 некое количество элементов, но сколько именно - не контролируете.
Далее, делаете цикл по int i=Bars(Symbol(),period); //Колличество баров на W1 графике
По итогу, снова получите выход за пределы массива, но уже в handle[n]
Разберитесь немного с логикой заполнения, не спешите.
----
Строчка решившая проблему краша
Правильно теперь? Поправьте если не сложно.
Так всё мудрёно, но у вас всё получится
Строчка решившая проблему краша
Правильно теперь? Поправьте если не сложно.
Только вот фракталов меньше чем баров в окне недельного графика, и при заполнении массива ценовыми значениями фракталов заполняется только 90 клеток, и вся остальная разметка памяти избыточна
Получактся сначала нужно посчитать колличество фракталов, а уже потом применять ArrayResize для резервирования памяти?