Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1896

 
Vitaly Muzichenko #:

Non riesco a capire come risolvere il problema

Ho bisogno di un grafico di tick, cioè un tick venuto - sposta il buffer di uno e disegna

Abbiamo bisogno di disegnare 60 ultimi tick, cioè 60 barre.

---

Questo dovrebbe essere fatto come è implementato nella finestra "Ticky


Si tratta di una linea, non di barre.

Il codice disegna le barre in una nuova finestra. Può aiutare.

File:
SaveTicks.mq4  6 kb
 
Vitaly Muzichenko #:

Non riesco a capire come risolvere il problema

Ho bisogno di un grafico a tick, cioè un tick venuto - sposta il buffer di uno e disegna

Abbiamo bisogno di disegnare 60 ultimi tick, cioè 60 barre.

---

Dovrebbe essere fatto come è implementato nella finestra "ticks


Per risolvere questo problema, abbiamo bisogno di un altro array. Può essere di una lunghezza fissa, per esempio 60. Dovrebbe essere riempito di tick, ogni volta spostando i dati di 1 con l'aiuto del ciclo. Dopo che ogni tick è stato scritto, questo array dovrebbe essere copiato nell'array Buffer, e i suoi dati saranno visualizzati nel grafico.

 
Valeriy Yastremskiy #:

Non sono bar, è una linea.

Il codice disegna le barre in una nuova finestra. Questo potrebbe aiutare.

Non sono riuscito a tirar fuori niente. Forse lo sto guardando dalla parte sbagliata?


Mihail Matkovskij #:

Avete bisogno di un'altra matrice per risolvere questo problema. Può essere di una lunghezza fissa, per esempio 60. Dovrebbe essere riempito di tick, ogni volta spostando i dati di 1 con l'aiuto di un ciclo. Dopo che ogni tick è stato scritto, questo array dovrebbe essere copiato nell'array Buffer e i suoi dati saranno visualizzati nel grafico.

Non riesco a capire come fare il cambio.

Se non ti dispiace, mostrami il codice

 
Vitaly Muzichenko #:

Non sono riuscito a tirar fuori niente. Forse lo sto guardando dalla parte sbagliata.


Non riesco a capire come fare un cambio.

Se non ti dispiace, potresti mostrarmi il codice

A[0]=Bid;

for(i=0;i<60;i++){A[i+1]=A[i]}

 
Valeriy Yastremskiy #:

A[0]=Bid;

for(i=0;i<60;i++){A[i+1]=A[i]}

L'ho fatto, funziona.

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
  if(prev_calculated==0) {
    ArrayInitialize(Buffer1,EMPTY_VALUE);
  }
  double b=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  Buffer1[0]=b;
  for(int j=10; j>0; j--) {
    Buffer1[j]=Buffer1[j-1];
  }
  return(rates_total);
}

---

Qualcosa mi dice che posso fare a meno del loop.

È così?

 
Vitaly Muzichenko #:

L'ho fatto, funziona.

---

Qualcosa mi dice che puoi fare a meno del ciclo.

È vero?

Nelle serie temporali, questo ciclo è nascosto. non fa differenza da quale lato muoversi. per me ha più senso da 0. Non ho visto alcuna funzione di spostamento in MKL. È un lavoro di indice. È il primo ad entrare, l'ultimo ad uscire. Lo fa in python. Non sembra esistere in MCL.

 

Cosa c'è che non va?

Inizia a funzionare bene, ma su ogni nuova barra c'è un offset e fuori portata.

Come evitarlo?

---

P.S. Penso che sia tutto, funziona bene, ho aggiunto

  if(rates_total-prev_calculated==1) {
    Buffer1[H+1]=EMPTY_VALUE;
  }
 
Vitaly Muzichenko #:

Cosa c'è che non va?

Inizia a funzionare bene, ma su ogni nuova barra c'è un offset e fuori portata.

Come evitarlo?

---

P.S. Sembra funzionare bene, aggiunto

Sul lato più piccolo dell'indice controlla se è inferiore a zero, sul lato più grande, se è superiore alla dimensionalità dell'array. L'azzeramento dell'array o dell'ultimo valore non è logico ad ogni tick.

 
Valeriy Yastremskiy #:

sul lato minore dell'indice controlla se è inferiore a zero, sul lato maggiore, se è superiore alla dimensione dell'array. Azzerare l'array o l'ultimo valore non è logico.

Un array per tutta la storia disponibile, non ne ho bisogno.

Ho letteralmente bisogno di 50-100 barre.

Come questo


 

Buon pomeriggio.

Sto visualizzando il valore del frattale giornaliero sotto forma del suo valore o di una linea verticale. La linea non viene visualizzata e il valore è 0.

Ecco un pezzo di codice

 double FractalDayUpper = iFractals(Symbol(), PERIOD_D1, MODE_UPPER, 0);
   ObjectCreate("signal00",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal00",OBJPROP_XDISTANCE,600);
   ObjectSet("signal00",OBJPROP_YDISTANCE,100);
   ObjectSetText("signal00",DoubleToString(FractalDayUpper,5),18,"Times New Roman", clrRed);


Per favore, ditemi cosa c'è che non va.