Valore della zecca precedente - pagina 3

 
PreviousTick = CurrentTick;

CurrentTick =   Bid;

if ( CurrentTick < PreviousTick )

       {

difference = PreviousTick - Bid;

TotalDescent = TotalDescent + difference;

descentarray[0]=TotalDescent;

       }


questo codice fa crashare il grafico di mt4. cosa c'è di sbagliato?

differenza, TotalDescent sono dichiarati come doppio, con un valore iniziale di 0. descentarray è dichiarato come un array 1d senza un numero massimo di elementi. c'è una dichiarazione if per filtrare il caso previousTick = 0, e la controparte TotalAscent funziona bene.

Funziona fino al primo tick di decremento, poi si blocca. c'è qualcosa che mi è sfuggito?

 

Usa il pulsante </> per inserire il tuo codice.


 
J.P.Satrio:


questo codice fa crashare il grafico di mt4. cosa c'è di sbagliato?

differenza, TotalDescent sono dichiarati come doppio, con un valore iniziale di 0. descentarray è dichiarato come un array 1d senza un numero massimo di elementi. c'è una dichiarazione if per filtrare il caso previousTick = 0, e la controparte TotalAscent funziona bene.

Funziona fino al primo tick di decremento, poi si blocca. c'è qualcosa che mi è sfuggito?

Si dimensiona l'array?

 
Keith Watford:

Dimensionate l'array?

No, dato che non sono sicuro della dimensione necessaria. Come ho detto, il lato ascendente funziona bene con l'array senza una dimensione fissa impostata.
 
J.P.Satrio:
No, dato che non sono sicuro della dimensione necessaria. Come ho detto, il lato ascendente funziona bene con l'array senza una dimensione fissa impostata.

Dovete dimensionare l'array. Se non siete sicuri della dimensione necessaria, ogni volta che volete dargli un elemento in più, aumentate la dimensione di uno.

 
Keith Watford:

Dovete dimensionare l'array. Se non siete sicuri della dimensione necessaria, ogni volta che volete dargli un elemento in più, aumentate la dimensione di uno.

Lo proverò di sicuro, grazie. Tuttavia, ho visto molti casi in cui i programmatori non hanno impostato una dimensione per gli array. Non ho ancora capito perché questo caso è diverso.
Se dovessi controllare se c'è la necessità di aumentare e ridimensionare il mio array ad ogni tick, ciò lo renderebbe molto più complesso, quindi penso che imposterò una dimensione abbastanza grande da gestire la quantità di dati. Cosa succede se un array è pieno? (Non mi è mai successo) si blocca di nuovo?
 
J.P.Satrio:
Lo proverò di sicuro, grazie. Tuttavia, ho visto molti casi in cui i codificatori non hanno impostato una dimensione per gli array. Non ho ancora capito perché questo caso è diverso.
Se dovessi controllare se c'è la necessità di aumentare e ridimensionare il mio array ad ogni tick, ciò lo renderebbe molto più complesso, quindi penso che imposterò una dimensione abbastanza grande per gestire la quantità di dati. Cosa succede se un array è pieno? (Non mi è mai successo) si blocca di nuovo?

Non credo che si vedrà mai un caso in cui un array non è dimensionato. Se cercate di mettere un valore in un elemento che non esiste, il codice andrà in crash.

 
Keith Watford:

Non credo che si vedrà mai un caso in cui un array non è dimensionato. Se cercate di mettere un valore in un elemento che non esiste, il codice andrà in crash.

Questo ha funzionato. Grazie!
 

Questo thread mi ha aiutato a sviluppare un codice che mi dirà la differenza tra la precedente Ask e l'attuale Ask. Se la differenza è zero allora stampa 0.0, ma se la differenza non è zero allora ci sono troppe cifre, come 1.000000000006551e-05. C'è qualcosa di sbagliato nel mio codice o c'è un modo per correggerlo? Il simbolo è EURUSD, se questo conta. Questo è il mio primo codice mql quindi mi scuso in anticipo per i difetti. Grazie!

/* 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:

Questo thread mi ha aiutato a sviluppare un codice che mi dirà la differenza tra la precedente Ask e l'attuale Ask. Se la differenza è zero allora stampa 0.0, ma se la differenza non è zero allora ci sono troppe cifre, come 1.000000000006551e-05. C'è qualcosa di sbagliato nel mio codice o c'è un modo per correggerlo? Il simbolo è EURUSD, se questo conta. Questo è il mio primo codice mql quindi mi scuso in anticipo per i difetti. Grazie!

Perché non solo...

MqlTick tick_curr, tick_last;

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