L'arrivo di una nuova generazione di software di trading. Come dovrebbe essere l'interfaccia EA? - pagina 12

 
Yury Kulikov:
Com'è tutto incasinato :)
Stavo parlando di un esempio di creazione di interfaccia utilizzando il tuo indicatore di navigatore di file, implementato in Expert Advisor. Ma non aggrappatevi alle parole "navigatore di file", è un esempio di un compito, e ci possono essere molti compiti simili in Expert Advisors: navigatore di finestre di terminale, oggetti sul grafico, indicatori nel terminale ... E questo è solo un piccolo strato di compiti che possono essere implementati attraverso una lista (tabella) di stringhe che volete ottenere nel vostro indicatore tramite variabili globali.
Sono un po' confuso in questo momento, e mi sfugge il senso dei tuoi post. Le mie scuse. Un po' più tardi descriverò in dettaglio il concetto di motore, studio, interfaccia e EA. Dopo di che possiamo discuterne. :)
 

1. Il concetto di motore grafico.

2. Concetto del nucleo grafico.

3. fasi di creazione di uno studio visivo per la piattaforma MT.

4. Descrizione del meccanismo di creazione di un'interfaccia EA.


1. Il motore grafico è un programma fatto come un indicatore. Questo programma è progettato esclusivamente per la gestione dell'interfaccia utente. Esegue una serie di funzioni di base:

  • Caricamento del nucleo dell'interfaccia grafica da un file.
  • Salvataggio delle impostazioni dell'interfaccia utente.
  • Implementazione di un controllo unico e coerente di tutti i processi dell'interfaccia. Implementa la "meccanica" dell'interfaccia, tra cui: apertura e chiusura delle finestre, ridimensionamento delle finestre, spostamento delle finestre, fusione delle finestre, zoom, riproduzione di script, cambiamento degli stati degli oggetti, binding degli oggetti, controllo dei valori dei parametri dei controlli secondo i loro tipi e proprietà, creazione e cancellazione di variabili globali.

Il motore grafico viene aggiunto al grafico come qualsiasi altro indicatore. Include il seguente set di finestre:

  • Barra delle applicazioni, sul lato destro della quale saranno aggiunte diverse icone per chiamare le finestre di servizio del motore stesso.
  • Navigatore di file, che sarà utilizzato per selezionare il file di avvio da una lista di file con interfacce situate in una cartella speciale.
  • Finestre di Setup opzionali, che non giocano un ruolo principale in questa fase.

Questo, in linea di principio, è la fine del concetto di motore grafico. Ciò che è importante è che l'interfaccia non può funzionare senza di essa.



2. Un kernel grafico è un blocco di informazioni che contiene i dati di tutti gli oggetti e le finestre di un'interfaccia, che viene registrato in un array e salvato in un file.

Questo blocco è una rappresentazione digitale dell'interfaccia grafica. Viene caricato dal motore grafico su istruzione dell'utente. Il motore grafico stesso ha un proprio kernel grafico interno che assicura il funzionamento delle proprie finestre e all'interno di questo kernel viene allocato lo spazio libero per l'integrazione dell'interfaccia utente (nella forma digitale) in esso. L'integrazione viene eseguita nel processo di caricamento del nucleo grafico da un file.


3. La creazione di uno studio visivo sulla piattaforma MT, da quanto ho capito, si divide in due fasi:

  • Nella prima fase, sarà creata una versione su file del costruttore di interfacce. In esso, l'utente lavorerà con modelli di tabelle. Nelle tabelle, l'utente scriverà i tipi e i nomi degli elementi dell'interfaccia e imposterà le proprietà dei loro parametri. La creazione sarà un processo estremamente user-friendly, dove l'utente non dovrà preoccuparsi del corretto posizionamento dei suoi elementi nelle finestre (il motore calcolerà tutto automaticamente) e dovrà solo disporre gli elementi nell'ordine richiesto.
  • Nella seconda fase, sarà creato un ambiente visivo che implementa lo stesso metodo di costruzione dell'interfaccia del costruttore di file, solo che sarà più facile e comodo da usare. Aggiungerà anche la possibilità di cambiare l'aspetto dei controlli. In generale, l'utente avrà più opzioni grafiche.


4. Voglio delineare il meccanismo di creazione dell'interfaccia in termini generali, e sollevare leggermente il velo sulla sua tecnologia. Spiega da dove viene la facilità di creare un'interfaccia tramite un file.

Questo è il caso: il motore ha una funzione speciale che crea un kernel grafico completo basato su un singolo file con una quantità minima di informazioni di caricamento. Le informazioni di avvio in questo file sono autoesplicative e leggibili dall'uomo. È facile da scrivere e modificare. Per esempio dovete scrivere "_CREATE_NEW_WINDOW" per creare una finestra, e "_CHECKBOX" e il nome della casella di controllo, (il motore riconosce automaticamente il nome dell'elemento, come nome dell'elemento stesso e come nome del suo parametro).

Questa funzione si chiama "G_CORE_BUILDER()" e costruisce il nucleo grafico prendendo dati da due fonti principali: un file di avvio creato dall'utente e l'array "CONTENT[]", che contiene tutti i gruppi di oggetti standard inclusi nelle piattaforme e nei controlli delle finestre. "CONTENT[]" contiene anche stati e script di oggetti. Tutto in una sola matrice. In generale, il materiale di origine da "CONTENT[]" + il file loader creato dall'utente viene utilizzato da "G_CORE_BUILDER()" per costruire il nucleo grafico con cui lavora il motore.

 

Per evitare confusione, vorrei aggiungere che il file di avvio può essere in due formati:

1. Sotto forma di un insieme di istruzioni definite dall'utente, che descrivono finestre, controlli e proprietà dei loro parametri. In questo caso, nella fase di caricamento, viene lanciata la funzione "G_CORE_BUILDER()" che costruisce il nucleo grafico.

2. Sotto forma di nucleo grafico pronto che viene caricato direttamente nel motore. In questa variante, non c'è bisogno di usare la funzione "G_CORE_BUILDER()".

La prima opzione sarebbe usata nel costruttore dell'interfaccia e la seconda per eseguire l'interfaccia pronta di qualsiasi applicazione.

Una versione semplificata del motore caricherà il kernel grafico pronto, da cui il sistema di costruzione del kernel ("G_CORE_BUILDER()" e l'array "CONTENT[]" saranno rimossi) al fine di semplificare il suo funzionamento.
 
Реter Konow:
Disegnare un'immagine non è ancora un'interfaccia, la questione più importante che non stai menzionando è come l'Expert Advisor interagirà con l'indicatore, le"variabili globali" suonano in qualche modo vaghe.
 
Yury Kulikov:
Disegnare un'immagine non è ancora l'interfaccia, la domanda più importante che non stai menzionando - come l'EA interagirà con l'indicatore, attraverso le"variabili globali" suona in qualche modo vago.
Al momento il sistema di interazione dell'Expert Advisor con l'interfaccia implementata nell'indicatore tramite globals è solo sulla carta, e non ho avuto alcuna esperienza nella sua creazione. Cercherò di descrivere la mia idea in modo più dettagliato, e se trovate contraddizioni o errori in essa, per favore commentate.

1. Lasciate che vi ricordi ciò che tutti sanno: ogni variabile globale è nello scope di tutti i programmi caricati nel grafico. Per creare una variabile globale, dovete chiamare la funzione speciale e passarle il nome della variabile e il suo valore.

2. Le variabili globali saranno create dal motore nella fase di caricamento dell'interfaccia, che leggerà il file di avvio. I nomi delle variabili globali e i loro valori salvati (o preimpostati) saranno scritti nel file di avvio stesso.

3. C'è un blocco speciale all'interno del motore che è responsabile del controllo dei valori dei parametri dei controlli secondo il tipo di elemento, il tipo di valore e le proprietà del parametro. Quando l'utente seleziona una casella di controllo o rimappa un valore in un elemento 'spin edit', il blocco di interazione dei parametri del controllo esegue azioni specifiche su un valore specifico, una variabile specifica.

4. Dato che la variabile è globale, il suo valore sarà costantemente "osservato" dall'Expert Advisor, e reagirà ai cambiamenti del valore di ciascuna delle variabili globali secondo gli algoritmi incorporati in essa.

5. L'Expert Advisor non solo "osserva" le variabili globali, ma lavora completamente con i loro valori dalla sua funzionalità. In questo caso, è importante capire che le variabili globali saranno condizionatamente divise in due tipi: variabili "controllate" dall'utente, i cui valori saranno impostati dall'utente attraverso i controlli nell'interfaccia, e variabili "controllate" dalla funzionalità EA, i cui valori saranno impostati dalle funzioni utente.

6. Il motore, a sua volta, lavorerà con entrambi i tipi di variabili globali condizionali. Ho descritto il principio di lavorare con valori di variabili "sotto controllo" dell'utente, e il principio di lavorare con valori "sotto controllo" della funzionalità EA sarà il seguente: lo stesso blocco divide condizionatamente i controlli in due categorie: quelli che controllano il valore, e quelli che mostrano il valore (visualizzandolo in qualsiasi modo). Ogni controllo di questo tipo (campo di input, barra di avanzamento, ecc...) è iscritto all'evento di cambiamento di valore della sua variabile. Non appena il valore di qualsiasi variabile cambia, il blocco si riferisce all'elemento corrispondente ed esegue la manipolazione con quell'elemento, che è fornito nel tipo di elemento per default.

Notate che il blocco passa attraverso tutte le variabili globali alla frequenza del timer, "seguendo" così il comportamento dei valori delle variabili controllate funzionalmente.

//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
P.S. Per quanto riguarda la domanda su come caricare le impostazioni EA dall'interfaccia utente, nella mia mente, sarà fatto nel seguente modo:

I valori di tutte le variabili globali, con cui l'EA opera (incluse quelle che rappresentano le impostazioni dell'EA), saranno memorizzate nel file di caricamento prima di essere distrutte all'evento di scarico dell'EA. Ad ogni caricamento dell'interfaccia, queste stesse variabili globali saranno create di nuovo e prenderanno i loro valori originali. Poi l'Expert Advisor sarà caricato e accederà alle sue variabili.
 
Реter Konow:

Come si può passare del testo (ad esempio il nome del file) attraverso una variabile globale?

Come può l'Expert Advisor attivare/disattivare una finestra?

Come può l'Expert Advisor creare una nuova finestra mentre l'Expert Advisor è in esecuzione?

...

 
Yury Kulikov:

1. Come posso passare del testo (ad esempio il nome del file) attraverso una variabile globale?

2. Come può l'esperto attivare/disattivare la finestra?

3. Come può l'Expert Advisor creare una nuova finestra mentre l'Expert Advisor è in esecuzione?

...

1. Questo compito non è stato ancora risolto. Posso suggerire un paio di varianti indovinate:

a) Passare la stringa per mezzo del nome stesso della variabile globale. Dato che le variabili sono indicizzate, il motore e Expert Advisor hanno sempre bisogno di "conoscere" l'indice della variabile glob da cancellare e creare di nuovo per trasferire il testo, cambiandone il nome ogni volta e passando la stringa attraverso di essa. A prima vista, l'opzione sembra disordinata, ma chissà, forse può essere migliorata...

b) Trasmettere una stringa con il valore di una variabile, consecutivamente con lettere, dove al posto delle lettere stesse saranno trasmessi i numeri corrispondenti, e il processo di trasmissione sarà effettuato in n-numero di periodi di timer.

2. Al momento, il mio concetto manca del metodo di attivazione/disattivazione delle finestre sul lato EA. Ad essere onesti, non sono sicuro di cosa intendiate. Le finestre saranno trattate solo dall'utente e dal motore. L'Expert Advisor si occupa solo delle variabili e delle proprie funzioni. Non ha ancora accesso all'interfaccia. (E che senso ha?).

3. le nuove finestre (composite), che l'utente può raggruppare insiemi di finestre (componenti) a sua discrezione, saranno create dal motore e non da Expert Advisor. per esempio, cliccando sulla voce del menu principale "nuova finestra". È importante che tutte le finestre raggruppate siano già create nell'interfaccia e il numero di finestre composte usate per raggruppare le informazioni richieste dall'utente può essere (condizionalmente) illimitato. Gli insiemi di finestre e il loro contenuto saranno salvati in un file.

 
Реter Konow: Non ha ancora accesso all'interfaccia. (E che senso ha?)

Il punto è fondamentale. Gli eventi non si verificano solo nell'interfaccia.

Ci sarà più di un iceberg sulla strada del vostro Titanic. Avete iniziato il progetto dalla parte sbagliata e le variabili globali non vi aiuteranno.

 
Yury Kulikov:

Il punto è fondamentale. Gli eventi non si verificano solo nell'interfaccia.

Ci sarà più di un iceberg sulla strada del vostro Titanic. Avete iniziato il progetto dalla parte sbagliata e le variabili globali non vi aiuteranno.

Bene, su quale bordo pensate che avrei dovuto iniziare il progetto e cosa può aiutarmi?
 
Реter Konow:
OK, ma dove pensi che avrei dovuto iniziare il progetto, e cosa può aiutarmi?

Penso che dovremmo iniziare dall'esperto. Ho dato tre tipi di compiti che sono rilevanti per l'esperto, ma risulta che non sono fattibili nella vostra interfaccia.

Cosa potrebbe aiutare? Forse un'integrazione più profonda, o limitare il progetto al "controllo remoto".