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

 
Valeriy Yastremskiy #:

Sì, nel mio caso devi iniziare con la prima, non con la barra zero) è un buon punto.

Perché la barra zero è spostata insieme a tutte le altre barre a sinistra. E se spostiamo tutte le barre tranne lo zero, otterremo due valori uguali per il primo e il secondo indice.

P.S. Se spostiamo i dati, una cella libera deve sempre essere sovrascritta. Altrimenti, ci saranno due valori identici in una riga.

 
Valeriy Yastremskiy #:

ZZZY sovrascrivendo il valore di zero prima dello spostamento, si perde il valore dell'indice zero.

Questo è esattamente il mio punto!

 
Valeriy Yastremskiy #:

Cos'è un tampone ad anello in un µl

Qualcosa come

static int head=0;
for(i=head,count=0;count<ArraySize(A);i++,count++)
  {
   if(i>=ArraySize(A))i=0;
   DoSomething(A[i]);
  }

o anche

static int head=0;
for(i=head,count=0;count<ArraySize(A);count++)
  {
   if(++i>=ArraySize(A))i=0;
   DoSomething(A[i]);
  }
 
JRandomTrader #:

Qualcosa come.

o anche

spostamento dell'indice nella matrice in µl. Anche se dovrebbe funzionare. E a proposito, il peso del ciclo di spostamento dell'indice (che è un ciclo) e il ciclo di assegnazione non dovrebbero differire molto.

 
Vitaly Muzichenko #:

Come usarlo, puoi mostrarmelo?

Ecco il compito.

Ecco il codice finito, ma il ciclo è un po' spaventoso

---

Di nuovo, c'è un ciclo dentro ArrayCopy() e probabilmente più di uno. Quindi il codice difficilmente diventerà più semplice e veloce grazie a questa sostituzione.

In questo codice, dovreste specificare un array

int  ArrayCopy(
   void&        dst_array[],         // куда копируем
   const void&  src_array[],         // откуда копируем
   int          dst_start=0,         // с какого индекса пишем в приемник
   int          src_start=0,         // с какого индекса копируем из источника
   int          count=WHOLE_ARRAY    // сколько элементов
   );

da quale indice scrivere e da quale copiare dipende dalla direzione dello spostamento dell'array. Così, se vogliamo che l'indice 0 contenga sempre dati nuovi e freschi, dovremmo copiare da 0 e scrivere da 1. Così, i valori nell'indice 0 e 1 saranno identici, e poi un nuovo valore sarà copiato in 0.

E dubito molto che ArrayCopy() abbia al suo interno lo stesso ciclo di quello dell'utente. Così, avendo una matrice con una certa dimensione, viene spostata di 1 ad ogni tick e poi copiata nel buffer dell'indicatore che viene visualizzato come una linea...

 
Per favore, ditemi la funzione di ripartizione per i fatti giornalieri.
//+----------------------------------------------------------------------------+
//|Определение пробоя дневного фрактала вверх                                  |
//+----------------------------------------------------------------------------+
int BreakdownSignalUpD1()
  {
   int sig=-1;
   double resistD1 = GetNearestUpFractal(PERIOD_D1);
   if (resistD1 < Ask)
     sig=0;
   if (resistD1 >= Ask)
     sig=1;  
   return(sig);
  }

Ed ecco la funzione che mostra la ripartizione sullo schermo

ObjectCreate("signal100",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal100",OBJPROP_XDISTANCE,600);
   ObjectSet("signal00",OBJPROP_YDISTANCE, 40);
   ObjectSetText("signal100",DoubleToString(BreakdownSignalUpD1(),0),18,"Times New Roman", clrRed);

Potete dirmi per favore come fare in modo che lo schermo mostri non 0 o 1 ma 0 è "SI" e 1 è "NO".

Grazie

 
EVGENII SHELIPOV #:
Per favore, ditemi la funzione di ripartizione per i fatti giornalieri.

Ed ecco la funzione che mostra la ripartizione sullo schermo

Potete per favore dirmi come fare in modo che lo schermo mostri non 0 o 1 ma 0 è "SI", 1 è "NO".

Grazie

string boolToStr(bool value) { return ((value) ? "true" : "false"); }
 
EVGENII SHELIPOV #:
Per favore, ditemi qual è la funzione di ripartizione del factal diurno.

Ed ecco la funzione che mostra la ripartizione sullo schermo

Potete dirmi per favore come fare in modo che lo schermo mostri non 0 o 1 ma 0 è "SI" e 1 è "NO".

Grazie

ObjectSetText("signal100",BreakdownSignalUpD1()==0?"Да":"Нет",18,"Times New Roman", clrRed);

Qualcosa del genere.

 
JRandomTrader #:

Qualcosa del genere.

Grazie

 
Alexey Viktorov #:

In questo codice, è necessario specificare un array

Da quale indice scrivere e quale indice copiare dipende dalla direzione dell'offset dell'array. Cioè, se l'indice 0 deve sempre contenere dati nuovi e freschi, allora copia da 0 e scrive da 1. Così, i valori nell'indice 0 e 1 saranno identici, e poi un nuovo valore sarà copiato in 0.

E dubito molto che ArrayCopy() abbia al suo interno lo stesso ciclo di quello dell'utente. Così, avendo una matrice con una certa dimensione, viene spostata di 1 ad ogni tick e poi copiata nel buffer dell'indicatore che viene visualizzato come una linea...

Ci proverò.

---

In generale, il mio codice funziona con successo, è passato più di un'ora


Motivazione: