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

 
jdjahfkahjf:
Non avete ancora capito che il futuro del trading, e il suo apice, sono i pulsanti.
E questi bottoni, Peter, saranno venduti ad altri venditori. Chi, a sua volta, vende cosa? Avete indovinato, anche i bottoni.
Ma per vendere bottoni ad altri venditori di bottoni dovrà comprare bottoni da altri produttori di bottoni.

Esilarante :)))

 
Dmitry Fedoseev:

Ben fatto, tu******* prendere una torta dallo scaffale.

OK, cercherò di giustificarlo:

Se vai con la tua soluzione, l'utente dovrà ancora copiare il codice sorgente della classe statica nel progetto, che tradurrà gli eventi, eseguirà il modulo in un thread separato bene, ecc. Inoltre, è necessario collegare staticamente il modulo a questa classe, cioè inserire esplicitamente il nome della classe del modulo e dei suoi componenti. Cioè modificate esplicitamente il vostro codice di livello quando un modulo viene cambiato o qualche elemento viene aggiunto. In altre parole, una soluzione semplice e diretta, funzionerebbe bene per dimostrare l'interazione con un modulo specifico, che è quello che avete mostrato. In un caso generalizzato, è meglio separare la logica di controllo dalla logica di visualizzazione, che è quello che ho fatto. Inoltre, questa separazione permette di proteggere il controllore da modifiche non qualificate.

Ecco un commento che risponde esattamente alla domanda sul perché è stato fatto in questo modo e non nell'altro modo:

Igor Makanu:

probabilmente hai ragione, è più facile per un utente abbozzare elementi grafici in un modulo in VS2017, poi controllare eseguendo la sua creazione in VS, avendo fatto in modo che "tutto gira", può passare a creare un programma di interazione in .Net e MT5

...

Il tuo modo è probabilmente più pratico.

 
Реter Konow:

Esattamente. Ci sarà un enorme database di Cyb-code con immagini. Entrare, selezionare, ottenere il codice, inserire nel costruttore, ottenere il nucleo con i file di connessione. E il collegamento è già pensato e molto più facile.

Quindi, ogni modulo è in un file separato. Anche se fosse più semplice, le possibilità sono limitate.

 
Dmitry Fedoseev:

Quindi anche lì, ogni modulo è in un file separato. Anche se fosse più semplice, le possibilità sono limitate.

Ad essere onesti, non ho ancora afferrato completamente la tecnologia, quindi non posso ancora dire nulla sui limiti della soluzione di Vasiliy.

 
Реter Konow:

Basil, senza offesa, ma un pannello come questo

Ho circa questo tipo di codice:

Questo codice può essere semplicemente passato all'altro, o messo in una base comune e non c'è bisogno di disegnare un modulo appositamente per tutti.

L'ho incollato nel costruttore e ho ottenuto un'altra finestra con tutti i parametri e le connessioni degli elementi.

Peter, per disegnare il tuo stesso pannello, devo imparare il tuo linguaggio di markup. L'utente non ha bisogno di altro che di un mouse e di competenze di base per disegnare questo pannello in Visual Studio. Senti la differenza?

 
Реter Konow:

Ad essere onesti, non ho ancora afferrato completamente la tecnologia, quindi non posso ancora dire nulla sui limiti della soluzione di Vasiliy.

E non ho scritto dei limiti della soluzione di Vasiliy.

 
Vasiliy Sokolov:

Peter, per disegnare lo stesso pannello del tuo, devo imparare il tuo linguaggio di markup. L'utente non ha bisogno di nulla per disegnare questo pannello in Visual Studio, solo un mouse e delle competenze di base. Riesci a sentire la differenza?

Vasily, una persona studia il mio linguaggio di markup e scrive il pannello. Mille altri vedono la foto del pannello e prendono il cyber-codice già pronto. Lo incollano nel mio costruttore e ottengono il pannello nel loro programma.

 
Реter Konow:

Pre-letto, ma continuerà a rileggere per entrare nei dettagli.

1. Perché l'articolo dice 5 richieste al secondo? Ho una frequenza di 30ms.

2. Puoi mostrarmi com'è un collegamento a una tabella di mille celle?

3 Per quanto ho capito, chiamando gli elementi del modulo con i loro nomi inviati alla funzioneGuiController::SendEvent? Bisogna specificare tutti i parametri? Nome, evento, valore? Qualche altro zero... E nel timer per fare un ciclo sugli eventi?

In altre parole, l'utente crea lui stesso la coda degli eventi e poi la passa al Controller nel timer?


Devo ringraziarvi per la grande promozione del mio tema.

1) Non fa differenza. Puoi impostarlo su qualsiasi frequenza tu voglia.

2) Le tabelle non sono supportate ora (a proposito, ottimo motivo per il vostro tifo:)

3) Sì, indirizzando per nome, bisogna specificare tutti i parametri. Ma, e questa è la cosa più importante, non esiste un unico modello monolitico di eventi. Se vuoi il tuo modello, sei il benvenuto. È elementare farlo. Ma non si può fare a meno del timer.

La coda di eventi è un algoritmo generalizzato per la gestione affidabile degli eventi. L'utente non compone nulla; gli eventi generati da lui arrivano alla coda da soli. La coda stessa consiste in un solo evento il 99,9% delle volte.

 
Vasiliy Sokolov:

OK, cercherò di giustificarlo:

Se andiamo con la tua soluzione, l'utente dovrà ancora copiare il codice sorgente della classe statica nel progetto, che tradurrà gli eventi, eseguirà il modulo in un thread separato, ecc. Inoltre, è necessario collegare staticamente il modulo a questa classe, cioè inserire esplicitamente il nome della classe del modulo e dei suoi componenti. Cioè modificate esplicitamente il vostro codice di livello quando un modulo viene cambiato o qualche elemento viene aggiunto. In altre parole, una soluzione semplice e diretta funzionerebbe bene per dimostrare l'interazione con un modulo specifico, che è quello che avete mostrato. In un caso generalizzato, è meglio separare la logica di controllo dalla logica di visualizzazione, che è quello che ho fatto. Inoltre, questa separazione permette di proteggere il controllore da modifiche non qualificate.

Ecco un commento che risponde esattamente alla domanda sul perché è stato fatto in questo modo e non nell'altro modo:

Il problema più grande è lanciare il modulo in un thread separato, ma è risolto da due righe di codice, quindi alla fine non è un problema. Inoltre, nel mio esempio ho fatto intenzionalmente l'apertura del secondo modulo, per mostrare quanto sia facile e semplice da fare, e come si possa aprire qualsiasi numero di moduli in thread separati.

E quello evidenziato nella citazione - il fieno e la paglia sono la stessa cosa? Sì, per mangiare una banana bisogna sbucciare la buccia.

 
Реter Konow:

Ad essere onesti, non ho ancora compreso appieno la tecnologia, quindi non posso ancora dire nulla sui limiti della soluzione di Vasiliy.

Non c'è nessun limite di capacità lì, tutto è limitato né più né meno della funzionalità degli elementi grafici di Windows, leggete l'articolo della sezione"Sotto il cofano di GuiController", aggiungete i controlli necessari nel designer di moduli e quali eventi avete bisogno di ricevere in MT5, aggiungeteli a <element - list of event handlers>.

Vasiliy Sokolov:

2) Le tabelle non sono supportate ora (a proposito, grande motivo per la vostra gioia:)

Mi congratulerò anche con Peter, ho fatto funzionare la tabella in un modulo separato in una .dll su .Net, eventi click destro, ordinamento, e altri charms dataGridView tutti funzionano, ha fatto in parte esperimenti tabella come il terminale, ma piuttosto capriccioso e lento dataGridView , ho provato molte cose con esso ( e riempito un datatable clone e poi copiato al datatable che è collegato a un dataGridView e . e googlando per una settimana e sperimentando, mentre con dataGridView un fiasco completo - non si può scrivere su di esso più di 3-5 secondi) una tabella 10x11 è già critica, anche se il modulo con la tabella e gira in un thread separato

SZY: mi ci sono volute 2 ore per collegare StringGrid a MT4 in Delphi, non ero affatto preoccupato di come funzionava, ma tutto volava, tuttavia con Microsoft dataGridView è un problema, oggi proverò a sperimentare con SourceGrid, secondo i feedback è più veloce di dataGridView