Questions des débutants MQL5 MT5 MetaTrader 5 - page 93

 
ryzhak.vladimir:

Bonjour, il y a un tableau des prix de clôture des barres 30 min de la paire EURUSD, du 01.01.2012 au 31.12.2012. Je l'obtiens avec la fonction CopyClose. Mais CopyClose[0] n'est pas égal au prix de clôture de la dernière barre du 31.12.2012 dans le terminal, si j'ouvre le graphique. S'il vous plaît, dites-moi ce que je fais mal. Pourquoi les prix de CopyClose et le prix réel sur le graphique ne coïncident-ils pas ?

Avant d'appeler Close_buf[0], vous devez utiliser ArraySetAsSeries. Une fois, pendant toute la durée de fonctionnement du code EA/Script/indicateur.

ArraySetAsSeries(Close_buf,true);
 
fyords:

ArraySetAsSeries doit être utilisé avant d'appeler Close_buf[0]. Une fois, pour toute la durée de l'EA/script/code indicateur.

Il ne correspond toujours pas, il affiche 1.32308 au lieu de 1.31964 (prix de clôture de la dernière barre en 2012).

//+------------------------------------------------------------------+
//|                                                    simpleBet.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
double Close_buf[];//динамический массив для хранения значений закрытия баров
string my_symbol = "EURUSD";//валютная пара
ENUM_TIMEFRAMES my_timeframe = PERIOD_M30;//таймфрейм
datetime testTimeStart = D'2012.01.01';
datetime testTimeEnd = D'2012.12.31';
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---    
     CopyClose(my_symbol,my_timeframe,testTimeStart,testTimeEnd,Close_buf); 
     ArraySetAsSeries(Close_buf,true);
     Print(Close_buf[0]);
  }
//+------------------------------------------------------------------+
 
ryzhak.vladimir:

Ne correspond toujours pas, affiche 1.32308 au lieu de 1.31964 (prix de clôture de la dernière barre en 2012).

Vous mettez
datetime testTimeEnd = D'2012.12.31';
Et si vous mettez
datetime testTimeEnd = D'2012.12.31 23:59:59';
 
Oui, ça a marché, merci ! Bien que la raison pour laquelle les prix ne correspondent que lorsque la date exacte est indiquée, à la seconde près, n'est toujours pas claire.
 
ryzhak.vladimir:
Oui, ça a marché, merci ! Je ne comprends toujours pas pourquoi les prix ne correspondent que lorsque la date exacte est spécifiée à la seconde près.

Probablement parce que le 2012.12.31 affiche par défaut le 2012.12.31 00:00:00, et non le 2012.12.31 24:00:00.

 
La citation de la documentation sur la fonction CopyBuffer :"Les éléments de données à copier (tampon indicateur avec l'index buffer_num) sont comptés à partir de la position de départ du présent vers le passé, c'est-à-dire que la position de départ égale à 0 signifie la barre actuelle (valeur de l'indicateur pour la barre actuelle). "Mais en pratique, pour avoir la barre actuelle dans le 0ème élément, nous devons appliquer ArraySetAsSeries(Close_buf,true). Mais il est écrit dans la documentation que par défaut il copie la dernière barre du 0ème élément. Pourquoi y a-t-il une telle différence ?
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
ryzhak.vladimir: Citation de la documentation sur la fonction CopyBuffer :"Les éléments des données copiées (tampon indicateur avec l'index buffer_num) sont comptés à partir de la position de départ du présent vers le passé, c'est-à-dire que la position de départ égale à 0 signifie la barre actuelle (valeur de l'indicateur pour la barre actuelle). "Mais en pratique, pour avoir la barre actuelle dans le 0ème élément, nous devons appliquer ArraySetAsSeries(Close_buf,true). Mais il est écrit dans la documentation que par défaut il copie la dernière barre du 0ème élément. Pourquoi y a-t-il une telle différence ?
Regardez la figure de plus près. Où est copié l'élément "start_pos" ?
 
Confronté au problème de l'orientation psychologique.
J'ai écrit un EA de tendance et il semble être réussi. Maintenant, j'écris un EA plat et... C'est la 5e fois que cet EA est réduit au précédent, comme si je suis coincé avec un seul algorithme. Au départ, tout est "nouveau", mais une fois l'algorithme structuré, je commence à écrire un EA qui s'adapte au premier (qui a réussi) de toutes les manières possibles.

Si quelqu'un a été confronté à une telle situation, dites-moi comment me "débarrasser" de l'algorithme imposant, qui ne fait que faire baisser la caution de l'appartement.
 
Lester: Si vous avez été confronté à une telle connerie - dites-moi comment "se débarrasser" de l'algorithme imposant, qui dans l'appartement ne fait que drainer le dépôt.
Je ne suis pas tombé sur une telle chose, mais pour un changement général d'attention, essayez d'étudier les algorithmes d'autres personnes.
 
Lester:

Confronté au problème de l'orientation psychologique.
J'ai écrit un EA de tendance et il semble être réussi. Maintenant, j'écris un EA plat et... C'est la 5e fois que cet EA est réduit au précédent, comme si je suis coincé avec un seul algorithme. Au départ, tout est "nouveau", mais une fois l'algorithme structuré, je commence à écrire un EA qui s'adapte au premier (qui a réussi) de toutes les manières possibles.

Si quelqu'un a été confronté à une telle situation, dites-moi comment me "débarrasser" de l'algorithme, qui ne fait que faire baisser la caution de l'appartement.
Votre trader n'a pas un problème psychologique, mais un problème de système - le manque de signes précis de différence entre la tendance et le plat. Une fois que vous aurez compris ce point, tout s'arrangera pour vous.