Errori, bug, domande - pagina 1335

 

Nel codice sorgente dell'indicatore Fractals.mq5, ci sono tali voci per il calcolo dei frattali (linee 74 e 79):

//---- Upper Fractal
if(high[i]>high[i+1] && high[i]>high[i+2] && high[i]>= high[i-1] && high[i]>= high[i-2])

//---- Lower Fractal
if(low[i]<low[i+1] && low[i]<low[i+2] && low[i]<= low[i-1] && low[i]<= low[i-2])

In questi calcoli, sono confuso dai segni uguali in >= e <= (in rosso).

Ho sempre pensato che un frattale verso l'alto si forma quando, in una combinazione di almeno cinque barre, la barra media ha il massimo più alto, cioè è sempre sopra (non sopra o uguale a) i due massimi vicini sul lato sinistro e destro. Con il frattale verso il basso rispettivamente. Nella parte precedente del codice potete vedere che l'uguaglianza è permessa. Controlla se c'è un errore nel codice di Fractals.mq5.

 

Ho un segnale, il monitoraggio mostra una discarica al 100 per cento, l'account è a posto, ho bussato al telefono per tre giorni, sia al Service Desk che al personale dell'azienda. Nessuna risposta...

Come risolvere il problema....?

 
Stanislav Olhovsky:

Ho un segnale, il monitoraggio mostra una discarica al 100 per cento, l'account è a posto, ho bussato al telefono per tre giorni, sia al Service Desk che al personale dell'azienda. Nessuna risposta...

Come risolvere il problema....?

Non dovreste ritirare più di quanto avete guadagnato, allora la curva del saldo non andrà a zero.
 

Ho scritto a "Innovazioni nei preferiti" e c'è silenzio. Scriverò qui:

Windows 10 x64, Mozilla Firefox 39.0. Non posso inviare immagini o file allegati al mio account personale...

 
Karputov Vladimir:
Non si dovrebbe ritirare più di quanto guadagnato, poi la curva del saldo non andrà a zero.

Il segnale ha funzionato per quasi 4 mesi, solo aggiunte ribate, nessuno ha ritirato nulla lì, tutto era normale, crescita stabile... Nel terminale, i dati sono normali e in un altro monitoraggio online ....

Schermata da mybook allegata, lì è tutto normale.

Risposta del broker, la storia è memorizzata per 1 mese, ma allora due o tre mesi fa sui segnali sarebbe stato lo stesso...

File:
Error.png  36 kb
 
Si tratta di nuovo del "privato". Le articolazioni continuano...
 

Cari sviluppatori!

L'indicatore Bands e l'indicatore iBands hanno letture diverse. Nell'indicatore Bands la deviazione standard è calcolata usando la funzione StdDev_Func, mentre in iBands è calcolata usando il metodo GetData. Confrontando il modo in cui il grafico è disegnato, possiamo vedere una grande differenza nello stato dei buffer responsabili dei livelli di deviazione. Ho affrontato questo problema in MQL4, forse è lo stesso in MQL5.

 

Non ci avevo fatto molto caso prima, ma ora, quando lavoro con grandi array di oggetti di classe, ho notato un consumo di memoria troppo grande. Ho controllato con sizeof() e una classe assolutamente vuota prende 16 byte. E considerando che le classi qui sono gestite, aggiungiamo altri 8 byte per puntatore. Il totale è 24 byte. È troppo costoso.

Ho guardato la documentazione e ho visto quello che ho trovato lì:

объекты классов всегда имеют таблицу виртуальных функций, даже если в классе не объявлено ни одной виртуальной функции.

La domanda è perché le classi semplici (quelle che non partecipano all'ereditarietà) hanno bisogno della tabella delle funzioni virtuali, dato che tutto è noto su queste classi in fase di compilazione.

Si scopre che i metodi in essi sono chiamati nello stesso modo dei metodi virtuali, cioè c'è un ulteriore reindirizzamento dell'accesso attraverso la tabella. E dov'è la decantata ottimizzazione del compilatore? Come possiamo affermare dopo questo qualche confronto di prestazioni con C++?

 

Vi sbagliate.

Se un metodo non è descritto come virtuale, viene chiamato direttamente. Inoltre, ci sono ottimizzazioni per rimuovere la virtualità. Il distruttore è sempre virtuale, il che porta ad una tabella virtuale.

Circa 24 byte è una strana affermazione - il riferimento all'oggetto non si riferisce alla dimensione.

Le classi nei linguaggi gestiti/sicuri contengono sempre metainformazioni, quindi qui è tutto ragionevole. Se volete la dimensione pura, usate le strutture.

 
Renat Fatkhullin:

Il distruttore è sempre virtuale, il che si traduce in una tabella virtuale.

Allora perché il distruttore non dovrebbe essere ottimizzato? È solo a causa del distruttore che vengono memorizzati 8 byte extra...

I 24 byte sono una strana affermazione - il riferimento all'oggetto non riguarda la dimensione.

Beh, è solo che non so come tutto è implementato lì. Supponiamo che abbiate un array di oggetti:

CObj array[];

Il sistema memorizza riferimenti (puntatori) per ogni elemento?

Se volete la dimensione pura, usate le strutture.

Ma non puoi prendere un puntatore a una struttura e questo riduce la convenienza di usarla. Ecco perché a volte devi fare una scelta dolorosa... Se riesci a ridurre la dimensione della classe, sarebbe meraviglioso. E se hai anche un puntatore alla struttura, tutto andrà bene).
Motivazione: