Analogue à iBarShift - page 10

 
Aleksey Vyazmikin:

Tu veux dire que ça passe lundi ? C'est ce que je veux... :)

Oui, en fait, c'est un comportement étrange pour une fonction standard. Après tout, nous ajustons les valeurs à sa "référence".

La fonction standard iBarShift de MQL4 renvoie le numéro de la barre de gauche (c'est-à-dire le samedi dans ce cas), et iBarShift3 renvoie le numéro de la barre de droite (c'est-à-dire le lundi) lorsque l'heure demandée atteint le trou, ce qui est plus logique.

 
Nikolai Semko:

Ouais, eh bien, c'est en fait un comportement étrange pour une fonction standard. Après tout, il s'agit exactement d'adapter des valeurs à son "repère".

La fonction standard iBarShift de MQL4, lorsque l'heure demandée atteint le trou, renvoie le numéro de la barre de gauche (c'est-à-dire samedi dans ce cas), et iBarShift3 renvoie le numéro de la barre de droite du trou (c'est-à-dire lundi), ce qui est plus logique.

Et que se passera-t-il si nous sommes maintenant dans le trou (temps réel) et que nous nous attendons à recevoir des informations sur le bar, quel indice nous sera proposé ? Je suppose que ce sera "1" dans MQL4, alors que pour le troisième algorithme ce sera "0", ou non ?

Je pense que la fonction MQL4 a un message "ne pas regarder en avant", ce qui est vrai dans une certaine mesure - tout dépend de la tâche.

 

Nikolai Semko :

...

Je n'ai qu'un seul reproche à faire à votre option : elle est très compliquée et lente.

Quand je l'ai postée (il y a 4 ans), le but principal était la précision (encore), parce que toutes les autres versions que j'ai trouvées étaient fausses (par rapport à la version mql4).

Je sais que ça peut être plus rapide.

Essayez de prouver le contraire. Trouvez une combinaison unique de paramètres lorsque votre fonction et la mienne afficheront des valeurs différentes.

Dans la plupart des cas, la fonction renvoie un résultat erroné.

Mais je n'y ai pas implémenté le dernier paramètre exact, car je ne comprends pas pourquoi il est nécessaire. Personnellement, je n'en ai jamais eu besoin.

L'exigence est d'avoir la version mql4 SEULEMENT.

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Analogue à iBarShift

Alain Verleyen, 2018.04.05 00:18

En fait, il montre seulement le contraire, ma version est la seule qui soit correcte. (Et le iBarShift1 original de ce code est correct).

Ma version a été conçue comme une fonction autonome, tout comme mql4 iBarShift .


PS : Est-il nécessaire de poster la version anglaise ou la traduction russe est correcte ?

 
vladevgeniy:
Pourquoi n'essayez-vous pas ma fonction ? Il existe une solution qui ajuste le début et la fin des barres dans le temps. Il semble tout calculer correctement. Et il est plus rapide en temps que la version 3 de votre plus rapide. Ou la branche est plus importante ?) Ou y a-t-il une erreur là aussi ?) Je l'utilise depuis longtemps....

Où se trouve-t-elle, votre fonction, pour l'essayer ?

 
Aleksey Vyazmikin:

Et que se passe-t-il si nous sommes maintenant dans un trou (temps réel) et que nous nous attendons à obtenir des informations sur un bar, quel indice nous sera proposé ? Je suppose que ce sera "1" dans MQL4, alors que pour le troisième algorithme ce sera "0", ou non ?

Je pense que la fonction MQL4 comporte le message "ne pas regarder en avant", ce qui est vrai dans une certaine mesure - tout dépend du problème.

Non. Le premier est zéro. En temps réel, cela fonctionne de la même manière.

 
Aleksey Vyazmikin:

Et où se trouve-t-elle, votre fonction, pour l'essayer ?

C'est à la fin de la page 7).

int iBarShift(string symbol, ENUM_TIMEFRAMES timeframe, datetime time){
datetime t1 = TimeCurrent()+10000000;
int ps = PeriodSeconds(timeframe);
double div = time/(double)ps;
double mant = div - MathFloor(div);
int ret = Bars(symbol, timeframe, (datetime)(time-(ps*mant)), t1)-1;
return(ret);
}

Ça pourrait être plus pratique.

 
vladevgeniy:
Pourquoi n'essayez-vous pas ma fonction ? J'ai une solution qui compense le début et la fin des mesures dans le temps. Il semble tout calculer correctement. Et il est plus rapide en temps que la 3ème version de votre plus rapide. Ou la branche est plus importante ?) Ou y a-t-il une erreur là aussi ?) Je l'utilise depuis longtemps....

C'est drôle ))))

Voici votre fonction :

int iBarShift4(string symbol,ENUM_TIMEFRAMES timeframe,datetime time)
  {
   datetime t1=TimeCurrent()+10000000;
   int ps=PeriodSeconds(timeframe);
   double div=time/(double)ps;
   double mant=div-MathFloor(div);
   int ret=Bars(symbol,timeframe,(datetime)(time-(ps*mant)),t1)-1;
   return(ret);
  }

Puisque vous ne connaissez pas certains opérateurs mathématiques, comme le % - le reste d'une division

Simplifions un peu votre fonction.

Ça a marché :

int iBarShift4(string symbol,ENUM_TIMEFRAMES timeframe,datetime time)
  {
   time-=time%PeriodSeconds(timeframe);
   return(Bars(symbol,timeframe,time,UINT_MAX)-1);
  }

Et voici ma fonction :

int iBarShift1(const string Symb,const ENUM_TIMEFRAMES TimeFrame,datetime time)
  {
   return(Bars(Symb,TimeFrame,time+1,UINT_MAX));
  }

Très similaire. Vraiment ?

Seulement le tien fait tout de travers et est plus lent.

Vous pouvez l'essayer avec ce script dans MQL4.

Dossiers :
 
Nikolai Semko:

Non. Le premier est zéro. Cela fonctionne de la même manière en temps réel.

OK - juste un algorithme me montrant "-1" sur les données futures aujourd'hui....

 
Nikolai Semko:

C'est drôle ))))


Ouais, eh bien, ça donne des incohérences.) Je vais le déterrer, ok.

 
vladevgeniy:

Eh bien, oui, il donne des incohérences). Je vais le déterrer, ok.

J'ai moi-même tourné en rond. Seulement maintenant, j'ai trouvé la solution la plus courte.
Raison: