Veuillez expliquer ce qui pourrait clocher dans cette fonction. - page 5

 
Karputov Vladimir:
Vous feriez mieux de nous dire ce que le service après-vente vous a conseillé - vous avez continué à leur parler là-bas, n'est-ce pas ?
Pour une raison quelconque, je ne frappe pas à une porte fermée plus de trois fois. Pas une seule réponse à mes trois commentaires... Et pourquoi crier dans le vide ?
 
Alexey Viktorov:
Je ne frappe pas à une porte fermée plus de trois fois pour une raison quelconque. Pas une seule réponse à mes trois commentaires... Et pourquoi crier dans le vide ?

CopyRates() sur chaque tick, fonctionnant sur M15 supportera le cache de l'historique par période (timeframe) non-native (H1 et D1).

Et il est également possible, au lieu de copier les séries via CopyRates(), de demander tout simplement

SYMBOL_TIME

Heure du dernier devis

datetime

et utiliser ce temps pour déterminer si c'est un nouveau jour ou une nouvelle heure... Dans ce cas, au lieu de copier la série, vous interrogez simplement le terminal et effectuez une simple analyse temporelle. Vous pouvez également utiliser unSymbolInfoTick plus informatif.

 
Karputov Vladimir:

CopyRates() dans chaque tick, fonctionnant sur M15 supportera le cache de l'historique par période (timeframe) non-native (H1 et D1).

Et il est également possible, au lieu de copier les séries via CopyRates(), de demander tout simplement

SYMBOL_TIME

Heure du dernier devis

datetime

et utiliser ce temps pour déterminer si c'est un nouveau jour ou une nouvelle heure... Dans ce cas, au lieu de copier la série, vous interrogez simplement le terminal et effectuez une simple analyse temporelle. Vous pouvez également utiliser unSymbolInfoTick plus informatif.

Vladimir, la question de la secousse n'était pas une coïncidence. Dans cette EA dans laquelle de tels problèmes ont été trouvés, CopyRates() est appelé à chaque tick, donc la théorie du story jerking équivaut à tirer le chat par sa place causale... Je ne veux pas être impoli...

Et même maintenant, alors que vous avez compris que le problème existe, l'application qui ignore le SD continue obstinément. Je ne suis pas vraiment intéressé, une solution a été trouvée et je peux m'habituer à d'autres problèmes et prendre en compte la stupidité de certaines fonctions, mais mon désir d'informer l'AC de tout problème s'approche rapidement de zéro.

J'écris maintenant depuis un autre ordinateur, pas de code, mais vous pouvez le vérifier vous-même... Combien de barres quotidiennes pensez-vous qu'il y ait entre le 27.06.2016 00:00:00 et le 27.06.2016 00:00:00 ? ?

Vous pensez à zéro ??? Vous avez tort, vérifiez-le avec Bars() Stupidité, mais vous pouvez juste en tenir compte si nécessaire, et quand ils pensent à le corriger... Eh bien, nous allons corriger notre propre code...

 
Alexey Viktorov:

Vladimir, la question sur les secousses n'était pas accidentelle. Dans cette EA, dans laquelle de tels problèmes ont été trouvés, CopyRates() est appelé à chaque tick, donc la théorie de la torsion de l'histoire revient à secouer le chat par le lieu de causalité.... Ne pensez pas que c'est malpoli...

Et même maintenant, alors que vous avez réalisé qu'il y a un problème, l'ignorance de l'application dans le SD continue obstinément. Je ne suis pas vraiment intéressé, la solution est trouvée, on peut s'habituer à d'autres problèmes et garder à l'esprit la stupidité de certaines fonctions, mais l'envie de signaler tout problème à l'AC se rapproche rapidement de zéro.

J'écris maintenant depuis un autre ordinateur, pas de code, mais vous pouvez le vérifier vous-même... Combien de barres quotidiennes pensez-vous qu'il y ait entre le 27.06.2016 00:00:00 et le 27.06.2016 00:00:00 ???

Vous pensez que zéro ??? faux, vérifiez avec Bars() C'est stupide, mais vous pouvez juste le prendre en compte si nécessaire, et quand vous aurez l'idée de le corriger... Eh bien, nous allons corriger notre propre code...

Pas besoin de l'inventer - vous avez fourni un EA SANSCopyRates().
 
Karputov Vladimir:
Pas besoin d'inventer des choses - vous avez fourni un EA SANS CopyRates().
J'ai donné le code quand il n'était pas question de secousses. Je répète, j'écris à partir d'un ordinateur où je n'ai pas de code et installé MT5, donc s'il vous plaît faire des changements vous-même, pas dans la fonction de détermination d'une nouvelle barre, mais avant son appel dans le code principal OnTick(). et répéter l'expérience.
 
Alexey Viktorov:
J'ai donné le code quand il n'était pas question de secousses. Je répète, j'écris depuis mon PC où je n'ai pas de code et MT5 a été installé, c'est pourquoi je vous demande d'effectuer vous-même les modifications non pas dans la fonction définissant une nouvelle barre mais avant son appel dans le code principal OnTick() et de réessayer l'expérience.

S'il y a un code, il y a un jugement. S'il n'y a pas de code, tout passe en mode marc de café. Si vous êtes devant l'ordinateur, créez un code avec mes recommandations.

Forum sur le trading, les systèmes de trading automatisés et le testeur de stratégie

Je n'ai qu'une seule Configure et je dois l'ouvrir manuellement.

Karputov Vladimir, 2016.06.27 13:36

***

Ou vous pouvez utiliser CopyRates() au lieu de copier les séries, vous pouvez juste demander

SYMBOL_TIME

Heure du dernier devis

datetime

et utiliser ce temps pour déterminer si c'est un nouveau jour ou une nouvelle heure... Dans ce cas, au lieu de copier la série, vous interrogez simplement le terminal et effectuez une simple analyse temporelle. Vous pouvez également utiliser unSymbolInfoTick plus informatif.


et vérifiez-le par vous-même.

 

C'est plus ou moins comme ça

datetime oldDay, oldHour;
MqlDateTime mqlDateTime;
MqlRates    mqlRates;
/*******************Expert initialization function*******************/
int OnInit()
{
   return(INIT_SUCCEEDED);
}/*******************************************************************/

/************************Expert tick function************************/
void OnTick()
{
  bool newDay, newHour;
   TimeToStruct(TimeCurrent(), mqlDateTime);
   CopyRates(_Symbol, PERIOD_H1, 0, 1 mqlRates);
    if((int)mqlDateTime.hour == 0)
     {
      newDay = IsNewBar(_Symbol, PERIOD_D1, oldDay);
   if(newDay)
    Print("***** newDay ", newDay, " mqlDateTime.hour ", mqlDateTime.hour); // Судя по распечатке newDay = true
       newHour = IsNewBar(_Symbol, PERIOD_H1, oldHour); // А это совсем другая переменная
    if(newHour)
     Print("***** newHour ", newHour); // Судя по распечатке newHour = true
        if(newDay && newHour) // A ЭТО УСЛОВИЕ НЕ ВЫПОЛНЕНО НЕСМОТРЯ НА ПРЕДЫДУЩИЕ РАСПЕЧАТКИ.
         {
          Print("Ордер должен откыться. ");
         }
     }
}/*******************************************************************/

/*****************Определение появления нового бара******************/
bool IsNewBar(string symbol, ENUM_TIMEFRAMES timeframe, datetime &m_tOld)
 {
  datetime tNew = (datetime)SeriesInfoInteger(symbol, timeframe, SERIES_LASTBAR_DATE);
   if(tNew > m_tOld)
    {
     m_tOld = tNew;
     return(true);
    }
   return(false);
 }
/********************************************************************/

/******************Expert deinitialization function******************/
void OnDeinit(const int reason)
{
 Comment("");
}/*******************************************************************/
 
Alexey Viktorov:

C'est plus ou moins comme ça

Où sont les contrôles de réponse de CopyRates()?
 
Karputov Vladimir:

S'il y a un code, il y a un jugement. S'il n'y a pas de code, tout passe en mode marc de café. Si vous êtes devant l'ordinateur, créez un code avec mes recommandations.


et vérifier par vous-même.

Ouais, eh bien... La présomption d'innocence en action...

En ai-je besoin ? Il y a des bogues dans le programme MQ. Je peux les contourner moi-même ou avec vos conseils, mais les erreurs et les absurdités du logiciel MQ resteront des erreurs et des absurdités.

Je ne serai pas devant l'ordinateur avant vendredi prochain. Et la secousse du chat a déjà été testée. Et ça ne fait aucune différence si vous tirez dessus avec votre main droite ou votre main gauche... Les erreurs sont des erreurs, la stupidité est la stupidité.

 
Karputov Vladimir:
Où sont les contrôles de réponse de CopyRates() ?
Je comprends que votre intérêt à confirmer l'erreur est nul. C'est pourquoi vous ne pouvez rien faire par vous-même... Et je n'ai pas à le faire, je ne vais pas te le prouver. Qu'est-ce que j'y gagne ? Rien...
Raison: