Errori, bug, domande - pagina 257

 
alexvd:

Non sembra.

Si scopre che ci sono stati solo 2 (su 45) trade perdenti, entrambi di acquisto.

Forse sto cercando nel posto sbagliato?


Segnato in rosso: le posizioni corte sono 5 su 45. Supponiamo che il 40 sia il 95%. Domanda - Perché 5 = 100%, è logico assumere - 5%.

Anche se mi sembra che in questo caso dovrebbero essere 5 (11,11%) e 40 (88,89%).

alexvd:

Prova a cancellare la cache. Ho provato diverse opzioni, diversi browser - l'aggiunta ha avuto successo.

Stai inserendo un'immagine direttamente in un commento e non come atach, vero?

Sì, nel testo. Ci proverò, anche se è stato aggiunto a questo forum senza problemi... :)
 
Interesting:

Segnato in rosso: le posizioni corte sono 5 su 45. Diciamo che il 40 è il 95%. Domanda - Perché 5 = 100%, è logico assumere il 5%.

Anche se mi sembra che ci dovrebbero essere 5 (11,11%) e 40 (88,89%) scambi.

Un totale di 45 scambi:

  1. 5 in vendita, 40 in acquisto
  2. 2 non redditizie (2 da acquistare), 43 redditizie (in totale).

Qui abbiamo i seguenti risultati

5 affari di vendita - 5, e il 100% di essi sono stati redditizi (non in perdita) (cioè tutti gli affari sono stati redditizi).

Compra scambi - 40, 38 di loro sono redditizi, cioè 38*100%/40=95%.

Ulteriori

Affari redditizi - 43 su 45, cioè 43*100%/45 = 95,56%

Operazioni in perdita - 2 su 45, cioè 2*100%/45 = 4,44%.

 
alexvd:

Un totale di 45 scambi:

  1. 5 in vendita, 40 in acquisto
  2. 2 operazioni perdenti (2 operazioni di acquisto), 43 operazioni redditizie (totale)

Il numero totale di accordi che abbiamo

Vendi affari - 5, di questi affari vincenti (non perdenti) - 100% (cioè tutti erano redditizi)

Compra scambi - 40, 38 di loro sono redditizi, cioè 38*100%/40=95%.

Ulteriori

Affari redditizi - 43 su 45, cioè 43*100%/45 = 95,56%

Scambi in perdita - 2 su 45, cioè 2*100%/45 = 4,44%

Grazie, ora sappiamo cosa è cosa...
 

Ho notato questo effetto. Quando si aggiunge l'indicatore al grafico(in una finestra separata), il grafico a candele principale smette di aggiornarsi (il prezzo si blocca), anche se nella finestra con le quotazioni tutto è OK - il prezzo cambia da rosso a verde. Anche se l'indicatore è stato aggiunto solo alla finestra di un simbolo, il prezzo si blocca anche nell'altra finestra. L'inizializzazione e il calcolo dell'indicatore sono all'interno del corpo: if(prev_calculated==0). I prezzi di chiusura che non partono dal giorno precedente partecipano al calcolo (il prezzo di chiusura attuale non partecipa). Dopo che il calcolo dell'indicatore è completato, il prezzo inizia a muoversi e a cambiare sincronicamente con la finestra.
Potete vederlo nella foto:

 
-Alexey-:

Ho notato questo effetto. Quando si aggiunge l'indicatore al grafico(in una finestra separata), il grafico a candele principale smette di aggiornarsi (il prezzo si blocca), mentre nella finestra con le quotazioni tutto è OK - il prezzo cambia da rosso a verde. Anche se l'indicatore è stato aggiunto solo alla finestra di un simbolo, il prezzo si blocca anche nell'altra finestra. L'inizializzazione e il calcolo dell'indicatore sono all'interno del corpo: if(prev_calculated==0). I prezzi di chiusura che non partono dal giorno precedente partecipano al calcolo (il prezzo di chiusura attuale non partecipa). Dopo che il calcolo dell'indicatore è completato, il prezzo inizia a muoversi e a cambiare sincronicamente con la finestra.
Potete vederlo nella foto:

Il primo calcolo risulta essere molto impegnativo in termini di risorse. Controllate, forse il codice dell'indicatore non è scritto nel modo più ottimale.

 
alexvd:

Il primo calcolo risulta essere molto impegnativo in termini di risorse. Controlla se il codice dell'indicatore non è scritto nel modo più ottimale.

Caro alexvd, purtroppo ci sono ora più di 3000 linee di codice nell'indicatore con più di 20 classi ed è difficile ottimizzare il codice (diverse centinaia di miliardi di operazioni di calcolo in loop), e questo numero può crescere fino a 10000 circa. Intendevo dire che è possibile separare in qualche modo l'aggiornamento delle quotazioni nel grafico a candele in un thread di programma separato e il caricamento dei calcoli degli indicatori in un thread separato. Francamente, quando ho iniziato il mio lavoro non pensavo che il problema delle prestazioni sarebbe stato così grave su un computer desktop, mentre voglio usare anche un piccolo portatile.
 
-Alexey-:
Intendevo dire che è possibile separare l'aggiornamento delle quotazioni nel grafico a candele in un flusso di programma separato e il caricamento dei calcoli degli indicatori in un altro flusso.
L'aggiornamento delle quotazioni nel grafico è solo una visualizzazione dei dati di base del terminale, sui quali vengono calcolati anche gli indicatori. Per risparmiare risorse, i dati di base del terminale sono passati all'indicatore come dati di ingresso, cioè non possono essere cambiati fino a quando il calcolo dell'indicatore è completato.
 
antt:
L'aggiornamento delle quotazioni sul grafico è solo una visualizzazione dei dati del database del terminale, che viene utilizzato anche per calcolare gli indicatori. Per risparmiare risorse, i dati di base del terminale sono passati all'indicatore come dati di ingresso, cioè non possono essere cambiati fino a quando l'indicatore è calcolato.
Capito, grazie!
 
-Alexey-:
Caro alexvd, purtroppo l'indicatore ora ha più di 3000 linee di codice che consistono di circa più di 20 classi ed è abbastanza difficile ottimizzare il codice (diverse centinaia di miliardi di operazioni di calcolo in loop), mentre questo numero può crescere fino a 10000 circa. Intendevo dire che è possibile separare in qualche modo l'aggiornamento delle quotazioni nel grafico a candele in un thread di programma separato e il caricamento dei calcoli degli indicatori in un thread separato. Francamente, quando ho iniziato il mio lavoro, non mi aspettavo che il problema delle prestazioni si sarebbe presentato così urgentemente su un computer desktop, mentre voglio usare anche un piccolo computer portatile.

Cerca di ottimizzare il rendimento dell'indicatore, il numero di oggetti e linee non è importante. Molto probabilmente è possibile far funzionare l'indicatore esistente (con 3000 linee) con la velocità necessaria.

Una variante interessante è quella di mettere tutti i calcoli ad alta intensità di risorse in un timer (se sembra essere possibile), quindi questi calcoli non saranno eseguiti ad ogni tick.

E vorrei ottimizzare il più possibile la scatola della calcolatrice (entro limiti ragionevoli).

 
Interesting:

Cercate di ottimizzare l'indicatore, il numero di oggetti e linee non è importante. Molto probabilmente è possibile far funzionare l'indicatore esistente (con 3000 linee) con la velocità necessaria.

Una variante interessante è se mettiamo tutti i calcoli ad alta intensità di risorse in un timer (se possibile), allora questi calcoli non saranno eseguiti ad ogni tick.

E il blocco calcolatore dovrebbe essere ottimizzato il più possibile (entro limiti ragionevoli).

In linea di principio, è possibile ottimizzare un po' il lavoro, perché alcuni dati identici sono calcolati in oggetti di classi diverse, cioè non una volta sola. Ma qui affrontiamo un altro problema, vale a dire - allontanarsi dal concetto di molte scatole nere, ognuna delle quali può essere debuggata e avere fiducia in essa (cioè ogni oggetto è un'unità completamente autonoma, e se il calcolo di alcuni dati intermedi, che è identico in diversi oggetti, si sposta al di fuori degli oggetti, l'autonomia sarà persa, permettendo di debuggare ogni classe separatamente. In questo caso la strutturazione del programma andrà persa, cioè non sarò in grado di capire quello che ho scritto e un minimo errore sarà impossibile da cogliere. Anche la velocità di debugging aumenterà drasticamente poiché dovrò eseguire l'intero algoritmo invece di una piccola parte di esso. Ecco come il numero di oggetti influenza la velocità.

Ecco perché penso che un'ottimizzazione simile potrebbe essere provata nella fase finale, quando l'indicatore è completamente creato, debuggato e testato, ma purtroppo è ancora molto lontano (sto lavorando alla fase iniziale da circa 4 mesi, da quando ho finalmente capito che sono pronto a provarlo). Nei libri di Econometria e Matematica tutto è sparso in frammenti in diversi libri (non c'è una presentazione del materiale praticamente unificata nei dettagli), gli autori hanno errori e discrepanze nei termini e negli algoritmi, che vengono trovati dai principianti solo quando si fa riferimento ai dizionari enciclopedici, l'informazione teorica entra in conflitto con la possibilità della sua realizzazione pratica, cioè la realizzazione sotto forma di metodi numerici, e i metodi numerici stessi a loro volta fanno richieste alla funzionalità dell'ambiente software), il processo è lungo e noioso.

Secondo la logica del calcolo, deve avvenire dopo la formazione di ogni candela, quindi originariamente doveva essere collocata nel corpo della funzione "is new bar", ma il fatto che il suo tempo può superare questo intervallo mi ha fatto collocarla nel corpo della funzione if(prev_calculated==0) in modo che si verificasse solo una volta in fase di debug. Penserò al tuo suggerimento del timer - grazie.

Документация по MQL5: Основы языка / Функции
Документация по MQL5: Основы языка / Функции
  • www.mql5.com
Основы языка / Функции - Документация по MQL5
Motivazione: