Timer

 

In realtà, la domanda è: perché il timer è misurato in secondi?

Onestamente, quando ho sentito che ci sarebbe stato un timer nativo, non avevo idea che l'unità di tempo atomica sarebbe stata un secondo invece di un millisecondo...

Non è una scoperta molto piacevole (per me) che ho fatto recentemente, quando volevo usarlo.


La premessa è molto semplice: il timer è di solito usato per la sincronizzazione (in attesa che i dati siano calcolati) o l'osservazione (un EA temporizzato, imho, sarà molto più adeguato). In entrambi i casi, un secondo è un po' troppo, ma ci piacerebbe molto vedere i millisecondi nel timer.

Di nuovo, è un buon sostituto della funzione Sleep negli indici e un secondo è troppo.

Spero che gli sviluppatori prendano in considerazione questa richiesta. Se necessario, farò una richiesta al Service Desk.

Ho aperto questo argomento per la discussione. Cosa ne pensate?

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
TheXpert:

In realtà, la domanda è: perché il timer è misurato in secondi?

Onestamente, quando ho sentito che ci sarebbe stato un timer nativo, non avevo idea che l'unità di tempo atomica sarebbe stata un secondo invece di un millisecondo...

Non è una scoperta molto piacevole (per me) che ho fatto recentemente, quando volevo usarlo.


La premessa è molto semplice: il timer è di solito usato per la sincronizzazione (in attesa che i dati siano calcolati) o l'osservazione (un EA temporizzato, imho, sarà molto più adeguato). In entrambi i casi, un secondo è un po' troppo, ma ci piacerebbe molto vedere i millisecondi nel timer.

Di nuovo, è un eccellente sostituto della funzione Sleep negli indici, e di nuovo il secondo è troppo.

Spero che gli sviluppatori non ignorino questa richiesta. Se necessario, farò una richiesta in Service Desk.

L'argomento è aperto alla discussione. Cosa ne pensate?

Potete credermi, l'attuale realizzazione del terminale di trading e l'algoritmo di lavoro con i thread in MQ seconds è una buona soluzione.

Tanto più che il tempo nel tester è generato sulla base del grafico a minuti (per quanto ho capito) e quindi una scala temporale più piccola non funzionerà.

PS

Naturalmente, gli sviluppatori potrebbero dare una risposta più dettagliata, ma è sufficiente per capire che l'attuale algoritmo di lavoro con i thread in Expert Advisor e nel terminale, l'intervallo di tempo più breve di un secondo non è possibile affatto o semplicemente causerà incoerenza nel funzionamento dell'EA.

Per immaginare le conseguenze di una tale soluzione, bisogna capire cosa succederà all'Expert Advisor se il suo timer viene chiamato ogni 500 millisecondi, mentre l'elaborazione del timer, per esempio, richiede un minuto....

 

Interesting:

Soprattutto perché il tempo nel tester è generato sulla base del grafico a minuti (come ho capito) e quindi una scala temporale più piccola non va bene.

Cosa c'entra il tester?

... Un intervallo di tempo più breve di un secondo non è affatto possibile o causerà semplicemente incoerenza nel lavoro dell'Expert Advisor.

In che modo? Perché non è possibile?

Per immaginare le conseguenze di una tale soluzione, bisogna capire cosa succederebbe all'Expert Advisor se il suo timer viene chiamato ogni 500 millisecondi, mentre il timer di elaborazione, per esempio, impiega un minuto....

E cosa succederà? E quanto è più spaventoso se il timer è di 1s?

Hai la testa a posto quando scrivi i commenti?
 
TheXpert:

In realtà, la domanda è: perché il timer è misurato in secondi?

Onestamente, quando ho sentito che ci sarebbe stato un timer nativo, non avevo idea che l'unità di tempo atomica sarebbe stata un secondo invece di un millisecondo...

Non è una scoperta molto piacevole (per me) che ho fatto recentemente, quando volevo usarlo.


La premessa è molto semplice - il timer è di solito usato per la sincronizzazione (in attesa che i dati siano calcolati) o l'osservazione (un EA temporizzato, imho, sarà molto più adeguato). In entrambi i casi, un secondo è un po' troppo, ma ci piacerebbe molto vedere i millisecondi nel timer.

E ancora, è un buon sostituto della funzione Sleep negli indici e un secondo è troppo.

Spero che gli sviluppatori non lascino la richiesta inascoltata. Se necessario, farò una richiesta in servicedesk.

Questo argomento è aperto alla discussione. Cosa ne pensate?

Il timer in secondi è la nostra decisione cosciente. Il timer è destinato principalmente agli Expert Advisors per lavorare senza tick.

Se vuoi la sincronizzazione, usa diversi Expert Advisors su strumenti diversi che si inviano a vicenda messaggi personalizzati.

Oppure scrivi una specie di wotchdog, in loop, per esempio, su uno slittamento di 50 millisecondi, che invia messaggi al tuo Expert Advisor principale quando si verificano eventi previsti. In questo modo, i messaggi saranno garantiti per essere consegnati (a meno che, naturalmente, non si trabocchi la coda).

 
stringo:

Il timer in secondi è la nostra decisione cosciente. Il timer è principalmente destinato a permettere agli esperti di lavorare in assenza di zecche.

Questo può essere fatto senza un timer e, tra l'altro, anche senza il fastidio di inviare un evento a se stesso. Allora perché non estendere la funzionalità?

Se vuoi la sincronizzazione, usa diversi EA su diversi strumenti che si inviano a vicenda messaggi personalizzati.

La sincronizzazione può essere con i dati. Per esempio, un indicatore incorporato. Come risolvere questa sincronizzazione nell'indicatore? Non sto chiedendo di Expert Advisors, tutto è risolto lì senza problemi. Ma in un indicatore, Sleep è un arresto di tutto il filo, e significa il resto degli indicatori. E significa che ci sono molti problemi con la sincronizzazione.

Puoi anche scrivere una sorta di watchdog loop per uno slittamento di 50 msec, che invia messaggi al tuo Expert Advisor principale quando si verificano eventi previsti. I messaggi saranno garantiti per essere consegnati (a meno che non si faccia un overflow della coda, ovviamente).

Dovrà farlo, se non cambia nulla...
 
TheXpert:

Cosa ha a che fare questo con il tester?

In che modo? Perché non è possibile?

E cosa succederebbe? E quanto fa più paura se il timer è di 1s?

Gira la testa quando scrive i commenti?

Penso che se conoscete le unità di tempo atomiche, probabilmente sapete come sono organizzati i processi e i thread nel sistema operativo e nel resto del software.

Ma solo per ricordarvi (nel caso ci siano quelli che non lo sanno) le basi - Tutto ciò che accade nel sistema è diviso in processi e thread, ogni processo può avere da un thread a diversi. In parole povere, ogni file eseguibile in esecuzione nel sistema è un PROCESSO. Ogni processo ha una priorità, e ogni thread in un processo ha una priorità.

In base a queste priorità, il sistema assegna il tempo del processore ad ogni processo (o thread di un certo processo).

Quindi, l'architettura del terminale client è tale che solo un Expert Advisor e diversi indicatori possono essere lanciati su ogni grafico (come sapete). L'Expert Advisor ha un unico thread, ma ogni indicatore ha il proprio thread (completamente indipendente) dall'Expert Advisor.

Andrà bene, ma l'Expert Advisor o l'indicatore stesso può funzionare solo nel suo thread, cioè qualsiasi linea di codice prende l'intero thread e nessun'altra azione è possibile in quel thread (naturalmente, ci sono dubbi riguardo l'elaborazione dei tick, ma molto probabilmente si inseriscono nel quadro generale).

In questo caso, per ogni grafico, si forma un thread separato di eventi che viene elaborato sequenzialmente dal sistema.

Perciò l'elaborazione del timer non può essere chiamata fino a quando l'elaborazione del timer precedente non è finita. O, in parole povere, OnTimer() non potrà essere eseguito finché il thread che dovrebbe elaborare il timer non sarà occupato.

Per illustrare l'impossibilità di avviare l'elaborazione del timer da parte del secondo thread si può usare questo esempio (stupido ma chiaro):

int OnInit()
{
//----------------------------------------------------------------------------//
//Work variables
//----------------------------------------------------------------------------//
EventSetTimer(1);
//----------------------------------------------------------------------------//
return(0);
//----------------------------------------------------------------------------//
}

void OnTimer()
{
//----------------------------------------------------------------------------//
//Work variables
//----------------------------------------------------------------------------//
Print(TimeLocal());
Sleep(2000);
//----------------------------------------------------------------------------//
}

PS

Riguardo al tester di strategia - come proponi di formare il tempo lì?

 

Interesting:

L'architettura del terminale client è tale che solo un Expert Advisor e diversi indicatori possono essere avviati su ogni grafico (come sapete). L'Expert Advisor ha un unico thread, ma ogni indicatore ha il proprio thread (completamente indipendente) dall'Expert Advisor.

Da quando? Non vedo alcun problema con gli script e gli Expert Advisors, dato che lavorano nei loro propri thread.

Gli indicatori lavorano TUTTI in UN SOLO filo, come sapete, e questo complica il compito di organizzare il timer in qualsiasi indicatore. E a volte mi piacerebbe molto.

L'esempio qui sotto mostra come il timer non può essere avviato da un secondo thread (ottuso ma illustrativo):

Ecco un esempio di lavoro. In modo schietto e chiaro mostra il livello del tuo pensiero, specialmente nel contesto del post precedente.

Per favore, non rispondete mai più ai miei post, altrimenti non riuscirò a trattenermi e vi chiamerò con dei brutti nomi e mi farò bannare.

Comunque, se vuoi, sentiti libero di scrivere, sarò felice di prenderti in giro su qualsiasi argomento legato alla programmazione, al diavolo il divieto.

Per quanto riguarda il tester di strategia, come suggerisci di formare il tempo lì?
Non lo sono, per ora mi va bene così.
 
TheXpert:

Da quando? Non vedo affatto un problema con gli script e gli EA, dato che lavorano tutti nei loro propri thread.

E gli indicatori lavorano TUTTI in UN SOLO filo, sia noto, e complica il compito di organizzare il timer in qualsiasi indicatore. E a volte lo si desidera davvero.


Volevo non rispondere, ma non potevo farne a meno.

Gli script non mi interessano, mentre non sono sicuro di dove ho detto che gli Expert Advisors non vengono eseguiti in thread separati (ognuno nel proprio thread). Ecco, indicami il posto dove ho detto il contrario ....

Non sono sicuro degli indicatori, perché non ci lavoro molto (sicuramente questa domanda è stata discussa nei forum, e se succede qualcosa, gli sviluppatori la correggeranno). So per certo che per ogni indicatore è possibile prescrivere il suo timer (non dipende dall'esperto), ho già usato questa possibilità.

So esattamente cosa avrei dovuto dire sugli indici.

TheXpert:

L'esempio funziona. In modo schietto e chiaro mostra il livello del tuo pensiero, soprattutto nel contesto del post precedente.

E chi dubiterebbe che funziona, ma il timer (che stronza) gira ogni 2 secondi invece dell'1 dichiarato, che ho indicato nel blocco di inizializzazione.

Soprattutto per te, l'ho messo in un Expert Advisor, anche se il problema della chiamata del timer era comunque evidente (supponiamo che per chiarezza, si dice che nelle immagini tutto è più comodo e facile da capire)...

Ora ho solo bisogno di scoprire come OnTimer sarà chiamato ogni 500 millisecondi, se OnTime impiega 1 secondo (nell'esempio un secondo e due secondi rispettivamente)?

TheXpert:

Per favore, non rispondete mai più ai miei post, altrimenti non riuscirò a trattenermi e vi chiamerò con nomi cattivi e mi farò bannare.

Comunque, se volete, sentitevi liberi di scrivere, sarò felice di postare su qualsiasi argomento legato alla programmazione, al diavolo il divieto.

Sì, per favore, non devo rispondere...
 
Solo in una discussione si può conoscere la verità e in caso di adeguatezza di entrambi gli argomentatori uno si atterrà alla sua opinione (giusta) e il secondo cambierà la sua opinione (sbagliata) all'opinione del primo.

Quindi non dire all'altra persona su cosa si sbaglia, o semplicemente scrivere: "ti sbagli, cercalo su google".

Per quanto ho capito il forum - una conversazione reciprocamente vantaggiosa, se hai domande solo allo sviluppatore vai a servicedesk.

A Interessante

Ho fatto alcuni esperimenti con le prestazioni di MQL5. Lasciate che ve lo dica: la maggior parte degli Expert Advisors esegue la funzione OnTick in meno di 0,1 secondi.


A TheXpert

Perché hai tanta fretta?
Ma non vedo il senso di un timer a meno di un secondo. Contiamo quando due elettroni si scontrano?
Se è così, andate avanti con il ciclo e Sleep().

 

mrProF:

A Interessante

Ho fatto alcuni esperimenti con le prestazioni di MQL5, e lasciate che ve lo dica: la maggior parte degli EA esegue la funzione OnTick in meno di 0,1 secondi.

Dipende da cosa metterci e quanti dati elaborare, ma MQL5 è abbastanza veloce, non lo metto in dubbio...
 

Un altro... Non siete per caso fratelli?

mrProF:

Ma non vedo il senso di un timer di meno di un secondo.

Il che non significa che non ci sia. I compiti di ognuno sono diversi.

Se è così, andate avanti con il ciclo e Sleep().

Ecco qui... Possiamo leggere? Mostrami come fare per i tacchini.