Wert des vorherigen Ticks - Seite 3

 
PreviousTick = CurrentTick;

CurrentTick =   Bid;

if ( CurrentTick < PreviousTick )

       {

difference = PreviousTick - Bid;

TotalDescent = TotalDescent + difference;

descentarray[0]=TotalDescent;

       }


dieser Code macht mt4 Chart zum Absturz. was ist falsch mit ihm?

difference, TotalDescent sind als double deklariert, mit einem Startwert von 0. descentarray ist als 1d Array ohne maximale Anzahl von Elementen deklariert. es gibt eine if-Anweisung, um previousTick = 0 Fall herauszufiltern, und die TotalAscent Gegenstück funktioniert gut.

es läuft, bis der erste Dekrement-Tick kommt, dann stürzt es ab. gibt es etwas, das ich übersehen habe?

 

Bitte verwenden Sie die Schaltfläche </>, um Ihren Code einzufügen.


 
J.P.Satrio:


dieser Code macht mt4 Chart zum Absturz. was ist falsch mit ihm?

difference, TotalDescent sind als double deklariert, mit einem Startwert von 0. descentarray ist als 1d Array ohne maximale Anzahl von Elementen deklariert. es gibt eine if-Anweisung, um previousTick = 0 Fall herauszufiltern, und die TotalAscent Gegenstück funktioniert gut.

es läuft, bis der erste Dekrement-Tick kommt, dann stürzt es ab. gibt es etwas, das ich übersehen habe?

Haben Sie die Größe des Arrays?

 
Keith Watford:

Haben Sie die Größe des Arrays festgelegt?

Nope, da im unsicher, welche Größe wäre notwendig sein. Wie ich schon sagte, die Aufstiegsseite funktioniert gut mit dem Array ohne eine feste Größe eingestellt.
 
J.P.Satrio:
Nein, da ich nicht sicher bin, welche Größe erforderlich wäre. Wie ich schon sagte, funktioniert die Aufstiegsseite gut mit dem Array ohne eine feste Größe eingestellt.

Sie müssen die Größe des Arrays bestimmen. Wenn Sie nicht sicher sind, welche Größe benötigt wird, erhöhen Sie jedes Mal, wenn Sie ein zusätzliches Element hinzufügen möchten, die Größe um eins.

 
Keith Watford:

Sie müssen die Größe des Arrays bestimmen. Wenn Sie sich nicht sicher sind, wie groß das Array sein muss, erhöhen Sie die Größe jedes Mal um ein Element, wenn Sie ein zusätzliches Element hinzufügen möchten.

Ich werde es auf jeden Fall ausprobieren, danke. Allerdings habe ich viele Fälle gesehen, in denen die Programmierer keine Größe für die Arrays festgelegt haben. Ich bin mir immer noch nicht sicher, warum dieser Fall anders ist.
Wenn ich bei jedem Tick prüfen müsste, ob mein Array vergrößert und verkleinert werden muss, würde das die Sache viel komplizierter machen, also werde ich wohl eine Größe festlegen, die groß genug ist, um die Datenmenge zu verwalten. Was passiert, wenn ein Array voll ist? (Ist mir noch nie passiert) wieder abstürzen?
 
J.P.Satrio:
Ich werde es auf jeden Fall versuchen, danke. Ich habe jedoch viele Fälle gesehen, in denen die Programmierer keine Größe für die Arrays festgelegt haben. Ich bin mir immer noch nicht sicher, warum dieser Fall anders ist.
Wenn id haben zu überprüfen, ob es eine Notwendigkeit, zu erhöhen und die Größe meiner Array auf jeden Tick, die es viel komplexer machen würde, so denke ich im gonna eine Größe groß genug, um die Menge der Daten zu verwalten setzen. Was passiert, wenn ein Array voll ist? (Ist mir noch nie passiert) wieder abstürzen?

Ich glaube nicht, dass Sie jemals einen Fall sehen werden, in dem ein Array nicht groß genug ist. Wenn Sie versuchen, einen Wert in ein Element einzugeben, das nicht existiert, wird der Code abstürzen.

 
Keith Watford:

Ich glaube nicht, dass Sie jemals einen Fall sehen werden, in dem ein Array nicht dimensioniert ist. Wenn Sie versuchen, einen Wert in ein Element zu setzen, das nicht existiert, wird der Code abstürzen.

Das war's. Vielen Dank!
 

Dieser Thread hat mir geholfen, einen Code zu entwickeln, der mir die Differenz zwischen dem vorherigen Ask und dem aktuellen Ask anzeigt. Wenn die Differenz Null ist, wird 0,0 gedruckt, aber wenn die Differenz nicht Null ist, gibt es zu viele Ziffern, z. B. 1,000000000006551e-05. Ist mit meinem Code etwas nicht in Ordnung oder gibt es eine Möglichkeit, dies zu korrigieren? Das Symbol ist EURUSD, falls das eine Rolle spielt. Dies ist mein erster mql-Code, also entschuldige ich mich im Voraus für die Unzulänglichkeiten. Vielen Dank!

/* Global Variables */
double ask_prev;
double ask_curr;
double ask_diff;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

   MqlTick tick_curr;
//---
   if(SymbolInfoTick(Symbol(),tick_curr))
     {
      ask_curr = tick_curr.ask;
      ask_diff = ask_curr - ask_prev;
      Print(ask_diff);
      ask_prev = tick_curr.ask;
     }
   else Print("SymbolInfoTick() failed, error = ",GetLastError());
  }
//+------------------------------------------------------------------+
 
rdone:

Dieser Thread hat mir geholfen, einen Code zu entwickeln, der mir die Differenz zwischen dem vorherigen Ask und dem aktuellen Ask anzeigt. Wenn die Differenz Null ist, wird 0,0 gedruckt, aber wenn die Differenz nicht Null ist, gibt es zu viele Ziffern, z. B. 1,000000000006551e-05. Ist mit meinem Code etwas nicht in Ordnung oder gibt es eine Möglichkeit, dies zu korrigieren? Das Symbol ist EURUSD, falls das eine Rolle spielt. Dies ist mein erster mql-Code, also entschuldige ich mich im Voraus für die Unzulänglichkeiten. Vielen Dank!

Warum nicht einfach...

MqlTick tick_curr, tick_last;

void OnTick()
{
   tick_last = tick_curr;
   SymbolInfoTick(Symbol(),tick_curr);
}