Les extrema quotidiens, et ce que vous trouvez sont essentiellement des extrema, les points bas (ou les points hauts) sont assez éloignés du prix actuel. La différence entre le bas et le haut de 132 jours sur l'UE est de plus de 12300 pips. Prix à partir du plus bas de 2000, du plus haut de 800.
Je ne comprends pas non plus.
Désolé, j'essaierai d'expliquer demain ce qui est fatigué aujourd'hui.
intArrayCopyRates( MqlRates&rates_array[],// tableau de MqlRates passé par référence stringsymbol=NULL,// l'outil inttimeframe=0// timeframe ) ;
Copie les données des barres du graphique spécifié dans un tableau bidimensionnel du type double RateInfo[][6] et renvoie le nombre de barres copiées.
intArrayCopyRates( void&dest_array[][],// tableau passé par référence stringsymbol=NULL,// outil inttimeframe=0// timeframe ) ;
Paramètres
Taux de copie des tableaux
Lorsque vous utilisez la deuxième forme d'appel, les données sont réellement copiées dans le tableau dest_array[][], le tableau lui-même est automatiquement réalloué pour correspondre à la taille de l'intervalle de temps (même si le tableau a été déclaré statique).
La première dimension du tableau contient le nombre de barres. La deuxième dimension comporte 6 éléments avec les valeurs :
0 - heure (time), 1 - cours d'ouverture (open), 2 - cours le plus bas (low), 3 - cours le plus haut (high), 4 - cours de clôture (close),
Если некоторое имя, которое не было описано ранее, появляется в выражении и за ним следует левая круглая скобка, то оно по контексту считается именем некоторой функции. Аргументы (формальные параметры) передаются по значению, т. е. каждое выражение x1, . . . , xn вычисляется и значение передается функции. Порядок вычисления выражений и порядок...
intArrayCopyRates( MqlRates&rates_array[],// tableau de MqlRates passé par référence stringsymbol=NULL,// l'outil inttimeframe=0// timeframe ) ;
Copie les données des barres du graphique spécifié dans un tableau bidimensionnel de la forme double RateInfo[][6] et renvoie le nombre de barres copiées.
intArrayCopyRates( void&dest_array[][],// tableau passé par référence stringsymbol=NULL,// outil inttimeframe=0// timeframe ) ;
Paramètres
Taux de copie des tableaux
Lorsque vous utilisez la deuxième forme d'appel, les données sont réellement copiées dans le tableau dest_array[][], le tableau lui-même est automatiquement réalloué pour correspondre à la taille de l'intervalle de temps (même si le tableau a été déclaré statique).
La première dimension du tableau contient le nombre de barres. La deuxième dimension comporte 6 éléments avec les valeurs :
0 - heure (time), 1 - cours d'ouverture (open), 2 - cours le plus bas (low), 3 - cours le plus haut (high), 4 - cours de clôture (close),
Et où est sauvegardée la valeur retournée du type int ? Vous avez transmis toutes les données à la fonction, mais n'avez rien obtenu de celle-ci.
#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));
}
Nous devrions essayer d'éviter les cycles inutiles. Nous recevons un grand nombre de devis et nous devons effectuer les bonnes entrées à la volée, afin de ne pas avoir à fouiller dans l'historique et à gaspiller les ressources informatiques.
double Min_D_Level ; //niveau D minimum le plus proche
Ou est-ce que je rate quelque chose ?
Oui, vous ne comprenez pas quelque chose. Ça devrait être comme ça :
Количество_баров=ArrayCopyRates(Bar_data_D1,_Symbol,PERIOD_D1); // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров
Les extrema quotidiens, et ce que vous trouvez sont essentiellement des extrema, les points bas (ou les points hauts) sont assez éloignés du prix actuel. La différence entre le bas et le haut de 132 jours sur l'UE est de plus de 12300 pips. Prix à partir du plus bas de 2000, du plus haut de 800.
Je ne comprends pas non plus.
Désolé, j'essaierai d'expliquer demain ce qui est fatigué aujourd'hui.
L'AUDUSD n'est pas comme ça pour moi.
Que copie-t-il et où retourne-t-il ?
Qu'est-ce qui est copié, où et à qui ?
Vers quoi se dirige-t-il et revient-il ?
intArrayCopyRates(
MqlRates&rates_array[],// tableau de MqlRates passé par référence
stringsymbol=NULL,// l'outil
inttimeframe=0// timeframe
) ;
Copie les données des barres du graphique spécifié dans un tableau bidimensionnel du type double RateInfo[][6] et renvoie le nombre de barres copiées.
intArrayCopyRates(
void&dest_array[][],// tableau passé par référence
stringsymbol=NULL,// outil
inttimeframe=0// timeframe
) ;
Paramètres
Taux de copie des tableauxLorsque vous utilisez la deuxième forme d'appel, les données sont réellement copiées dans le tableau dest_array[][], le tableau lui-même est automatiquement réalloué pour correspondre à la taille de l'intervalle de temps (même si le tableau a été déclaré statique).
La première dimension du tableau contient le nombre de barres. La deuxième dimension comporte 6 éléments avec les valeurs :
0 - heure (time),
1 - cours d'ouverture (open),
2 - cours le plus bas (low),
3 - cours le plus haut (high),
4 - cours de clôture (close),
intArrayCopyRates(
MqlRates&rates_array[],// tableau de MqlRates passé par référence
stringsymbol=NULL,// l'outil
inttimeframe=0// timeframe
) ;
Copie les données des barres du graphique spécifié dans un tableau bidimensionnel de la forme double RateInfo[][6] et renvoie le nombre de barres copiées.
intArrayCopyRates(
void&dest_array[][],// tableau passé par référence
stringsymbol=NULL,// outil
inttimeframe=0// timeframe
) ;
Paramètres
Taux de copie des tableauxLorsque vous utilisez la deuxième forme d'appel, les données sont réellement copiées dans le tableau dest_array[][], le tableau lui-même est automatiquement réalloué pour correspondre à la taille de l'intervalle de temps (même si le tableau a été déclaré statique).
La première dimension du tableau contient le nombre de barres. La deuxième dimension comporte 6 éléments avec les valeurs :
0 - heure (time),
1 - cours d'ouverture (open),
2 - cours le plus bas (low),
3 - cours le plus haut (high),
4 - cours de clôture (close),
Et où est sauvegardée la valeur retournée du type int ? Vous avez transmis toutes les données à la fonction, mais n'avez rien obtenu de celle-ci.
Où est enregistrée la valeur de retour du type int ? Vous avez passé toutes les données dans la fonction, mais vous n'en avez rien retiré.
Min_D_Level = iLow(_Symbol,PERIOD_D1,i); break;Il semble être stocké ici
double Min_D_Level ; //niveau minimal de D le plus proche
ou je ne comprends pas quelque chose ?
Et où est enregistrée la valeur retournée du type int?
? ??
Je suis en train de faire un brainstorming.
Est-il possible de le faire de manière plus simple ?
Comme vous (vous) avez fait une erreur ici, la bonne façon de le faire est cet exemple de code, etc.
Je suis assis ici depuis un moment :
Nous devrions essayer d'éviter les cycles inutiles. Nous recevons un grand nombre de devis et nous devons effectuer les bonnes entrées à la volée, afin de ne pas avoir à fouiller dans l'historique et à gaspiller les ressources informatiques.Un peu comme ça
double Min_D_Level ; //niveau D minimum le plus proche
Ou est-ce que je rate quelque chose ?
Oui, vous ne comprenez pas quelque chose. Ça devrait être comme ça :
Et puis...
Oui, il y a quelque chose que vous ne comprenez pas. C'est comme ça que ça doit être :
Et puis...
Merci beaucoup !
Merci beaucoup sur ce point aussi ! !!
Vous êtes les bienvenus.
3 h 47, je vais me coucher.
Je vais digérer tout cela demain et si j'ai des questions, je vous en ferai part !
Merci beaucoup à tous ! !!