Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1383

 

Que pensez-vous de ça ?

bool CheckSpr(int _sp)
{
   static int ts=0, res=0;
   static long tc=0;
   if(tc>50 && res*3<_sp) return(false);
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<50) return(false);
   return(res>_sp?true:false);
}

Encore une fois, si vous exécutez le code pendant le rollover et non avant, il écrira un énorme spread de 50 tick et cette ligne n'a aucun sens.

Comment corriger le code ?

 
Vitaly Muzichenko:

Que pensez-vous de ça ?

Encore une fois, si vous exécutez le code pendant le rollover et non avant, il écrira un énorme spread de 50 tick et cette ligne n'a aucun sens.

Comment corriger le code ?

La logique n'est pas bonne. Pourquoi exactement une moyenne de 50 ticks avec un compteur à longmax, qui peut durer longtemps.

Il y a un écart déclaré dans les propriétés du symbole. Il doit être saisi initialement par une entrée. Et si elle n'est pas saisie, elle est reçue. Et si nous obtenons un écart plus important, nous le considérons à tort comme une moyenne. Nous avons besoin de la valeur moyenne dans une plage assez courte pour détecter le changement.

S'il existe un écart intraday, nous le comparons à chaque tick et obtenons la valeur moyenne nécessaire. La question est que nous ne pouvons pas calculer la moyenne sans nous souvenir des valeurs intermédiaires. J'utilise ainsi, je mémorise toutes les valeurs, et quand j'obtiens la dernière valeur plus un, je l'ajoute à la somme et soustrait la première, et je décale la numérotation (dans le tableau A(n) = A(n+1)). C'est moins cher que de faire monter le compteur à des valeurs énormes. Et jusqu'à 10 - 20 valeurs, j'utilise des variables.

Je ne sais pas ce qui est le plus cher :SymbolInfoInteger ou la différence entre Bid et Ask).

 
Valeriy Yastremskiy:

La logique n'est pas bonne. Pourquoi exactement une moyenne de 50 ticks avec un compteur à longmax, qui peut durer longtemps.

Il y a un écart déclaré dans les propriétés du symbole. Il doit être saisi initialement par une entrée. Et si elle n'est pas saisie, elle est reçue. Et si nous obtenons un écart plus important, nous le considérons à tort comme une moyenne. Nous avons besoin de la valeur moyenne dans une plage assez courte pour détecter le changement.

S'il existe un écart intraday, nous le comparons à chaque tick et obtenons la valeur moyenne nécessaire. La question est que nous ne pouvons pas calculer la moyenne sans nous souvenir des valeurs intermédiaires. J'utilise ainsi, je mémorise toutes les valeurs, et quand j'obtiens la dernière valeur plus un, je l'ajoute à la somme et soustrait la première, et je décale la numérotation (dans le tableau A(n) = A(n+1)). C'est moins cher que de faire monter le compteur à des valeurs énormes. Et jusqu'à 10 - 20 valeurs, j'utilise des variables.

Je ne sais pas ce qui est le plus cher (SymbolInfoInteger ou différence entre Bid et Ask).

Le mot "flottant", c'est ça le problème.


 
Vitaly Muzichenko:

Juste le mot "Flottant", c'est ça le défi.


s'est un peu emballé). Ensuite, la logique de croire que les premières valeurs sont correctes. Ou bien attendez 10 minutes, recueillez des statistiques sur la régularité des changements d'écart pendant cette période, trouvez le tracé minimum moyen de 50 ou 100 ticks, et prenez-le comme moyenne. Contrôlez l'heure de démarrage, afin qu'elle ne tombe pas pendant les périodes où les échanges ne fonctionnent pas. Si vous voulez une protection complète contre un fou aussi)

 
Valeriy Yastremskiy:

(J'étais un peu excité.) Ensuite, la logique de croire que les premières valeurs sont correctes. Ou bien attendez 10 minutes, recueillez des statistiques sur la régularité de la variation de l'écart pendant cette période, trouvez le tracé minimum moyen de 50 ou 100 ticks, et prenez-le comme moyenne. Contrôlez l'heure de démarrage, de manière à ce qu'elle ne tombe pas au moment où les échanges ne fonctionnent pas. Si sur la protection complète d'un fou aussi).

Cela devrait être évité d'une manière ou d'une autre.

L'algorithme fonctionne, si seulement nous n'exécutons pas le conseiller expert lors du roulement, et il fonctionnera après le week-end.

 
Vitaly Muzichenko:

Cela devrait être évité d'une manière ou d'une autre.

L'algorithme fonctionne, tant que nous n'exécutons pas le conseiller expert sur un roulement, ce qui se produira tout le temps après le week-end.

Un contrôle, qui devrait être évité de toute façon, devrait être remplacé par quelque chose. Le temps entre les tics. Pas trop cher. Et si le temps entre les tics est supérieur à 10 secondes, quelque chose ne va pas.

 
Vitaly Muzichenko:

Cela devrait être évité d'une manière ou d'une autre.

L'algorithme fonctionne, tant que nous n'exécutons pas le conseiller expert sur un roulement, ce qui se produira tout le temps après le week-end.

Nous devons créer des paramètres de temps distincts pour le roulement : début/fin.
Et ne rien faire à ce moment-là (sauf le commentaire "roulement, attendre").

 
Taras Slobodyanik:

Vous devez créer des paramètres temporels distincts pour le roulement : début/fin.
Et ne rien faire à ce moment-là (sauf le commentaire "roulement, attendre").

Il y avait un paramètre "work by time", j'ai changé le deal et commencé les hiboux - le deal a été ouvert sur le rollover.

L'heure de transaction s'est avérée être -1 gmt, au lieu des +2gmt habituels.

C'est pourquoi il y avait un grand désir de s'éloigner de la prescription du temps.

 
Vitaly Muzichenko:

Il y avait un paramètre "Work by time", j'ai changé la transaction et lancé les hiboux - la transaction a été ouverte au moment de la reconduction.

L'heure de transaction s'est avérée être -1 gmt, au lieu des +2gmt habituels.

C'est pourquoi j'ai un grand désir de m'éloigner de la prescription du temps.

Est-ce que remplacer la "valeur temporelle" par la différence entre le temps entrant (nouveau) et le dernier temps calculé fonctionnerait ?

C'est-à-dire que nous saurons que le nouveau temps est arrivé :

-Du nouveau jour

-d'une nouvelle semaine

-ou avec une différence supérieure à la valeur spécifiée.

 
Vitaly Muzichenko:

Il y avait un paramètre "Work by time", j'ai changé la transaction et lancé les hiboux - la transaction a été ouverte au moment de la reconduction.

L'heure de transaction s'est avérée être -1 gmt, au lieu des +2gmt habituels.

C'est pourquoi il y avait un grand désir de s'éloigner de la prescription du temps.

Faire si le début de la semaine "rollover, en attente" et peu importe l'heure du serveur
Raison: