Il mio approccio. Il nucleo è il motore. - pagina 158

 
Artyom Trishkin:

Aspetta. Hai scritto:

Allora, chi ha quale esercito?

Beh, attribuirò la tua maleducazione su "smart guy" al fatto che non parli bene il russo e non capisci che significa un atteggiamento peggiorativo e sprezzante nei confronti della persona con cui stai parlando.

Perché, hai perso il tuo senso dell'umorismo?

 
Vasiliy Sokolov:

Purtroppo sì. Un'interfaccia di callback tra due sistemi fondamentalmente diversi non è possibile.

In realtà, la domanda era quasi retorica)

IMHO, con la compatibilità NET aggiunta, è necessario aggiungere callback al terminale. Almeno uno) Almeno, per spingere l'evento nella coda del terminale.

 
Artyom Trishkin:

Se via timer, come lavorerete nel tester? Pensavo che avessi detto che stavi facendo codice multipiattaforma.

Artyom, quali domande? Se il timer non funziona, è emulato da altre fonti...

è anche nel "robot da battaglia" è sempre così, perché l'EventSetTimer:-)

ps/ c'è qualcosa di contagioso nei temi militaristi... posti di comando, robot da combattimento... "Galacteco Danger"

 
Dmitriy Skub:

In realtà, la domanda era quasi retorica)

IMHO, con l'aggiunta della compatibilità con NET, c'è una forte necessità di aggiungere call-back al terminale. Almeno uno) Almeno, spingendo l'evento nella coda del terminale.

Non sono in grado di catturare gli eventi in MT5, Spy++ non può vedere gli eventi del grafico per qualche motivo. Sembra che le classi auto-scritte e i modelli di eventi siano usati al posto degli eventi standard di Windows.

Anche io uso OnTimer, per questo cerco di ricevere un pacchetto di dati minimo nella richiesta, anche se alla velocità attuale del PC potrei essere avido)))

Artyom Trishkin:

Se il timer, come si lavora nel tester? Pensavo che avessi detto che fai codice multipiattaforma.

Quando ho provato a usare МТ5 è stato un vero piacere scrivere sotto C# - chiamo .dll, avvio immediatamente un modulo e metto tutta la grafica in un thread separato ( Thread ) e questo è tutto, dopo di che lavoro solo con lo scambio di dati tra C# e МТ5 e il modulo grafico con i pulsanti funziona come una normale applicazione widow - la richiesta da МТ5 riceve solo lo stato degli elementi cliccati in precedenza e nulla è frenato o lo sarà;)

 
Maxim Kuznetsov:

Artyom, cosa sono queste domande? Se il timer non funziona, è emulato da altre fonti...

questo è anche sempre il caso in "combat robot", perché EventSetTimer :-)

ps/ c'è qualcosa di contagioso nei temi militaristi... posti di comando, robot da combattimento... "Galacteco Danger"

Bene... Volevo chiedere a Vassili come avrebbe fatto. Per confrontarlo con quello che ho fatto io stesso molto tempo fa (non senza i consigli di Vasil, ovviamente)

 
Igor Makanu:

Non sono riuscito a catturare gli eventi in MT5, per qualche motivo Spy++ non riesce a vedere gli eventi del grafico, sembra che le classi e i modelli di eventi scritti in proprio siano usati piuttosto che quelli standard di widows, in MT4 posso inviare un evento widows senza problemi

Anche io uso OnTimer, per questo cerco di ricevere un pacchetto di dati minimo nella richiesta, anche se alla velocità attuale del PC potrei essere avido)))

Quando ho provato a usare OnTimer in MT5, il timer nel tester viene generato senza problemi ed è un vero piacere scrivere sotto C# - chiamo .dll, avvio immediatamente il modulo e metto tutta la grafica in un thread separato ( Thread ), dopo di che si lavora solo con lo scambio di dati tra C# e MT5 e il modulo grafico con i pulsanti funziona da solo come una normale applicazione widow - nella richiesta MT5 viene inviato solo lo stato degli elementi precedentemente cliccati, niente è lag e non sarà lag ;)

L'ho fatto in cinque tramite un timer nel tester. Anche il suo semplice utilizzo (è un multitimer al millisecondo) porta a un serio rallentamento del tester. Pertanto, è sufficiente rifiutare il timer nel visualizzatore - è la stessa cosa lavorare sui tick. Fatto due modelli - per timer e per eventi di bandiere attraverso OnTick(). Per timer in tempo reale, per tick - nel visualizzatore.

Bugie - tre modelli - anche attraverso OnChartEvent() - solo tempo reale anche lì.

 
Igor Makanu:

Non sono riuscito a catturare gli eventi in MT5, per qualche motivo Spy++ non può vedere gli eventi del grafico, sembra che le classi e i modelli di eventi auto-scritti siano usati piuttosto che quelli standard di widows, in MT4 posso inviare un evento widows senza problemi

Anche io uso OnTimer, per questo cerco di ricevere un pacchetto di dati minimo nella richiesta, anche se alla velocità attuale del PC potrei essere avido)))

Quando ho provato a usare OnTimer in MT5, il timer nel tester viene generato senza problemi, ed è un piacere scrivere codice sotto C# - chiamo .dll, avvio immediatamente il modulo e in un thread separato ( Thread ) tutta la grafica e questo è tutto, ora lavoro solo con lo scambio di dati tra C# e MT5, e il modulo grafico con i pulsanti funziona da solo come una normale applicazione Windows - nella richiesta MT5 viene inviato solo lo stato degli elementi precedentemente cliccati, niente è lag e non sarà lag ;)

Se si fa anche Modello a livello di MQL e altre cose a Sharpey, sarà fantastico. Allora la logica è separata, la vista è separata. Il frontend si occupa del design e dell'usabilità e non si occupa del backend commerciale. Cambiare la configurazione dei pulsanti su un modulo o dividere un modulo in due o tre non dovrebbe influenzare gli algoritmi dell'Expert Advisor.

 
Vasiliy Sokolov:

Peter, se non ti dispiace, preparerò un articolo su come un'applicazione grafica può essere creata abbastanza facilmente in MQL, utilizzando la nuova caratteristica di integrazione con le librerie .Net. Il titolo dell'articolo sarà "Creazione di moduli personalizzati in VisualStudio per esperti di trading basati su .Net Framework e C#".

Il tuo approccio e le tue idee mi hanno dato la carica. Mi chiedevo se fosse possibile creare un modulo grafico per il mio Expert Advisor in modo rapido e semplice, utilizzando solo competenze di programmazione di base. Ho fatto un esperimento, ed è risultato che è possibile! Ho un modulo come questo:

L'idea era che l'utente avrebbe disegnato il modulo richiesto nell'editor di VisualStudio e tutto il lavoro necessario per integrare questa finestra con il codice MQL sarebbe stato fatto dietro le quinte, in modalità automatica. Per fare questo, ho dovuto scrivere un controller C# - una sorta di analogo del vostro kernel, tuttavia, ci vogliono solo circa 200 righe di codice.

Potete leggere come funziona nell'articolo che ho iniziato.

Ecco, Vasiliy, hai coperto il tuo kernel con un calderone.

 
Dmitry Fedoseev:

Ecco, Vassily, abbiamo un calderone.

Generalmente ci si aspetta che finisca così, ma non c'è ancora un articolo specifico...

anche se c'è il 99% di possibilità che un tale articolo esca prima del kernel-engine. Peter deve attenersi alla percentuale rimanente.

 
Artyom Trishkin:

L'ho fatto nel cinque tramite il timer nel tester. Anche solo usarlo (ed è un multitimer al millisecondo) ha causato un serio rallentamento del tester. Pertanto, è sufficiente rifiutare il timer nel visualizzatore - è la stessa cosa lavorare sui tick. Fatto due modelli - per timer e per eventi di bandiere attraverso OnTick(). Per timer in tempo reale, per tick - nel renderer.

ZS. Mento - tre modelli - anche attraverso OnChartEvent() - anche lì solo in tempo reale.

Non ho ancora deciso il design, ho verificato che funziona nel tester senza problemi, grazie a@fxsaber per il suo aiuto con il codice #define - aggiungo automaticamente i gestori OnTick() e OnTimer() quando inserisco l'iniettore... così posso fare le chiamate necessarie in qualsiasi sezione dell'Expert Advisor

Non so nemmeno dove possa essere il ritardo, uso abbastanza spesso il timer - 400 ms, ma la chiamata arriva solo dal .dll 2 array int 10-ele-v e 2 int (quanti pulsanti e quante caselle di controllo, tale dimensione di array), ci semplicemente fisicamente non può rallentare, perché anche scrivere nell'array se il pulsante è stato cliccato, e nel numero int invio un pulsante, l'array non è necessario in linea di principio, come precauzione se l'utente ha un esaurimento nervoso e più veloce di 0,5 secondi batterà il pulsante )))

Immagino che abbiamo compiti diversi - quando si tratta della costruzione del TS, non hai bisogno della grafica, e quando si tratta del debug e della visualizzazione del TS, non hai bisogno della velocità del tester ;)


Maxim Kuznetsov:

Se si fa anche un modello a livello MQL, e il resto in Sharpay, sarebbe fantastico. Allora la logica è separata, la vista è separata. Il frontend si occupa del design e dell'usabilità e non viene coinvolto nel backend commerciale. Cambiare la configurazione dei pulsanti su un modulo o dividere un modulo in due o tre non dovrebbe influenzare in alcun modo gli algoritmi dell'Expert Advisor.

Lo terrò come un bel post! E scriverlo nella descrizione, se sono maturo per un commento pubblico