Domande da un "manichino" - pagina 68

 

x100intraday:

La cosa principale che voglio sapere: è possibile riempire i buffer di tempo direttamente come i buffer di prezzo (senza ricorrere a CopyTime e altre funzioni regolari di copia in un array), e come, e se no, perché?

2. È davvero necessario avere un altro paio di buffer per memorizzare i secondi dall'inizio del 1970, ma con il tipo non datetime, ma qualche doppio o lungo, per esempio, e nei momenti necessari per convertire attraverso TimeToString in formato tempo come stringa letterale?

1. impossibile. con "perché?" - agli sviluppatori.

Nel tuo caso, questa è la soluzione più semplice. (Garantito per funzionare.) Dal momento che si solleva la questione riguardante il riempimento di buffer simili a quelli dei prezzi.

Se fossi io, cercherei di evitare questo spreco di memoria a livello algoritmico, e in nessun caso creerei buffer con dati utili riempiti al 3%.

 
MetaDriver:

Se fossi io, cercherei di evitare questo spreco di memoria a livello algoritmico, e di non creare buffer con il 3% di dati utilizzabili.

Bene, ecco che arriva la domanda-spiegazione: https://www.mql5.com/ru/forum/1111/page529#comment_101059 con almeno una risposta intelligibile e non incomprensibile, anche se al contrario. L'interesse è alto...
 
x100intraday:

si, bada))

"Costanti di data e ora... " e "...può essere rappresentato come una stringa letterale".

può essere rappresentato o meno... è per i dati di ingresso/uscita nella solita forma data/ora.

Inoltre, non possiamo associare array di questo tipo a buffer di indicatori (e non ce n'è bisogno?), non possiamo applicare SetIndexBuffer agli array di questo tipo di dati per ragioni ben note.

non c'è nulla che impedisca al tipo datetime di essere nel buffer dell'indicatore (è auspicabile).

E noi non lo facciamo.

E invano)

Compilare il codice risultante. Otteniamo l'avvertimento"truncation of constant value" rispetto alle stringhe con =EMPTY_VALUE(siamo tristemente sorpresi) e un errore nel rapporto Expert del terminale: "Array out of range " rispetto alle stesse stringhe (ci arrabbiamo alla fine). Sembra cheEMPTY_VALUE non vogliaentrare nel tipo datetime , mentre la dimensione dell'array rimane zero. CambiandoEMPTY_VALUE a 0, l'errore scompare ma l'array haancora dimensione zero.

EMPTY_VALUE è di tipo doppio.

Sarebbe più facile con un buffer indicatore - non abbiamo bisogno di determinare la dimensione dell'array.

Un' altra cosa strana è che la dimensione di ExtUpperBuffer e ExtLowerBuffer non è zero, significa che si riempiono, ma i frattali non appaiono. Perché dovrebbe essere così?

eh, non lo so).

La cosa principale che mi interessa: è possibile riempire i buffer di tempo direttamente in modo simile ai buffer di prezzo (senza ricorrere al CopyTime e altre funzioni regolari di copia nell'array), e come, e se no, perché? Davvero, per questo scopo devo creare un altro paio di buffer per memorizzare i secondi dall'inizio del 1970, ma con il tipo non datetime, ma qualche doppio o lungo, per esempio, e nei momenti necessari per convertire attraverso TimeToString in formato tempo come stringa letterale?

L'accesso a dati come datetime è simile all'accesso ai dati sui prezzi.

datetime è essenzialmente lo stesso int/long.

P.S.: chi è troppo pigro per riprodurre il codice di Fractals.mq5, mi dica solo come memorizza i dati temporali specifici calcolati (senza chiamare gli handle degli indicatori integrati e lavorare con essi)?

è lo stesso che con i dati interi, int/datetime/long è lo stesso.

 
Swan:

Si, badaada))

niente impedisce al tipo datetime di essere nel buffer dell'indicatore (questo è auspicabile).

E invano)

È più facile con il buffer dell'indicatore - non è necessario determinare la dimensione dell'array.

E cosa sto facendo esattamente di sbagliato? Tutto è descritto in dettaglio, il codice sorgente è standard, testato nel tempo, il più semplice! Le modifiche sono semplici e ovvie... Sono perso nelle congetture della mia mente annebbiata... Quando sono bloccato su qualcosa, potrei anche chiamare un meccanico d'auto con una chiave a croce...

E qual è l'incantesimo runico per legare gli array datetime ai buffer degli indicatori? Di nuovo:


SetIndexBuffer

Lega il buffer di indicatori specificato a una matrice dinamica unidimensionale di tipo double, dichiarata globalmente.

 
x100intraday:

E cosa sto facendo esattamente di sbagliato? Dopo tutto, ho descritto tutto in dettaglio, il codice sorgente è generalmente standard, testato nel tempo, il più semplice! Le modifiche sono semplici e ovvie... Sono perso nelle speculazioni della mia mente annebbiata... Quando sono bloccato su qualcosa, potrei anche chiamare un meccanico d'auto con una chiave a croce...

E qual è l'incantesimo runico per legare gli array datetime ai buffer degli indicatori? Di nuovo:


SetIndexBuffer

Lega il buffer di indicatori specificato a una matrice dinamica unidimensionale di tipo double, dichiarata globalmente.

Non hai bisogno di questo datetime. Scrivere tutto in un array doppio e convertirlo in datetime prima di usarlo (se necessario).

Fondamentalmente, l'unica differenza tra datetime e double è nella presentazione. È possibile convertire senza perdite il tempo scritto in double in datetime.

Entrambi sono tipi da 8 byte.

 
x100intraday:

E cosa sto facendo esattamente di sbagliato? Dopo tutto, ho descritto tutto in dettaglio, il codice sorgente è generalmente standard, testato nel tempo, il più semplice! Le modifiche sono semplici e ovvie... Sono perso nelle speculazioni della mia mente annebbiata... Quando mi blocco su qualcosa, voglio un meccanico d'auto con una chiave a brugola...

Posso solo indovinare i dettagli del codice con le modifiche...

E come usare l'incantesimo runico per legare array di tipo datetime a buffer di indicatori? Di nuovo:


SetIndexBuffer

Lega il buffer di indicatori specificato a una matrice dinamica unidimensionale di tipo double, dichiarata globalmente.

Urain ha già risposto. Bene, affinché il compilatore non imprechi, qualcosa del genere:

double ExtUpperTimeBuffer[];//обьявляем
...
ExtUpperTimeBuffer[xz0]=(double)time[xz1];//присваиваем
...
datetime XZ=(datetime)ExtUpperTimeBuffer[xz2];//юзаем
 

Quindi... Già...

Niente di innovativo, ma il terreno è ben piantato, per così dire.

Grazie a tutti per il calcio medicinale. Farò un tentativo...

 
x100intraday:

Grazie a tutti per i calci alla medicina.

E calci di fortuna : D
 

Esiste un analogo interno della funzione di libreria array.Add()?

P.S.: se no, date una scorta di sonniferi per un anno.

 
x100intraday:

Esiste un analogo interno della funzione di libreria array.Add()?

P.S.: se no, date una scorta di sonniferi per un anno.

Perché non memorizzare la data nell'indicatore...... o nel buffer...... tipo double

Molti punti aggiunti, altrimenti appare una specie di collegamento.

double time[10];

time[0] = (double) D'3000.12.31 23:59';
time[1] = (double) D'2030.12.31 23:59';

Print(TimeToString((datetime)time[0]));
Print(TimeToString((datetime)time[1]));

Tutto si converte correttamente senza errori

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Основы языка / Типы данных / Вещественные типы (double, float) - Документация по MQL5
Motivazione: