Дневные экстремумы, а то что вы находите это по сути экстремумы, минимумы (или максимумы) имеют достаточно большие расстояния от текущей цены. Разлет минимума и максимума на 132 днях на еве более 12300 пунктов. Цена от ближайшего минимума 2000, от максимума 800.
Тоже не догоняю.
Извиняюсь , завтра попробую объяснить устал сегодня
Копирует в массив данные баров указанного графика и возвращает количество скопированных баров. Существует 2 варианта вызова функции:
int ArrayCopyRates( MqlRates&rates_array[], // массив MqlRates, переданный по ссылке stringsymbol=NULL, // инструмент inttimeframe=0 // таймфрейм );
Копирует в двумерный массив вида double RateInfo[][6] данные баров указанного графика и возвращает количество скопированных баров.
int ArrayCopyRates( void&dest_array[][], // массив, переданный по ссылке stringsymbol=NULL, // инструмент inttimeframe=0 // таймфрейм );
Параметры
ArrayCopyRates
При использовании второй формы вызова происходит реальное копирование данных в массив dest_array[][], сам массив автоматически перераспределяется, чтобы соответствовать размеру таймсерии (даже если массив был объявлен статическим).
Первое измерение массива содержит количество баров. Второе измерение имеет 6 элементов со значениями:
Если некоторое имя, которое не было описано ранее, появляется в выражении и за ним следует левая круглая скобка, то оно по контексту считается именем некоторой функции. Аргументы (формальные параметры) передаются по значению, т. е. каждое выражение x1, . . . , xn вычисляется и значение передается функции. Порядок вычисления выражений и порядок...
Копирует в массив данные баров указанного графика и возвращает количество скопированных баров. Существует 2 варианта вызова функции:
int ArrayCopyRates( MqlRates&rates_array[], // массив MqlRates, переданный по ссылке stringsymbol=NULL, // инструмент inttimeframe=0 // таймфрейм );
Копирует в двумерный массив вида double RateInfo[][6] данные баров указанного графика и возвращает количество скопированных баров.
int ArrayCopyRates( void&dest_array[][], // массив, переданный по ссылке stringsymbol=NULL, // инструмент inttimeframe=0 // таймфрейм );
Параметры
ArrayCopyRates
При использовании второй формы вызова происходит реальное копирование данных в массив dest_array[][], сам массив автоматически перераспределяется, чтобы соответствовать размеру таймсерии (даже если массив был объявлен статическим).
Первое измерение массива содержит количество баров. Второе измерение имеет 6 элементов со значениями:
#property version"1.00"#property strict//символ и таймфрейм текущего графикаstring symbol;
ENUM_TIMEFRAMES frame;
datetime time;
struct BarData
{
struct Elem
{
int number; //порядковый номер периода (дня, месяца или года)double high; //максимум периодаdouble low; //минимум периодаdatetime time_high; //время максимумаdatetime time_low; //время минимума
} Arr[]; //массив периодаint index; //текущий индекс массиваdouble max; //последнее максимальное значение периодаdouble min; //последнее минимальное значение периодаdatetime time_max; //время максимумаdatetime time_min; //время минимума//при создании структуры указываем, что массив пустой
BarData(){index=-1;}
//функция записывает текущие экстремумыvoid WriteBar(int eNumber, string eSymbol, ENUM_TIMEFRAMES eFrame, datetime eTime)
{
int eShift=iBarShift(eSymbol,eFrame,eTime);
double eHigh=iHigh(eSymbol,eFrame,eShift);
double eLow=iLow(eSymbol,eFrame,eShift);
//если элементов ещё нет или период сменилсяif(index<0 || eNumber!=Arr[index].number)
{
ArrayResize(Arr,++index+1);
Arr[index].number=eNumber;
Arr[index].high=eHigh;
Arr[index].low=eLow;
Arr[index].time_high=eTime;
Arr[index].time_low=eTime;
}
//если произошло обновление текущего максимумаif(eHigh-Arr[index].high>0)
{
Arr[index].high=eHigh;
Arr[index].time_high=eTime;
}
//если произошло обновление текущего минимумаif(Arr[index].low-eLow>0)
{
Arr[index].low=eLow;
Arr[index].time_low=eTime;
}
//если произошло обновление предыдущего максимумаif(eHigh-max>0)
{
for(int i=index+1; i>=0; i--)
{
if(Arr[index].high-eHigh>0)
{
max=Arr[index].high;
time_max=Arr[index].time_high;
break;
}
}
}
//если произошло обновление предыдущего минимумаif(min-eLow>0)
{
for(int i=index+1; i>=0; i--)
{
if(eLow-Arr[index].low>0)
{
min=Arr[index].low;
time_min=Arr[index].time_low;
break;
}
}
}
}
} day, month, year;
intOnInit()
{
symbol=Symbol();
frame=(ENUM_TIMEFRAMES)Period();
return(INIT_SUCCEEDED);
}
voidOnTick()
{
//текущее время закрытого бара
time=iTime(symbol,frame,1);
MqlDateTime date;
TimeToStruct(time,date);
//делаем записи каждого периода
day.WriteBar(date.day,symbol,frame,time);
month.WriteBar(date.mon,symbol,frame,time);
year.WriteBar(date.year,symbol,frame,time);
//теперь имеем значения Comment(TimeToString(day.time_max)+" : "+DoubleToString(day.max)+" : "+DoubleToString(day.Arr[day.index].high)+"\n"+TimeToString(day.time_min)+" : "+DoubleToString(day.Arr[day.index].low)+" : "+DoubleToString(day.min));
}
Надо стремится избегать лишних циклов. У нас потоком поступают котировки, и нужно сразу налету делать нужные записи, чтобы потом не копаться в истории и не тратить ресурсы компьютера.
double Min_D_Level ; // ближайшей минимальный D уровень
или я что-то не до понимаю ?
Да, что-то не понимаете. Надо так:
Количество_баров=ArrayCopyRates(Bar_data_D1,_Symbol,PERIOD_D1); // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Дневные экстремумы, а то что вы находите это по сути экстремумы, минимумы (или максимумы) имеют достаточно большие расстояния от текущей цены. Разлет минимума и максимума на 132 днях на еве более 12300 пунктов. Цена от ближайшего минимума 2000, от максимума 800.
Тоже не догоняю.
Извиняюсь , завтра попробую объяснить устал сегодня
AUDUSD у меня не так
Что тут куда копирует и кому возвращает?
Что тут куда копирует и кому возвращает?
Что тут куда копирует и кому возвращает?
ArrayCopyRates
Копирует в массив данные баров указанного графика и возвращает количество скопированных баров. Существует 2 варианта вызова функции:
int ArrayCopyRates(
MqlRates& rates_array[], // массив MqlRates, переданный по ссылке
string symbol=NULL, // инструмент
int timeframe=0 // таймфрейм
);
Копирует в двумерный массив вида double RateInfo[][6] данные баров указанного графика и возвращает количество скопированных баров.
int ArrayCopyRates(
void& dest_array[][], // массив, переданный по ссылке
string symbol=NULL, // инструмент
int timeframe=0 // таймфрейм
);
Параметры
ArrayCopyRatesПри использовании второй формы вызова происходит реальное копирование данных в массив dest_array[][], сам массив автоматически перераспределяется, чтобы соответствовать размеру таймсерии (даже если массив был объявлен статическим).
Первое измерение массива содержит количество баров. Второе измерение имеет 6 элементов со значениями:
0 - время (time),
1 - цена открытия (open),
2 - наименьшая цена (low),
3 - наивысшая цена (high),
4 - цена закрытия (close),
ArrayCopyRates
Копирует в массив данные баров указанного графика и возвращает количество скопированных баров. Существует 2 варианта вызова функции:
int ArrayCopyRates(
MqlRates& rates_array[], // массив MqlRates, переданный по ссылке
string symbol=NULL, // инструмент
int timeframe=0 // таймфрейм
);
Копирует в двумерный массив вида double RateInfo[][6] данные баров указанного графика и возвращает количество скопированных баров.
int ArrayCopyRates(
void& dest_array[][], // массив, переданный по ссылке
string symbol=NULL, // инструмент
int timeframe=0 // таймфрейм
);
Параметры
ArrayCopyRatesПри использовании второй формы вызова происходит реальное копирование данных в массив dest_array[][], сам массив автоматически перераспределяется, чтобы соответствовать размеру таймсерии (даже если массив был объявлен статическим).
Первое измерение массива содержит количество баров. Второе измерение имеет 6 элементов со значениями:
0 - время (time),
1 - цена открытия (open),
2 - наименьшая цена (low),
3 - наивысшая цена (high),
4 - цена закрытия (close),
А куда сохраняется возвращаемое значение типа int? Вы все данные в функцию передали, но нихрена из неё не получили.
А куда сохраняется возвращаемое значение типа int? Вы все данные в функцию передали, но нихрена из неё не получили.
Min_D_Level = iLow(_Symbol,PERIOD_D1,i); break;Вроде как сюда
double Min_D_Level ; // ближайшей минимальный D уровень
или я что-то не до понимаю ?
А куда сохраняется возвращаемое значение типа int?
???
Реально мозг закипел .
Можно как-то по Проше .
Типа вот ты (вы) тут допустили не допустимое правильно будет вот так пример кода и тд.
Посидел тут немного:
Надо стремится избегать лишних циклов. У нас потоком поступают котировки, и нужно сразу налету делать нужные записи, чтобы потом не копаться в истории и не тратить ресурсы компьютера.Вроде как сюда
double Min_D_Level ; // ближайшей минимальный D уровень
или я что-то не до понимаю ?
Да, что-то не понимаете. Надо так:
Ну и дальше...
Да, что-то не понимаете. Надо так:
Ну и дальше...
Вот и на этом большое спасибо !!
Вот и на этом большое спасибо !!
Большое не за что.
3.47 пойду спать .
завтра всё переварю , если будут вопросы дам знать !
Всем большое Спасибо !!!