Errori, bug, domande - pagina 2753

 
Alexey Navoykov:
In C# lo specificatore const è usato solo per espressioni costanti calcolate in fase di compilazione, mentre il C++ ha un suo analogo: constexpr,e MQL non ce l'ha.

è generalmente una questione di costruzioni sintattiche delle lingue

in un linguaggio naturale (in matematica) una costante è... Beh, è una specie di costante! ))

In C++ una costante è un controllo automatico da parte del compilatore per una costante nell'ambito (o vita) di una variabile

In C# una costante ha un significato sintattico che è più vicino alle regole di un linguaggio naturale


ed è su questo che verte la discussione:

const MqlTick _Tick; // Текущий _Symbol-тик.

Imho, questa costruzione è pienamente conforme alla sintassi C++, o almeno MQL4 aveva Bid e Ask, e nessuno aveva dubbi sulla validità di questo costrutto




Senza demagogia abbiamo bisogno della possibilità di accedere ai prezzi correnti il più rapidamente possibile. Il profiler mostra che l'accesso permanente a SymbolInfoDouble() e SymbolInfoTick() diminuisce la velocità di ottimizzazione

 
Mihail Matkovskij:

Come posso cambiare il compilatore?

Ho scoperto che il compilatore è incorporato in MetaEditor dalla build 900:https://www.mql5.com/ru/forum/21374

Allora perché c'è una finestra con una linea che porta alla directory dove è installato VS?

Compilatori

Обратите внимание, что компилятор переехал внутрь MetaEditor, начиная с 900 билда
Обратите внимание, что компилятор переехал внутрь MetaEditor, начиная с 900 билда
  • 2014.03.01
  • www.mql5.com
Консольный компилятор MQL4/MQL5 остался, обновляется вместе с платформами МетаТрейдер 4/5 и всегда доступен по ссылкам:.
 
Igor Makanu:

Senza demagogia, dobbiamo essere in grado di accedere ai prezzi correnti il più rapidamente possibile. Il profiler mostra che le chiamate costanti a SymbolInfoDouble() e SymbolInfoTick() riducono la velocità di ottimizzazione

Bene, qui è stato suggerito in precedenza di aggiungere la possibilità di passare NULL al posto del nome del simbolo corrente. Questo potrebbe accelerare il lavoro in casi speciali. In generale, abbiamo bisogno di accedere attraverso gli handle, non i valori testuali dei simboli. Ma penso che gli sviluppatori difficilmente andranno per una tale complicazione. Il problema sembra essere inverosimile.

Nelle misurazioni di cui sopra il costo era solo il 6% della corsa inattiva del tester (senza carico). E nel codice funzionante sarà un ordine di grandezza inferiore. Non vale la pena prestare attenzione a queste inezie, e chiamare queste funzioni più di una volta in un gestore è una decisione sbagliata in sé.

 
Alexey Navoykov:

Bene, qui prima è stato suggerito di aggiungere la possibilità di passare NULL al posto del nome del simbolo corrente. Questo potrebbe accelerare il lavoro in casi speciali, ma in generale abbiamo bisogno di un accesso tramite maniglie, non valori testuali di caratteri. Ma penso che gli sviluppatori difficilmente andranno per una tale complicazione. E non ne vale la pena, mi sembra. Il problema è piuttosto inverosimile.

Funziona già, ma non c'è accelerazione (ho controllato) - apparentemente tutto è già accelerato al massimo o viceversa - per l'accelerazione è ancora molto lontano (chiedete agli sviluppatori di sottolineare)

 
A100:

Quindi, per amore di rigore, dovremmo usare Digits() invece di _Digits. Allora, formalmente e senza contraddizioni logiche, Digits() non è vincolato dal modificatore const.

Per quanto ho capito _Digits era necessario per la compatibilità con MT4 - niente di più.

Forum sul trading, sistemi di trading automatico e test di strategia

Bug, bug, domande

Ilyas, 2020.05.20 15:39

La chiamata di Symbol() accede SEMPRE alla variabile globale _Symbol, così come Digits(), Point(), Period(), GetLastError(), IsStopped(), UninitializeReason()

 
Mihail Matkovskij:

Durante il debug e quando l'indicatore funziona da solo, nel log, improvvisamente scrive Stack overflow. Quando si esegue il debugging, appare il messaggio "Critical error occurred, debugging stopped". Ecco il mio thread simile:https://www.mql5.com/ru/forum/338301. Ma durante la compilazione il compilatore non rimprovera e tutto va bene. Quando si esegue il debug, è impossibile determinare in quale punto il programma si blocca.

Forse è il compilatore? Non mi interessa molto il compilatore che sto usando, ma nelle mie impostazioni appare così:

Ho VS installato, quindi ho questo link nelle impostazioni. Quindi anche il compilatore è appropriato...? Ma quale compilatore c'era quando non avevo VS, onestamente non ci sono entrato. Forse dovrei provare a tornare a quel compilatore e provare a compilare il progetto con esso?

Mentre cercavo il modo di risolvere il problema, con l'arrivo di un altro aggiornamento del terminale il debugging ha funzionato correttamente. Sono riuscito a trovare degli errori. Alcuni metodi andavano in loop e si chiamavano da soli. Ecco perché il programma è andato in crash con il messaggio "Stack overflow". Ma con l'aiuto di un debugger funzionante sono riuscito a trovare tutte le linee problematiche e a sistemarle. Esprimo la mia gratitudine agli sviluppatori per aver risolto rapidamente il bug con il debug!

 

в естественном языке (в математике) константа это... ну как бы константа! ))

In C++, una costante è un controllo automatico da parte del compilatore per una costante nello scope (o lifetime) di una variabile.

In C++ come in MQL, una costante può essere definita una volta alla creazione e non essere mai più cambiata. I cannocchiali non c'entrano nulla.

Non è molto diverso che in matematica.


 
Mihail Matkovskij:

Ho scoperto che il compilatore è incorporato in MetaEditor dalla build 900:https://www.mql5.com/ru/forum/21374

Allora perché questa finestra con una linea che porta alla directory dove VS è installato?


Il compilatore VS viene utilizzato se si scrive una DLL.

 
fxsaber:

Il che conferma ancora una volta che non ha sensousare direttamente _Digits,_Point , _Period, _LastError, ecc. (e anche _Symbol può essere sostituito da NULL). Infatti, devono essere dichiarati come const volatile

E voi, al contrario, suggerite di aggiungere

 
A100:

Il che conferma ancora una volta che non ha sensousare direttamente _Digits,_Point , _Period, _LastError, ecc. E anche _Symbol può essere sostituito con NULL.

E voi, al contrario, vi state offrendo di completare questa serie.

Il punto sta nella possibilità di passare per riferimento.

Motivazione: