Question : Pourquoi un Handel réglé sur une période ne transmet pas de valeurs àCopyBuffer sur d'autres périodes. Et que faire ?
Si le problème résidait dans le déplacement d'un élément de la mémoire tampon du tableau à différents moments, je résoudrais le problème. Et donc ce n'est pas clair du tout.
Question : Pourquoi un Handel réglé sur une période ne transmet pas de valeurs àCopyBuffer sur d'autres périodes. Et que faire ?
Si le problème résidait dans le déplacement d'un élément de la mémoire tampon du tableau à différents moments, je résoudrais le problème. Et donc ce n'est pas clair du tout.
Si le handle a été créé avec succès, il est créé avec les paramètres que vous lui avez passés lors de sa création. Et il donnera les données de l'indicateur à n'importe quel moment. Cependant, il donnera les données de la période que vous avez spécifiée lors de la création. Et pour les afficher correctement sur le cadre temporel de travail, vous devez convertir les données reçues de la poignée de l'indicateur au cadre temporel dans lequel votre indicateur travaille.
Je vérifiais juste ça. Mais le PROBLÈME est qu'en fixant la main à une période permanente, en
La valeur du CopyBuffer sur d'autres horizons temporels n'est PAS TRANSFÉRABLE. La valeur était sur la période d'hendle définie et 0.0 (zéro) sur les plus petites périodes. Je l'ai déplacé autour du tampon pour le chercher... zéro. Pourquoi n'est-il pas passé àCopyBuffer ?
Je l'ai copié...
//--- Подготовка данныхint count=(limit>1 ? rates_total : 2),copied=0;
ResetLastError();
if(CopyBuffer(handle_ma,0,0,1,BufferPrice)<0)
{
PrintFormat("Failed to copy data from the handle_ma indicator, error code %d",GetLastError());
return(0.0);
}
// copied=CopyBuffer(handle_ma,0,0,count,BufferPrice);Print(BufferPrice[0]);
Une autre question est de savoir ce qui est copié :) Il est fort probable que vous demandiez plus de barres à copier qu'il n'y en a sur cette TF, imprimez...
Si le handle a été créé avec succès, il a été créé avec les paramètres que vous lui avez donnés lors de sa création. Et il donnera les données de l'indicateur à n'importe quel moment. Mais il donnera les données de la période qui a été définie lors de la création. Et pour les afficher correctement sur le cadre temporel de travail, vous devez convertir les données obtenues de la poignée de l'indicateur au cadre temporel dans lequel votre indicateur travaille.
Est-ce que j'ai fait l'expérience correctement ?
1) J'ai créé un handle pour la période D1.
2) Ensuite, nous plaçons les valeurs dans CopyBuffer selon les instructions (d'où à où).
J'ai écrit de zéro à la Nième mesure.
Les valeurs des poignées devraient être écrites dans cet intervalle, en théorie. Même lorsque l'on passe à une autre période, les valeurs doivent être celles de l'ensemble D1. Je ne le vois pas. Ou quelque chose ne va pas ? Y a-t-il autre chose que je devrais ajouter lors de la définition d'une poignée ? Puisqu'il n'y a pas de transfert de tampon.
kopeyka2: Est-ce que j'ai fait l'expérience correctement ?
1) J'ai créé une poignée sur la période D1.
2)Ensuite, dans le CopyBuffer nous mettons les valeurs selon les instructions (d'où à où).
J'ai écrit de zéro à la Nième mesure.
Les valeurs des poignées devraient être écrites dans cet intervalle, en théorie. Même lorsque l'on passe à une autre période, les valeurs doivent être celles de l'ensemble D1. Je ne le vois pas. Ou quelque chose ne va pas ? Y a-t-il autre chose que je devrais ajouter lors de la définition d'une poignée ? Parce qu'il n'y a pas de transfert de tampon.
Une autre question est de savoir ce qui est copié :) Il est fort probable que vous demandiez à copier plus de barres qu'il n'y en a sur cette TF, imprimez...
Tout est plus modeste. Ils ne mettent pas un tas. Seulement 1-2 barres sur D1. Plus précisément int lm=IBarShift(NULL,PERIOD_D1, iTime(NULL, PERIOD_CURRENT, limit)) ;
int bars=PeriodSeconds(PERIOD_D1/PeriodSecond(_Period) ;
int startbar=lm-(lm-bars) ;
J'ai essayé de faire le comptage dans CopyBuffer sans limite et rate_total.
Pour faire simple, expérimentez avec CopyBuffer, ce qu'il faut y mettre, cela devrait être. Mais il n'y en a pas.
... Même lorsque l'on passe à une autre période, les valeurs doivent être celles de l'ensemble D1. C'est exactement ce que je ne vois pas. Ou quelque chose ne va pas ? Y a-t-il autre chose que je devrais ajouter lors de la définition d'une poignée ? Puisqu'il n'y a pas de transfert de tampon.
Tout simplement, expérimenter avec CopyByffer , ce qu'il faut mettre dedans. Mais il n'est pas là.
Vous n'avez pas vérifié la disponibilité des données, mais vous essayez de copier. Regardez le code ci-dessus - il y a un second timer toutes les minutes et demie où l'on accède à l'image temporelle non native - pour garder les données à jour. Et la première chose dans le code est de vérifier si les données demandées sont disponibles. S'ils ne sont pas prêts, alors il retourne zéro pour le prochain tick et le calcul complet de l'indicateur. Et lorsque toutes les données ont été reçues, calculées et affichées, la quantité de données calculées est renvoyée à la fin - afin de ne pas avoir à effectuer un nouveau calcul complet au prochain tick.
kopeyka2: Merci. J'ai tout lu. Je vais continuer à chercher.
Que cherchez-vous ? Le code ci-dessus fonctionne parfaitement. Vous pouvez le disséquer comme vous voulez. J'ai souligné votre erreur - vous ne vérifiez pas la disponibilité des données.
Même sur cette ligne ici :
int lm=IBarShift(NULL,PERIOD_D1, iTime(NULL, PERIOD_CURRENT, limit));
Où est la vérification de ce que iTime() a retourné ? Il n'y a pas de contrôle. Mais tu pousses un résultat inconnu directement dans iBarShift(). Êtes-vous sûr de donner à la fonction ce que vous attendez ?
Si le handle a été créé avec succès, il est créé avec les paramètres que vous lui avez donnés lors de la création. Et il transmettra les données de l'indicateur à n'importe quel moment. Cependant, il donnera les données de la période qui a été définie lors de la création. Et pour les afficher correctement sur le cadre temporel de travail, vous devez convertir les données reçues de la poignée de l'indicateur au cadre temporel dans lequel votre indicateur travaille.
C'est exactement ce que je pensais. La question du malentendu est le mot "paramètres". J'ai donc commencé à regarder TOUTES les variables qui sont impliquées dans le handle --> CopyBuffer
1) Ma question depuis le début était de basculer l'écran de l'horizon temporel pour sauvegarder les données de la poignée. Comme c'est le cas dans MT4.
Et en fait, c'est ce qui se passe :
handle_ma=iMA(NULL,PERIOD_H1,period,0,MODE_SMA,PRICE_CLOSE);
Comment(handle_ma); // ВСЕГДА 10
N'ayant rien obtenu ici, je suis passé à autre chose.
2) Et je cite :"Obtient les données du tampon spécifié de l'indicateur spécifié dans la quantité spécifiée dans le tableau du tampon".
CopyBuffer(handle_ma,0,0,count,BufferPrice); //
C'est-à-dire qu'en réglantle compte à la main, nous devrions avoir un INTERVALLE avec les valeurs .Et les voilà ! BUT !!!!!! Seulement lorsque la période de la poignée correspond à
PERIOD_H1sur l'écran du moniteur.Toutes les valeurs sont transmises clairement. Mais en passant à une autre période de temps, il n'y a PAS de données à l'écran.
Ils ne sont PAS transmis de quelque manière que ce soit. ! !!! Et ma question était exactement ça. Et le nombre de barres n'est pas si important ici s'il n'y en a PAS !!!!.
J'ai regardé l'indicateur proposéMTF_LRMA.mq5 mais c'est la même chose. Il passe à une autre période de l'écran et les données passent par la période de l'écran. J'en ai besoin sur un ordinateur de poche.
Par exemple : iClose(NULL, PERIOD_H1, 5) ; sur tous les horizons temporels, cela donnera la même valeur : clôture sur 5 barres sur H1.
Jusqu'à présent, tous les exemples concernaient la correction dunombre de CopyBuffer. Mais le tableau est vide.
Question : Pourquoi un Handel réglé sur une période ne transmet pas de valeurs àCopyBuffer sur d'autres périodes. Et que faire ?
Si le problème résidait dans le déplacement d'un élément de la mémoire tampon du tableau à différents moments, je résoudrais le problème. Et donc ce n'est pas clair du tout.
Question : Pourquoi un Handel réglé sur une période ne transmet pas de valeurs àCopyBuffer sur d'autres périodes. Et que faire ?
Si le problème résidait dans le déplacement d'un élément de la mémoire tampon du tableau à différents moments, je résoudrais le problème. Et donc ce n'est pas clair du tout.
Si le handle a été créé avec succès, il est créé avec les paramètres que vous lui avez passés lors de sa création. Et il donnera les données de l'indicateur à n'importe quel moment. Cependant, il donnera les données de la période que vous avez spécifiée lors de la création. Et pour les afficher correctement sur le cadre temporel de travail, vous devez convertir les données reçues de la poignée de l'indicateur au cadre temporel dans lequel votre indicateur travaille.
Je vérifiais juste ça. Mais le PROBLÈME est qu'en fixant la main à une période permanente, en
La valeur du CopyBuffer sur d'autres horizons temporels n'est PAS TRANSFÉRABLE. La valeur était sur la période d'hendle définie et 0.0 (zéro) sur les plus petites périodes. Je l'ai déplacé autour du tampon pour le chercher... zéro. Pourquoi n'est-il pas passé àCopyBuffer ?
Je l'ai copié...
Une autre question est de savoir ce qui est copié :) Il est fort probable que vous demandiez plus de barres à copier qu'il n'y en a sur cette TF, imprimez...
Si le handle a été créé avec succès, il a été créé avec les paramètres que vous lui avez donnés lors de sa création. Et il donnera les données de l'indicateur à n'importe quel moment. Mais il donnera les données de la période qui a été définie lors de la création. Et pour les afficher correctement sur le cadre temporel de travail, vous devez convertir les données obtenues de la poignée de l'indicateur au cadre temporel dans lequel votre indicateur travaille.
Est-ce que j'ai fait l'expérience correctement ?
Je vous ai donné une direction...
Étudiez-le:
Je l'ai copié...
Une autre question est de savoir ce qui est copié :) Il est fort probable que vous demandiez à copier plus de barres qu'il n'y en a sur cette TF, imprimez...
kopeyka2:
Верно ли я провел эксперемент.?
...
... Même lorsque l'on passe à une autre période, les valeurs doivent être celles de l'ensemble D1. C'est exactement ce que je ne vois pas. Ou quelque chose ne va pas ? Y a-t-il autre chose que je devrais ajouter lors de la définition d'une poignée ? Puisqu'il n'y a pas de transfert de tampon.
Tout simplement, expérimenter avec CopyByffer , ce qu'il faut mettre dedans. Mais il n'est pas là.
Vous n'avez pas vérifié la disponibilité des données, mais vous essayez de copier. Regardez le code ci-dessus - il y a un second timer toutes les minutes et demie où l'on accède à l'image temporelle non native - pour garder les données à jour. Et la première chose dans le code est de vérifier si les données demandées sont disponibles. S'ils ne sont pas prêts, alors il retourne zéro pour le prochain tick et le calcul complet de l'indicateur. Et lorsque toutes les données ont été reçues, calculées et affichées, la quantité de données calculées est renvoyée à la fin - afin de ne pas avoir à effectuer un nouveau calcul complet au prochain tick.
Merci. J'ai tout lu. Je vais continuer à chercher.
Que cherchez-vous ? Le code ci-dessus fonctionne parfaitement. Vous pouvez le disséquer comme vous voulez. J'ai souligné votre erreur - vous ne vérifiez pas la disponibilité des données.
Même sur cette ligne ici :
int lm=IBarShift(NULL,PERIOD_D1, iTime(NULL, PERIOD_CURRENT, limit));
Où est la vérification de ce que iTime() a retourné ? Il n'y a pas de contrôle. Mais tu pousses un résultat inconnu directement dans iBarShift(). Êtes-vous sûr de donner à la fonction ce que vous attendez ?
Si le handle a été créé avec succès, il est créé avec les paramètres que vous lui avez donnés lors de la création. Et il transmettra les données de l'indicateur à n'importe quel moment. Cependant, il donnera les données de la période qui a été définie lors de la création. Et pour les afficher correctement sur le cadre temporel de travail, vous devez convertir les données reçues de la poignée de l'indicateur au cadre temporel dans lequel votre indicateur travaille.
C'est exactement ce que je pensais. La question du malentendu est le mot "paramètres". J'ai donc commencé à regarder TOUTES les variables qui sont impliquées dans le handle --> CopyBuffer
1) Ma question depuis le début était de basculer l'écran de l'horizon temporel pour sauvegarder les données de la poignée. Comme c'est le cas dans MT4.
Et en fait, c'est ce qui se passe :
TOUJOURS et sur TOUS les horizons temporels donne la même valeur de 10
N'ayant rien obtenu ici, je suis passé à autre chose.
2) Et je cite :"Obtient les données du tampon spécifié de l'indicateur spécifié dans la quantité spécifiée dans le tableau du tampon".
C'est-à-dire qu'en réglantle compte à la main, nous devrions avoir un INTERVALLE avec les valeurs . Et les voilà ! BUT !!!!!! Seulement lorsque la période de la poignée correspond à
PERIOD_H1sur l'écran du moniteur. Toutes les valeurs sont transmises clairement. Mais en passant à une autre période de temps, il n'y a PAS de données à l'écran.
Ils ne sont PAS transmis de quelque manière que ce soit. ! !!! Et ma question était exactement ça. Et le nombre de barres n'est pas si important ici s'il n'y en a PAS !!!!.
J'ai regardé l'indicateur proposéMTF_LRMA.mq5 mais c'est la même chose. Il passe à une autre période de l'écran et les données passent par la période de l'écran. J'en ai besoin sur un ordinateur de poche.
Par exemple : iClose(NULL, PERIOD_H1, 5) ; sur tous les horizons temporels, cela donnera la même valeur : clôture sur 5 barres sur H1.
Jusqu'à présent, tous les exemples concernaient la correction dunombre de CopyBuffer. Mais le tableau est vide.