mktr8591 #: Non capisco il compito - hai bisogno che la classe MqlRatest (il suo template) sia dichiarata all'interno della sostituzione macro?
No, le classi sono già dichiarate. I commenti specificano il risultato che si vuole ottenere. L'input della macro è un oggetto e l'output è una classe che contiene il nome del tipo di quell'oggetto.
No, le classi sono già dichiarate. I commenti specificano il risultato che si vuole ottenere. L'input della macro è un oggetto e l'output è una classe che contiene il nome del tipo di quell'oggetto.
Non so come risolvere questo problema.
E ad ArraySortStruct con due parametri - ecco come funziona:
#define ArraySortStruct(ARRAY, FIELD) SortOnField_##FIELD::SORT::Sort(ARRAY)
ArraySortStruct_Define(SortOnField_, open)
ArraySortStruct_Define(SortOnField_, high)
ArraySortStruct_Define(SortOnField_, time)
voidOnStart()
{
MqlRates Rates[];
CopyRates(_Symbol, PERIOD_CURRENT, 0, 5, Rates); // Взяли барыPrint("\nБары без сортировки - как получили.");
ArrayPrint(Rates);
Print("\nСортируем по open-цене.");
ArraySortStruct(Rates, open);
ArrayPrint(Rates);
Print("\nСортируем по high-цене.");
ArraySortStruct(Rates, high);
ArrayPrint(Rates);
Print("\nСортируем по времени.");
ArraySortStruct(Rates, time);
ArrayPrint(Rates);
}
Questa potrebbe non essere una novità per nessuno, ma per me è inaspettata. Se una DLL viene utilizzata simultaneamente in diversi programmi MT5, tenere presente che viene caricata una volta dal primo programma in esecuzione che la utilizza. Cioè, l'ambiente DLL è in un processo comune, non importa quante volte lo importi. Qual è la fregatura? I puntatori globali usati nella DLL sono tutti nello stesso spazio di processo condiviso. E questo è molto conveniente.
Roman #: Forse questa non è una novità per nessuno, ma per me è inaspettata. Se la DLL è usata simultaneamente in diversi programmi MT5, , tenete presente che viene caricata una volta dal primo programma che la usa. Cioè, lo stato della DLL è in un processo comune, non importa quante volte la importi. Qual è la fregatura? I puntatori globali usati nella DLL sono tutti nello stesso spazio di processo condiviso. E questo è molto conveniente.
Questo non è niente di nuovo, è il modo in cui ha sempre funzionato dalla nascita.
Solo se i dati sono più grandi di __atomic__ l'accesso dovrebbe essere avvolto/protetto con sezioni critiche (o mutex al terminale std::thread)
Non sono sicuro di come mantenere la funzionalità (sottocampo e metodo) e l'usabilità. Forse questa opzione sarebbe adatta alle vostre esigenze.
Applicazione.
È stato velocissimo e ora funziona benissimo, grazie!
In Russia con amore❤️! ;-)
Questo è possibile nella versione attuale di MQL5? Non avevo l'ingegno per superare questo ostacolo:
Una volta era facile scrivere una tale macro in MQL5.
Questo è possibile nella versione attuale di MQL5? Non ho avuto l'intraprendenza per superare questo ostacolo:
Non capisco il compito - hai bisogno che la classe MqlRatest (template per essa) sia dichiarata all'interno della sostituzione macro?
Non capisco il compito - hai bisogno che la classe MqlRatest (il suo template) sia dichiarata all'interno della sostituzione macro?
No, le classi sono già dichiarate. I commenti specificano il risultato che si vuole ottenere. L'input della macro è un oggetto e l'output è una classe che contiene il nome del tipo di quell'oggetto.
Mi sembra necessario avere diverse sostituzioni di macro per parametri di tipo diverso.
Il compito è nato da questo.
Forum sul trading, sistemi di trading automatico e test di strategia
Peculiarità di mql5, consigli e trucchi
fxsaber, 2022.02.11 15:44
Ho colorato il parametro di input, in cui devo specificare il tipo. In questa macro ottengo tre parametri di input. E ne vorrei due - senza tipo.
No, le classi sono già dichiarate. I commenti specificano il risultato che si vuole ottenere. L'input della macro è un oggetto e l'output è una classe che contiene il nome del tipo di quell'oggetto.
Non so come risolvere questo problema.
E ad ArraySortStruct con due parametri - ecco come funziona:
E ad ArraySortStruct con due parametri - è così che funziona:
Hai ragione, grazie! Ho esagerato su un punto piatto. Lascerò la vostra variante per l'ordinamento.
Applicazione.
ZZY È un peccato che, per sottocampo o metodo, non funzioni.
Se una DLL viene utilizzata simultaneamente in diversi programmi MT5,
tenere presente che viene caricata una volta dal primo programma in esecuzione che la utilizza.
Cioè, l'ambiente DLL è in un processo comune, non importa quante volte lo importi.
Qual è la fregatura? I puntatori globali usati nella DLL sono tutti nello stesso spazio di processo condiviso.
E questo è molto conveniente.
Forse questa non è una novità per nessuno, ma per me è inaspettata.
Se la DLL è usata simultaneamente in diversi programmi MT5,
, tenete presente che viene caricata una volta dal primo programma che la usa.
Cioè, lo stato della DLL è in un processo comune, non importa quante volte la importi.
Qual è la fregatura? I puntatori globali usati nella DLL sono tutti nello stesso spazio di processo condiviso.
E questo è molto conveniente.
Questo non è niente di nuovo, è il modo in cui ha sempre funzionato dalla nascita.
Solo se i dati sono più grandi di __atomic__ l'accesso dovrebbe essere avvolto/protetto con sezioni critiche (o mutex al terminale std::thread)