Errori, bug, domande - pagina 1233

 
Ha chiesto a lungo su 4 ma non ha mai avuto una risposta se non la presa in giro))

restituisceTimeGMT() quandoStringToTime è sbagliato; ad esempio quandoStringToTime("0") - quando l'argomento non viene analizzato.

E restituisce il tempo normale quando l'argomento viene analizzato, ad esempio quandoStringToTime(" 24.10.2014") - D'2014.10.24 00:00:00'

È normale? PerchéTimeGMT() nello specifico? Si tratta di -2 ore dal mio orario attuale in MT4 e sul mio computer.

 
La domanda sull'errore 4806 "Perché la funzione CopyBuffer inserita in un indicatore personalizzato porta all'errore 4806?

mentre la stessa funzione con gli stessi parametri nel codice EA funziona bene? "

il mio codice funziona dal debugger, ma non funziona in modalità normale (o meglio, funziona a volte e non sono riuscito a stabilire un modello semplice sul perché funziona e perché no)

perché abbiamo bisogno di indicatori come iXXX, se non possono essere usati normalmente?

 
tyn:
La domanda sull'errore 4806 è stata sollevata molto tempo fa "Perché la funzione CopyBuffer inserita in un indicatore personalizzato, porta all'errore 4806?

mentre la stessa funzione con gli stessi parametri nel codice EA funziona bene? "

il mio codice funziona sotto il debugger, ma non funziona in modalità normale (in realtà, funziona a volte e non ho potuto stabilire il semplice schema del perché funziona e perché non funziona)

A cosa ci servono gli indicatori di tipo iXXX se non possono essere usati correttamente?

Pomeriggio. I dati per il CopyBuffer sono presi dallo stesso TF su cui gira il tuo indicatore?

Avete provato a usare la funzione BarsCalculated() per risolvere il problema?

 
marketeer:
In MQL OOP, come si controlla se un puntatore è un membro di una certa classe - come instanceof in JavaScript o typeid in C++?
CObject *ob;
datetime t;

typename(ob); // CObject
typename(t);  // datetime
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Шаблоны функций
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Шаблоны функций
  • www.mql5.com
Основы языка / Объектно-ориентированное программирование / Шаблоны функций - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Posso impostare il mio valore (che viene visualizzato) per il cartellino del prezzo invece del prezzo a cui è impostato? Se sì, come?
 
Tapochun:

Buon pomeriggio. I dati per CopyBuffer sono presi dallo stesso TF in cui gira il vostro indicatore?

Avete provato a usare la funzione BarsCalculated() per risolvere il problema?

Grazie per la domanda. Ho preso i dati da iATR su D1 l'indicatore principale è in esecuzione su timeframe più piccoli, BarsCalculated() restituisce anche -1 e lo stesso errore. Come immagino, c'è una funzione ma nessun indicatore (in runtime). Se creo un indicatore in un'altra finestra sullo stesso strumento, tutto funziona. In modalità debug funziona anche. Ma la mia domanda è un bug o non capisco qualcosa?
 

Buon pomeriggio.

Problema con le chiamate di funzione dalla dll di sistema. Il compito è quello di scrivere un semplice server TCP in MQL5, che gira su una certa porta e riceve solo messaggi.

Importato da ws2_32.dll funzioni WSAStartup(), WSAClenup(), socket(), bind(), accept(), listen(), recv(). Tutto funziona esattamente fino a quando non si prova a fermare il server. Quando cerco di fermare il server e terminare correttamente lo script, il terminale semplicemente mi butta fuori.

Da allora la funzione recv() è stata usata come metodo scientifico.

Nel file allegato c'è una linea (171):

  int bytesCnt = recv(clientSocket, rcvBuffer, RCVBUFFSIZE, 0);

se è configurato in questo modo:

  int bytesCnt = 10; //recv(clientSocket, rcvBuffer, RCVBUFFSIZE, 0);

allora il server si ferma senza errori. Stavo guardando degli esempi di utilizzo delle funzioni di rete su MSDN e ho fatto tutto per analogia.

Qualcuno ha idea di come risolvere questo problema?

 
tyn:
Grazie per aver chiesto. Ho preso i dati da iATR su D1 l'indicatore principale funziona su timeframe più piccoli, BarsCalculated() restituisce anche -1 e lo stesso errore. Come immagino, c'è una funzione ma nessun indicatore (in runtime). Se creo un indicatore in un'altra finestra sullo stesso strumento, tutto funziona. In modalità debug funziona anche. Ma la mia domanda è un bug o non capisco qualcosa?

Anch'io ho lottato con questo problema di recente. L'ho risolto, non so se fosse ottimale, ma l'ho risolto. Solo i dati sono stati presi da iFractals, ma non importa. Perché ho chiesto del TF? Secondo le mie osservazioni, succede la seguente cosa. Per esempio, l'indicatore funziona a M15. Se i dati dell'indicatore sono richiesti da M1 a M15 - tutto va bene, i dati sono disponibili nel momento in cui vengono richiesti (se non alla prima chiamata). Se i dati sono richiesti da M30 (ripeto, l'indicatore funziona su TF M15), allora al momento della richiesta non ci sono dati su M30 per una nuova candela (o abbiamo bisogno di una richiesta preliminare, o i dati sono ritardati dal tick). L'ho risolto nel modo seguente. Ricordo il risultato di BarsCalculated() sulla candela corrente. Appena la prossima volta che BarsCalculated() restituisce il valore 1 in più (una nuova candela è apparsa), ricordiamo il nuovo valoredi BarsCalculated() e copiamo i dati. Ma questo momento (quando i dati dell'indicatore appaiono sul TF superiore) non coincide con la formazione di una nuova candela nel TF corrente.

Sì,BarsCalculated() restituisce -1 quando non ci sono dati, succede, per quanto ne so, solo durante la prima esecuzione. Cioè, quando si ottiene la maniglia dell'indicatore e si richiedono immediatamente i dati. Bisogna anche aspettare.

 

Subito dopo la creazione dell'handle dell'indicatore, i dati non possono essere interrogati perché non sono pronti. Il processo di inizializzazione e ricalcolo è complesso e dipende da molti fattori.

La strategia corretta è quella di creare un handle in oninit e lavorare con i dati quando arriva il primo tick.

 
Renat:

Subito dopo la creazione dell'handle dell'indicatore, i dati non possono essere interrogati perché non sono pronti. Il processo di inizializzazione e ricalcolo è complesso e dipende da molti fattori.

La strategia corretta è quella di creare un handle in oninit e lavorare con i dati quando arriva il primo tick.

Poi questa domanda. Se l'indicatore viene eseguito su M15. Si forma una nuova candela. Quando si richiedono i dati per M15 e M30, devono essere disponibili allo stesso tempo?
Motivazione: