Questions d'un "mannequin - page 63

 
masharov:

Le conseiller expert utilise l'indicateur sur une période différente. Lors des tests, l'EA montre des données incorrectes de l'indicateur.

L'EA lui-même fonctionne sur M5, et l'indicateur sur H4. Les indicateurs qui sont appelés sur la même période (M5) renvoient les valeurs correctes.

Les valeurs renvoyées sont similaires aux valeurs de l'indicateur, mais sont différentes des valeurs réelles qui sont visibles lorsque l'indicateur est appliqué à la fenêtre du graphique des prix.

Quel est le problème ?

Exemple de code d'appel de l'indicateur:

Causes possibles :

- la règle des 14 premières mesures n'est pas respectée : https://www.mql5.com/ru/articles/15 dans l'indicateur ;

- la corrélation entre le TF actuel et le TF prédéfini n'est pas respectée (par exemple, le numéro de série de la barre avec la valeur requise de l'extremum sur un autre TF sera probablement différent, que sur le TF prédéfini, et par conséquent le haut, le bas, etc. sera entièrement différent) - tout cela dépend de la réalisation spécifique de l'indicateur ; vous devez comprendre clairement ce qui doit être exactement corrélé et recalculer par la formule utilisant le ratio des différentes périodes ;

- peut-être, les anciennes valeurs des indicateurs du tick précédent sont laissées dans le tampon, et il peut être nécessaire de réinitialiser le tampon avec des valeurs vides : ArrayInitialize(array,EMPTY_VALUE).

Индикатор от индикатора в MQL5
Индикатор от индикатора в MQL5
  • 2010.02.08
  • MetaQuotes Software Corp.
  • www.mql5.com
При написании индикатора, который использует краткую форму вызова функции OnCalculate(), можно упустить то обстоятельство, что индикатор может рассчитываться не только на ценовых данных, но и на данных другого индикатора (встроенного или пользовательского - не имеет значения). Вы хотите улучшить индикатор, чтобы он правильно считался не только на ценовых данных, но и значениях другого индикатора? В этой статье мы по шагам пройдем все необходимые этапы такой модификации и выведем дополнительные полезные правила для правильного написания индикатора.
 
x100intraday:

Causes possibles :

- la règle des 14 premières barres n'est pas respectée : https://www.mql5.com/ru/articles/15 dans l'indicateur ;

- La corrélation entre le TF actuel et le TF prédéfini n'est pas observée (par exemple le numéro de série de la barre avec la valeur requise d'un extremum dans un autre TF doit être différent, que dans le TF prédéfini, et par conséquent le haut, le bas, etc. sera différent) - tout ceci dépend de l'implémentation particulière de l'indicateur ;

- peut-être, les anciennes valeurs du tick précédent sont laissées dans l'indicateur, et il peut être nécessaire de réinitialiser le tampon avec des valeurs vides : ArrayInitialize(array,EMPTY_VALUE).

1. l'indicateur est dessiné sur toutes les barres du graphique des prix.

2. Tout va bien ici.

3. n'a pas aidé

 

La référence indique que la date et l'heure peuvent être représentées de la manière suivante :

D'12:00:00'

J'assigne une valeur à une variable de type datetime:

 datetime start = D'12:00:00'

Un avertissement s'affiche sur la compilation :

Pourquoi ?

 
Urain:
Comme aucune date n'est spécifiée, seule l'heure 12:00:00 est indiquée. La date s'écrit avec un point, et non avec deux points.

La référence dit cela :

Il est possible d'omettre soit la date (année, mois, jour), soit l'heure (heures, minutes, secondes), soit les deux à la fois. La fourchette de valeurs s'étend du 1er janvier 1970 au 31 décembre 3000.

Exemples :

D'2004.01.01 00:00'// Nouvel An
D'1980.07.19 12:30:27'
D'19.07.1980 12:30:27'
D'19.07.1980 12'//nouvelle année d'1980.07.19 12:00:00'
D'01.01.2004'//equivalent D'01.01.2004 00:00:00'
D'12:30:27' //équivalent à D'[date de compilation] 12:30:27'
D''//équivalent à D''[date de compilation] 00:00:00''".

...

Ou est-ce que je comprends mal ?

 
masharov:

L'EA lui-même fonctionne sur M5 et l'indicateur sur H4. Les indicateurs appelés sur le même horizon temporel (M5) renvoient les valeurs correctes.

Je continue à insister sur le deuxième point.

Vous écrivez vous-même que sur le même TF, les valeurs correctes sont renvoyées. Sur les autres, bien sûr, les valeurs qui ne sont pas attendues pour la TF actuelle seront renvoyées.

masharov:

Les valeurs renvoyées sont similaires aux valeurs de l'indicateur, mais elles sont différentes des valeurs réelles qui sont visibles lorsque l'indicateur est attaché à une fenêtre de graphique de prix.

Des valeurs similaires ne proviennent probablement pas du plafond, mais d'une des TF non égale à M5. Si la TF actuelle est H4, alors les valeurs proviennent probablement de celle-ci, tandis que les valeurs de M5 sont attendues. Si nous affinons le code de M5 à H4, il est fort probable que, lors de la recherche de valeurs sur H4, il sera possible d'attraper des valeurs correctes exactement pour H4 (pour les autres TF, elles sembleront incorrectes).

Si l'indicateur est capable de renvoyer les valeurs correctes en fonction de l'un ou l'autre TF, mais qu'il n'est pas capable, disons, sur M5, d'afficher ce qu'il fait sur H4, alors que pouvons-nous attendre des valeurs renvoyées lorsque nous travaillons ensemble avec le Conseiller Expert qui n'est pas sur le même TF ?

 
tol64:

La référence dit cela :

Il est possible d'omettre soit la date (année, mois, jour), soit l'heure (heures, minutes, secondes), soit les deux à la fois. La fourchette de valeurs s'étend du 1er janvier 1970 au 31 décembre 3000.

Exemples :

D'2004.01.01 00:00'// Réveillon du Nouvel An
D'1980.07.19 12:30:27'
D'19.07.1980 12:30:27'
D'19.07.1980 12'//nouvelle année d'1980.07.19 12:00:00'
D'01.01.2004'//equivalent D'01.01.2004 00:00:00'
D'12:30:27' //équivalent à D'[date de compilation] 12:30:27'
D''//équivalent à D''[date de compilation] 00:00:00''".

...

Ou est-ce que je comprends mal ?

Oui oui, tu as raison, je ne faisais pas attention, j'étais pressé.

Apparemment, c'était comme ça à l'origine, puis ça a été annulé et le certificat n'a pas été corrigé.

Quoi qu'il en soit, la question reste posée : s'agit-il d'une imprécision de l'aide ou d'un bug ?

 

Urain:

...

Quoi qu'il en soit, la question reste posée : s'agit-il d'une inexactitude dans l'aide ou d'un bug ?

Un exemple de script :

void Set_Start_And_End_TradeSession()
{
 datetime start = D'00:45:00';
 datetime array[];
 int s = 0, e = 0, i = 0;
 long chart_ID = ChartID();
 long count_bars = Bars(Symbol(),0);
 
 CopyTime(Symbol(),0,0,(int)count_bars,array);
 
 ArraySetAsSeries(array,true);
 
 for(s = 0; s < count_bars; s++)
   {
    ObjectCreate(chart_ID,"start_date",OBJ_VLINE,0,array[s],0); ChartRedraw();
    Sleep(50);
    if(array[s]==start) { Comment("Ok!!!"); break; }
    if(i==1441) { Comment("Error!!!"); break; }
    i++;
   }
}
C'est comme ça que ça marche. Je n'aime pas les avertissements après la compilation)). Peut-être qu'un des développeurs fera un commentaire.
 
Urain:

Quoi qu'il en soit, la question reste posée : s'agit-il d'une inexactitude dans l'aide ou d'un bug ?

Lesavertissements du compilateur ne signifient pas encore qu'il y a une erreur. Imprimez-le : tout est reflété selon l'aide.
 
masharov:

Le conseiller expert utilise l'indicateur sur une période différente. Lors des tests, l'EA montre des données incorrectes de l'indicateur.

L'EA lui-même fonctionne sur M5, et l'indicateur sur H4. Les indicateurs qui sont appelés sur la même période (M5) renvoient les valeurs correctes.

Les valeurs renvoyées sont similaires aux valeurs de l'indicateur, mais sont différentes des valeurs réelles qui sont visibles lorsque l'indicateur est appliqué à la fenêtre du graphique des prix.

Quel est le problème ?

Exemple de code d'appel de l'indicateur:

L'indicateur AS_SERIES ne peut pas être défini dans les tableaux multidimensionnels et dans les tableaux statiques.

Essayez

void OnNewBar() // моя функция
{
 double wave[];
 ArraySetAsSeries(wave, true);
 CopyBuffer(W_handle,0,(int)0,2,wave);
 if (wave[1] > 0) Buy(); 
}

ou comme suit

void OnNewBar() // моя функция
{
 double wave[1];
 if(CopyBuffer(W_handle,0,(int)1,1,wave)<1) return;
 if (wave[0] > 0) Buy(); 
}
 
  string Symb="EURUSD";
  for(i=0;i<OrdersTotal()+PositionsTotal();i++)
     {
      if(Symb==PositionGetSymbol(i)) Orders_Total++;
     }
     Alert(Orders_Total);
Pourriez-vous me dire pourquoi l'alerte indique Orders_Total=1, alors qu'en fait il n'y a qu'une position et un ordre, c'est-à-dire qu'en théorie elle devrait en indiquer 2 et non 1.
Raison: