Errori, bug, domande - pagina 1168

 
TheXpert:

Ta maaa...

Devi mettere un doppio dal lungo prima del trasferimento. Per la variabile globale. Non è zero, è solo un doppio casuale, può essere 1,34*e-307 o 4,29*e+120, perché ha bit log.

Dopo aver trasferito unzip da dub a long.

Questo è tutto.

OK, hai capito ;)

 
artmedia70:

OK, hai capito ;)

Non capisco cosa non sia chiaro.

Double tronca i dati, quindi non potete trasferire direttamente long to double. Ma entrambi sono 8 byte ciascuno, quindi puoi trasferire senza perdite semplicemente usando il doppio come contenitore, che è quello che ho fatto nell'esempio.

 
TheXpert:

Non capisco cosa non sia chiaro.

Double tronca i dati, quindi non potete trasferire direttamente long to double. Ma entrambi sono 8 byte ciascuno, quindi puoi trasferire senza perdite semplicemente usando il doppio come contenitore, che è quello che ho fatto nell'esempio.

Andrey, non ho capito il formato di memorizzazione e visualizzazione in GV del terminale. Sembrava mostrare l'ID del grafico, ma mostra 0.
 
artmedia70:
Andrey, non ho capito il formato di memorizzazione e visualizzazione nel GV del terminale. Sembrava mostrare l'ID del grafico, ma mostra 0.

GV mostrerà qualcosa che assomiglia alla spazzatura in apparenza, questa "spazzatura" si trasformerà in ID grafico dopo la conversione inversa.

Il duble ha il suo proprio formato di dati, quando infiliamo il lungo, mettiamo il formato duble e lo usiamo solo come 8 byte di memoria.

 
TheXpert:

GV mostrerà qualcosa che assomiglia alla spazzatura in apparenza, questa "spazzatura" si trasformerà in ID grafico dopo la conversione inversa.

Il duble ha il suo proprio formato di dati, quando infiliamo il duble mettiamo il formato duble e lo usiamo semplicemente come 8 byte di memoria.

Sì, l'ho già capito, grazie.
 
Una cosa che ho notato è che l'aggiornamento di una libreria o di risorse inserite in qualche altro script (indicatore) fa sì che questo (l'indicatore) ricompili e ricarichi il terminale. Nessuna richiesta! È un bug o una caratteristica? P.S. Si tratta di MT4.
 
artmedia70:

Più che altro una domanda:

Cercare un GV esistente del terminale per nome. Attraverso di esso l'ID del grafico su cui sta girando l'EA viene passato all'indicatore. L'indicatore pende da un altro simbolo. Cioè, voglio passare all'indicatore l'ID del grafico su cui sta girando l'Expert Advisor. Lo sto cercando così:

Questo è ciò che dice il terminale:


Ho provato a leggere la variabile. L'ho messo direttamente nella stringa e l'ho messo nel diario, così come in variabili di diversi tipi - tutto uguale. Ci sono due differenze.

Cosa c'è di sbagliato in questo?

Leggete qui https://www.mql5.com/ru/docs/basis/types/casting paragrafo "Conversione di dati di strutture semplici".

Esattamente il tuo caso. I doppietti hanno una precisione molto inferiore in _numero_ di caratteri rispetto ai lunghi. Ecco perché si ottiene questo risultato con una semplice assegnazione.

Ma si possono usare pienamente 64 bit di una variabile globale per memorizzare _qualsiasi_ informazione lunga 64 bit (come stringhe corte lunghe 8 byte. Per non parlare dei lunghi)

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Ho incontrato il seguente problema. Dopo aver riavviato il terminale l'indicatore restituisce valori "strani" da un altro timeframe quando viene chiamato dall'EA.
L'Expert Advisor è su M2, i dati dell'indicatore sono presi da M3.
1) C'è un riavvio del terminale alle 14:40:
PE 0 14:39:50.524 Terminale
MD 0 14:40:06.009 Terminal MetaTrader 5 Alfa-Forex x64 build 930 avviato
II 0 14:40:06.586 Terminal OpenCL non trovato, installare l'ultimo driver OpenCL per prestazioni migliori
JO 0 14:40:07.257 Esperti esperto FX_Money_Flow_v1_06 (EURUSD,M2) caricato con successo
Expert Advisor scrive i valori dell'indicatore sull'ultima e penultima barra:
OF 0 14:40:11.540 FX_Money_Flow_v1_06 (EURUSD,M2) Il valore dell'indicatore TF1: -1.#QNAN -1.#QNAN
già sulla prossima barra i dati sono corretti:
NJ 0 14:41:46.622 FX_Money_Flow_v1_07 (EURUSD,M2) valore dell'indicatore TF1: -0,02798411604597126 -0,04893498839583753
2) Seconda ripartenza alle 19:55:
CO 0 19:55:06.918 Terminale
RO 0 19:55:28.399 Terminal MetaTrader 5 Alfa-Forex x64 build 930 avviato
OP 0 19:55:28.992 Terminal OpenCL non trovato, installare l'ultimo driver OpenCL per prestazioni migliori
RD 0 19:55:29.507 experts expert FX_Money_Flow_v1_07 (EURUSD,M2) caricato con successo
Di nuovo la stessa canzone:
PQ 0 19:55:38.168 FX_Money_Flow_v1_07 (EURUSD,M2) valore indicatore TF1: -1.#QNAN -1.#QNAN

Ma non funziona sempre correttamente:

KF 0 23:59:51.987 FX_Money_Flow_v1_07 (EURUSD,M2) Valore del fattore TF1 indicatore: -1.#QNAN -1.#QNAN


Il grafico M3 è aperto in questo momento e c'è un indicatore su di esso che mostra tutto correttamente:
(la differenza di tempo tra il terminale e i log è di 5 ore, lo screenshot si riferisce al secondo riavvio)
File:
 
OBJ_LABEL non sembra supportare UNICODE in MT4? Ho cambiato il valore sia programmaticamente che dalla finestra di dialogo delle proprietà delle etichette: il simbolo è inserito e visualizzato correttamente nella finestra di dialogo, ma sul grafico appare come un punto interrogativo (?). Il font è unicode, e nel dialogo delle proprietà dell'etichetta è correttamente selezionato nell'elenco a discesa con i font.
 
stringo:

Leggete qui https://www.mql5.com/ru/docs/basis/types/casting paragrafo "Conversione di dati di tipi di strutture semplici".

Questo è esattamente il tuo caso. I doppietti hanno una precisione molto inferiore in _numero_ di caratteri rispetto ai lunghi. Ecco perché si ottiene questo risultato con una semplice assegnazione.

Ma potete usare pienamente i 64 bit della variabile globale per memorizzare _qualsiasi_ informazione lunga 64 bit (come stringhe corte lunghe 8 byte. Per non parlare dei lunghi)

Sì, l'ho letto, grazie.