Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 989

 

Hallo. Bitte zeigen Sie mir, wo der Fehler liegt.

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:

Hallo. Könnten Sie mir bitte zeigen, wo der Fehler liegt?

irgendwo im Code

 
Vladimir Pastushak:

irgendwo im Code.

Sehr witzig.

Dies ist BuySellVolume. Das Gesamtvolumen ist nicht gleich der Summe aus Kauf und Verkauf, sondern nur geringfügig höher.

 

Was kann das "inf" im Indikator der MLQ5 bedeuten?

Dies ist das erste Mal, dass ich auf dieses Problem stoße, und ich habe bei der Suche in der Dokumentation nichts gefunden

 
Alexandr Sokolov:

Was kann das "inf" im Indikator der MLQ5 bedeuten?

Dies ist das erste Mal, dass ich auf dieses Problem gestoßen bin, und ich konnte in der Dokumentation nichts dazu finden

Keine gute Suche: Eine INF-Suche liefert mehrere Ergebnisse.

Schauen Sie zum Beispiel in MathLog

Rückgabewert

Der natürliche Logarithmus des Wertes im Erfolgsfall. Wenn val negativ ist, gibt die Funktion NaN (undefinierter Wert) zurück. Wenn der Wert 0 ist,gibt die FunktionINF (unendlich) zurück.


Dieses Ergebnis bedeutet: der Code hat einen Fehler im Algorithmus der Wertberechnung (z.B. wir vergessen, Variablen zu initialisieren - wir hoffen auf das Schlimmste, bei Divisionsoperationen denken wir nicht ...).

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

Keine gute Suche: Eine INF-Suche liefert mehrere Ergebnisse.

Schauen Sie zum Beispiel in MathLog

Zurückgegebener Wert

Der natürliche Logarithmus des Wertes im Erfolgsfall. Wenn val negativ ist, gibt die Funktion NaN (undefinierter Wert) zurück. Wenn der Wert 0 ist, gibt die Funktion INF (unendlich) zurück.


Dieses Ergebnis bedeutet: Der Code enthält einen Fehler im Algorithmus der Wertberechnung (z.B. wir vergessen, Variablen zu initialisieren - wir hoffen auf das Schlimmste, bei Divisionsoperationen denken wir nicht nach ...).

Das ist alles, was ich in der Suche >>> Dokumentation gefunden habe (aber ich habe nicht jede Beschreibung gelesen, ich finde sie immer über den Titel - Gewohnheit)


Über die Initialisierung von Variablen (ich habe Sie entweder falsch verstanden oder zum ersten Mal davon gehört), zum Beispiel:

double a = 0, b;

... Reicht das nicht aus? Normalerweise deklariere ich Variablen und verwende

 
Alexandr Sokolov:

Hier ist alles, was ich in meiner Suche >>> Dokumentation gesehen habe (aber ich habe nicht die Beschreibung von jedem gelesen, ich finde es immer durch den Titel - Gewohnheit)

***

Schlechte Angewohnheit.


Alexandr Sokolov:


... ist das nicht genug? Normalerweise deklariere ich Variablen und verwende

Und hier kommt der "schwarze Schwan" - die Variable b ist nicht initialisiert, sie kann jeden beliebigen Unsinn enthalten.

 
Alexandr Sokolov:

Was kann das "inf" im Indikator der MLQ5 bedeuten?

Dies ist das erste Mal, dass ich auf dieses Problem gestoßen bin, und ich konnte in der Dokumentation nichts dazu finden

Ich habe herausgefunden, was das Problem ist!

Wenn Sie die Puffer EMPTY_VALUE initialisiert haben

ArrayInitialize(Bufer,EMPTY_VALUE);

... dann kopiert oder berechnet man in weiteren Berechnungen eine unzureichende Anzahl von Zeitreihen und multipliziert dann jeden Wert mit EMPTY_VALUE aus dem Puffer - man erhält inf


In diesem Fall habe ich nur die Multiplikation mit EMPTY_VALUE durchgeführt, was zu inf


 
Vladimir Karputov:

Dankeschön

 
Alexandr Sokolov:

Ich verstehe, was das Problem ist!

Wenn Sie die EMPTY_VALUE-Puffer initialisiert haben

... dann haben Sie in weiteren Berechnungen eine unzureichende Anzahl von Zeitreihen kopiert oder berechnet und dann jeden Wert mit EMPTY_VALUE aus dem Puffer multipliziert - dann erhalten Sie inf


Hier habe ich gerade aleriert, und nur wenn ich mit EMPTY_VALUE multipliziere, wird es inf


Es sieht so aus, als hätten Sie den Grund gefunden. Wenn also ein Puffer mit EMPTY_VALUE initialisiert wird, sollte bei arithmetischen Operationen zuerst geprüft werden, ob EMPTY_VALUE zufällig im Puffer an diesem Index vorhanden ist.