Errori, bug, domande - pagina 661

 

C'è un limite interno alla lunghezza della stringa(tipo di stringa), o quanta memoria libera c'è e quanto può essere stipato nella stringa?

// Questa domanda è relativa alla scrittura di programmi per OpenCL.

Si prega di specificare anche la risposta corretta nella documentazione, non c'è alcuna indicazione nelle FAQ.

 
MetaDriver:

C'è un limite interno alla lunghezza della stringa(tipo di stringa), o quanta memoria libera c'è e quanto può essere stipato nella stringa?

// Questa domanda è relativa alla scrittura di programmi per OpenCL.

Si prega di specificare anche la risposta corretta nella documentazione, dato che non c'è alcuna indicazione nelle FAQ.

Senza il carattere di avanzamento di linea "\r\n" è un po' meno di 32768, approssimativamente 32000 caratteri ci staranno dentro,

E con un avanzamento di linea fino alla memoria è sufficiente, almeno ho infilato 2 000 000 nella stringa, la mia mano si è stancata di spalare ulteriormente :)

 
Urain:

Senza il line feed, è un po' meno di 32768, circa 32.000 caratteri,

ma con il line feed, ho abbastanza memoria per ora, almeno ho infilato 2.000.000 nella stringa, il mio braccio è stanco di infilare :)

Grazie mille! Due milioni saranno sufficienti per me all'inizio.

// Sono solo perplesso: cosa diavolo c'entra la traduzione delle stringhe? È solo un simbolo, non peggiore/migliore degli altri.

// No, ti credo, è solo che di solito capisco come funzionano le cose, ma qui è un po' strano e sorprendente...

// Con cosa l'hai misurato? Non era una funzione di file?

:)

 
MetaDriver:

Grazie, sono contento di averlo fatto! Due milioni saranno sufficienti per me per la prima volta.

// Sono solo perplesso: cosa diavolo c'entra la traduzione delle stringhe? È solo un simbolo, non peggiore/migliore degli altri.

// No, ti credo, è solo che di solito capisco come funzionano le cose, ma qui è un po' strano e sorprendente...

// Con cosa l'hai misurato? Non con la funzione file, per caso?

:)

Molto probabilmente è una rappresentazione interna della stringa; \r\n è probabilmente seguito dall'allocazione di un nuovo (ulteriore) array per memorizzare le informazioni.

Non lo so esattamente, chiedete a MQ.

SZY naturalmente per il controllo scaricato in un file, ma prima la stringa è formata, controllato la sua lunghezza tramite Len, beh, non ricordo ora, era molto tempo fa, ma tutto era in ordine.

ZZZI E ho controllato la lettura di 10 caratteri dalla stringa salvata, senza la traduzione di più di ~32700 non scrive nella variabile.

 
Urain:

Questa è molto probabilmente una rappresentazione interna della stringa, con \r\n probabilmente seguita da un nuovo (ulteriore) array per memorizzare le informazioni.

Non lo so esattamente, chiedete a MQ.

Beh, naturalmente per controllare il reset in un file, ma prima la stringa è formata, controllato la sua lunghezza attraverso Len, beh, non mi ricordo ora, è stato molto tempo fa, ma tutto era in ordine.

ZZZY E leggere da 10 caratteri dalla stringa salvata, senza traduzione più di ~32700 non scrive nella variabile.

Va bene, grazie, Nicholas. E, a proposito, buon compleanno a te...!



--

Cosa ha da dire il compagno Stringo?

 
La lunghezza massima della linea è di 1073741816 caratteri, ma non c'è abbastanza memoria per quel numero di caratteri in x86 (32 bit).
 
Valmars:
Abbiamo solo bisogno di sincronizzare il tempo del computer in tempo, altrimenti possiamo anche perdere i commerci.

Ecco, ho capito. Allora ti ho frainteso. )) Per ottenere sempre correttamente l'intera storia, la sincronizzazione può essere fatta in questo modo:

//+------------------------------------------------------------------+
//| МАКСИМАЛЬНОЕ_ВРЕМЯ                                               |
//+------------------------------------------------------------------+
datetime ChoiceTimeFunction()
  {
   datetime synchro=NULL;
//---
   synchro=(datetime)fmax((double)TimeTradeServer(),(double)TimeLocal());
//---
   if(!MQL5InfoInteger(MQL5_TESTING) || !MQL5InfoInteger(MQL5_OPTIMIZATION) || !MQL5InfoInteger(MQL5_VISUAL_MODE))
     {
      Print("synchro_time: ",synchro,"; TimeTradeServer(): ",TimeTradeServer(),"; TimeLocal(): ",TimeLocal()); return(synchro);
     }
//---
   synchro=TimeCurrent()+Milliseconds_Ahead;
//---
   Print("synchro_time tm+ml_ahead: ",synchro,"; TimeCurrent(): ",TimeCurrent(),"; Milliseconds_Ahead: ",Milliseconds_Ahead); return(synchro);
  }
Per il tester, c'è solo una stampella e non per tutti i casi. Aspettiamo finché non lo aggiustano.
 
tol64:

Ecco, ho capito. Allora ti ho frainteso. )) Per ottenere sempre correttamente l'intera storia, la sincronizzazione può essere fatta in questo modo:

Per il tester è solo una stampella, e non per tutti i casi. Stiamo aspettando che lo sistemino.

No, hai capito bene. L'ora del server non dipende dal fuso orario del computer, è la stessa per tutti ed è uguale all'ultima ora fissata nel 'Market Watch'.

Quando il mercato si chiude (fine delle contrattazioni) su un dato server, nessuno stop dovrebbe essere attivato fino alla riapertura del mercato successivo in una nuova settimana. Nel vostro caso, questo non sembra essere il caso. Le quotazioni hanno già smesso di arrivare nel terminale, ma vengono ancora elaborate sul server e vengono attivati gli arresti. In alcune società di brokeraggio, gli stop non vengono attivati dal mercato, ma dal prezzo fissato nello stop. Questo non è un meccanismo di mercato, ma di "cucina".

Quello che ho detto sui possibili trade mancanti, beh, se il tuo orologio è indietro di 2 minuti, allora i trade fatti in questi ultimi 2 minuti non rientreranno nella storia perché il tempo del server è calcolato con l'ora locale e sarà anche in ritardo per gli stessi 2 minuti.

Per quanto riguarda il tester, non è chiaro cosa la preoccupa, perché tutto questo è simulato lì e l'ora locale è uguale a quella del server.

 
MetaDriver:

OK, grazie Nikolai, e a proposito, buon compleanno a te...!

L'ho tirato fuori,

Skype e nel mezzo della notte ti verrà ricordato il compleanno di un conoscente (come pubblicità :)

Grazie per la torta, è molto bella, ma le candele sono un po' difficili da digerire :o)

 
Valmars:

No, hai capito bene. L'ora del server è indipendente dal fuso orario del computer, è la stessa per tutti ed è uguale all'ultima ora registrata nel 'Market Watch'.

Quando il mercato si chiude (fine delle contrattazioni) su un dato server, nessuno stop dovrebbe essere attivato fino alla riapertura del mercato successivo in una nuova settimana. Nel vostro caso, questo non sembra essere il caso. Le quotazioni hanno già smesso di arrivare nel terminale, ma vengono ancora elaborate sul server e i set stop sono attivati. In alcune società di brokeraggio, gli stop non vengono attivati dal mercato, ma dal prezzo fissato nello stop. Questo non è un meccanismo di mercato, ma di "cucina".

No, tutto ha funzionato correttamente sul server ( account demo MQ). Cioè, gli arresti sono scattati quando non ero connesso. Ma quando mi sono collegato, il mercato era già chiuso. Nella finestra di Market Watch è stato registrato il tempo dell'ultimo tick prima che la mia connessione fosse interrotta. Quando ho richiesto la storia dei trade specificando TimeCurrent() come secondo valore, non ho ottenuto l'intera storia. Anche se la Guida per TimeCurrent() dice che:

... Il valore del tempo è formato sul server commerciale e non dipende dalle impostazioni del tempo sul computer dell'utente.

Cioè, capisco che questa funzione deve restituire il valore dell'ultimo arrivo di quotazione di uno degli strumenti nella finestra di Market Watch dal server anche se la connessione è stata interrotta e la connessione è stata fatta quando il mercato era già chiuso. Nel mio caso, questo non è successo e non ho avuto tutta la storia. Non lo so, non è menzionato nell'aiuto.

E quello che ho detto sulle possibili transazioni perse, beh, se il vostro orologio è indietro di 2 minuti, le transazioni fatte in questi ultimi 2 minuti non andranno nella storia, perché il tempo del server è calcolato con l'ora locale e sarà anche in ritardo degli stessi 2 minuti.

In questo caso, se volete l'intera storia, potete semplicemente aggiungere un numero più grande per un giorno avanti e sarà una garanzia che tutte le offerte saranno selezionate. :)

Per quanto riguarda il tester, non è chiaro cosa non vi si addice, perché lì è tutto simulato e il locale è uguale al server.

Ma nel tester, c'è un bug con la funzione HistoryDealsTotal(), e appare nella modalità di visualizzazione. Il tempo è modellato correttamente lì. Solo una stampella aiuta in alcuni casi.

Motivazione: