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

 

Bonjour. S'il vous plaît, montrez-moi où se trouve l'erreur.

void OnStart()
  {
datetime current_time=TimeCurrent();
//datetime current_time=D'2019.10.18 19:55:00';
datetime our_time=(current_time-60)-MathMod((current_time-60),60);
datetime t1=our_time;
datetime t2=our_time+60;
PrintFormat("current_time=%s",TimeToString(current_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS));
PrintFormat("our_time=%s",TimeToString(our_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS));
string stock="MSFT";
MqlTick tick_array[];// массив для приема тиков
int received=CopyTicksRange(stock, tick_array, COPY_TICKS_TRADE, t1*1000, t2*1000);
Print(stock," Всего тиков ",received);
Print(tick_array[0].time,": Last = ",tick_array[0].last,"  Volume = ",tick_array[0].volume );
ulong total=tick_array[0].volume; ulong buy=tick_array[0].volume; ulong sell=0; bool flag='b';
int ticks=ArraySize(tick_array); double pprice=tick_array[0].last; int i=1;
while(i<ticks)
      { 
        total=total+tick_array[i].volume;//{считаем общий объем}
        if (pprice<tick_array[i].last)  flag='b';//{если пред.тик меньше зн.'b'}
        if (pprice<=tick_array[i].last)
            if (flag='b')
                buy=buy+tick_array[i].volume;//{считаем,что сделка по BID} 
        if (pprice>tick_array[i].last)  flag='s';//{если пред.тик больше зн.'s'} 
        if (pprice>=tick_array[i].last)
            if (flag='s')
               sell=sell+tick_array[i].volume;//{считаем,что сделка по ASK}
        pprice=tick_array[i].last;//{ставим счетчик на последн. тик}
        i=i+1; 
      }               
Print (total," ",buy," ",sell);       
  }
 
werter:

Bonjour. Pourriez-vous me montrer où se trouve l'erreur ?

quelque part dans le code

 
Vladimir Pastushak:

quelque part dans le code.

Hilarant.

Il s'agit de BuySellVolume. Le volume total n'est pas égal à la somme des achats et des ventes, mais seulement légèrement supérieur.

 

Que peut signifier le "inf" dans l'indicateur du MLQ5 ?

C'est la première fois que je rencontre ce problème et je n'ai rien trouvé dans la recherche de documentation.

 
Alexandr Sokolov:

Que peut signifier le "inf" dans l'indicateur du MLQ5 ?

C'est la première fois que je rencontre ce problème et je n'ai rien trouvé dans la documentation de recherche.

Pas une bonne recherche : une recherche INF produit plusieurs résultats.

Par exemple, regardez dans MathLog

Valeur de retour

Le logarithme naturel de la valeur en cas de succès. Si val est négatif, la fonction renvoie NaN (valeur non définie). Si la valeur est 0, la fonctionrenvoie INF (infini ).


Ce résultat signifie : le code a une erreur dans l'algorithme de calcul des valeurs (par exemple on oublie d'initialiser les variables - on espère le pire, dans les opérations de division on ne pense pas ...).

Поиск - MQL5.community
Поиск - MQL5.community
  • www.mql5.com
Поиск выполняется с учетом морфологии и без учета регистра. Все буквы, независимо от того, как они введены, будут рассматриваться как строчные. По умолчанию наш поиск показывает страницы...
 
Vladimir Karputov:

Pas une bonne recherche : une recherche INF produit plusieurs résultats.

Par exemple, regardez dans MathLog

Valeur retournée

Le logarithme naturel de la valeur en cas de succès. Si val est négatif, la fonction renvoie NaN (valeur non définie). Si la valeur est 0, la fonction renvoie INF (infini ).


Ce résultat signifie : le code contient une erreur dans l'algorithme de calcul des valeurs (par exemple on oublie d'initialiser les variables - on espère le pire, dans les opérations de division on ne pense pas...).

C'est tout ce que j'ai trouvé dans recherche >>> documentation (mais je n'ai pas lu toutes les descriptions, je les trouve toujours par titre - habitude).


À propos de l'initialisation des variables (soit je vous ai mal compris, soit j'en ai entendu parler pour la première fois), par exemple :

double a = 0, b;

... Ce n'est pas suffisant ? En général, je déclare des variables et j'utilise

 
Alexandr Sokolov:

Voici tout ce que j'ai vu dans ma recherche >>> documentation (mais je n'ai pas lu la description de chacune, je la trouve toujours par le titre - habitude)

***

Mauvaise habitude.


Alexandr Sokolov:


... Ce n'est pas suffisant ? En général, je déclare des variables et j'utilise

Et voici le "cygne noir" - la variable b n'est pas initialisée, elle peut contenir n'importe quoi.

 
Alexandr Sokolov:

Que peut signifier le "inf" dans l'indicateur du MLQ5 ?

C'est la première fois que je rencontre ce problème et je n'ai rien trouvé dans la documentation de recherche.

J'ai trouvé quel est le problème !

Si vous avez initialisé les tampons EMPTY_VALUE

ArrayInitialize(Bufer,EMPTY_VALUE);

... ensuite, dans les calculs ultérieurs, vous avez copié ou calculé un nombre insuffisant de séries temporelles, puis vous multipliez toute valeur par EMPTY_VALUE du tampon - vous obtenez inf


Ici, je viens d'alerter, et seule la multiplication par EMPTY_VALUE donne des résultats inf.


 
Vladimir Karputov:

Merci.

 
Alexandr Sokolov:

Je vois où est le problème !

Si vous avez initialisé les tampons EMPTY_VALUE

... ensuite, dans les calculs ultérieurs, vous avez copié ou calculé un nombre insuffisant de séries temporelles, puis multiplié toute valeur par EMPTY_VALUE du tampon - vous obtenez alors une info


Ici, je viens d'alerter, et ce n'est qu'en multipliant par EMPTY_VALUE qu'on obtient inf


On dirait que vous avez trouvé la raison. Ainsi, lors de l'initialisation d'un tampon avec EMPTY_VALUE, pendant les opérations arithmétiques, nous devrions d'abord vérifier "est-ce que EMPTY_VALUE est accidentellement présent dans le tampon à cet indice ?