Discussione sull’articolo "Crea i Tuoi Pannelli Grafici in MQL5"

 

Il nuovo articolo Crea i Tuoi Pannelli Grafici in MQL5 è stato pubblicato:

L'usabilità del programma MQL5 è determinata sia dalla sua ricca funzionalità che da un'elaborata interfaccia utente grafica. La percezione visiva a volte è più importante del funzionamento rapido e stabile. Ecco una guida step-by-step per la creazione di pannelli di visualizzazione sulla base delle classi della Libreria Standard.

Definiamo prima i termini. Il pannello di Visualizzazione è un termine che useremo per descrivere una visualizzazione personalizzata della finestra separata che non ha buffer di disegno. Tale pannello mostra semplicemente le informazioni richieste utilizzando gli oggetti grafico integrati nel Terminale. Le informazioni possono essere visualizzate:

  • numericamente,
  • come testo,
  • come colore,
  • ecc.

Daremo uno sguardo dettagliato ad ogni passaggio richiesto e creeremo un pannello grafico come segue:


Autore: MetaQuotes

 

Al momento la libreria è personalizzata per un solo pannello del grafico.

Se si tenta di aggiungere due pannelli, gli eventi vengono catturati in modo errato: gli elementi hanno lo stesso Id e l'Id del genitore non viene controllato.

Per verificarlo, ho preso il file demo Controls.mq5 e ho duplicato il pannello: tutti gli eventi sono duplicati in entrambi i pannelli, anche se non dovrebbero esserlo.

 
Nella voce "Riempimento del pannello di visualizzazione" possiamo usare qualcosa come
ObjCAppDialog.Create(chart,name,subwin,x1,y1,x2,y2))
invece di
CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2))
?
 
Rorschach:
Nella voce "Riempimento del pannello di visualizzazione" è possibile invece utilizzare qualcosa come ?

Buon giorno, forse si può dire che cosa fare.

Il tuo esempio ekspert Controlli.

Quando si passa a un periodo diverso l'esperto viene scaricato, provato a rimuovere ExtDialog.Destroy(reason); in OnDeinit().

Potete dirmi cosa devo fare per far sì che la finestra di dialogo continui a funzionare quando si passa ad altri periodi?

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
vdv2001:

Buongiorno, forse potete dirmi cosa fare.

Il tuo esempio è un Expert Advisor Controls.

Quando si passa a un altro periodo l'Expert Advisor viene scaricato, ho provato a rimuovere ExtDialog.Destroy(reason); in OnDeinit().

Può dirmi cosa devo fare per far sì che la finestra di dialogo continui a funzionare quando si passa ad altri periodi?

Grazie mille per la sua osservazione. L'errore è stato risolto. Aggiornamento nella prossima build.
 

IMHO, penso che sia più facile creare librerie a mano, per sapere dove e come usarle o per correggerle se qualcosa non va.

Esempio di scrittura di un pannello senza utilizzare classi standard: VirtualTradePad PositionsStyle

 

Ci si può chiedere perché l'uso di MQL5 Wizard per costruire una classe produca un codice che non si compila:


Come indicato nell'articolo, è necessario aggiungere manualmente questa riga di codice, il che è un po' strano per un Wizard destinato ai non-codificatori.

#include <Controls\Dialog.mqh>

Inoltre :

This article will demonstrate how easy it is to create your own display panels in a separate chart subwindow using the Standard Library classes.

Penso che questo sia uno scherzo, non ?

MQL5 Wizard: Creating Expert Advisors without Programming
  • 2011.01.11
  • MetaQuotes Software Corp.
  • www.mql5.com
Do you want to try out a trading strategy while wasting no time for programming? In MQL5 Wizard you can simply select the type of trading signals, add modules of trailing positions and money management - and your work is done! Create your own implementations of modules or order them via the Jobs service - and combine your new modules with existing ones.
 

"Questo è un po' strano per una procedura guidata destinata ai non-codificatori".

Non credo che questa procedura guidata sia destinata ai non-codificatori.

Potrebbe far sì che voi (programmatori alle prime armi) mettiate un piede nei primi passi necessari per creare qualcosa.

Il framework MQL5 offre un sacco di potenzialità e alcune di esse potrebbero essere scoperte con le creazioni guidate

ma credo che per ottenere qualcosa di più complesso come questo esempio sia sempre necessario avere le basi della programmazione.

Ma sono d'accordo che dovrebbe essere necessario includere le cose ovvie se si deriva da una classe base...

 
ugo58:

" Questo è un po' strano per una procedura guidata destinata ai non-codificatori".

Non credo che questa procedura guidata sia destinata ai non-codificatori.

Potrebbe far sì che voi (programmatori alle prime armi) mettiate un piede nei primi passi necessari per creare qualcosa.

Il framework MQL5 offre un sacco di potenzialità e alcune di esse potrebbero essere scoperte con le creazioni guidate

ma credo che per ottenere qualcosa di più complesso come questo esempio sia sempre necessario avere le basi della programmazione.

Ma sono d'accordo che dovrebbe essere necessario includere le cose ovvie se si deriva da una classe base...

Probabilmente hai ragione, ma pensavo che MQL5 Wizard fosse stato progettato prima di tutto per i non-codificatori. In ogni caso il problema è come un bug, in quanto è necessario aggiungere codice manualmente per compilare il codice creato da Wizard.

MQL5 Wizard: Creating Expert Advisors without Programming
  • 2011.01.11
  • MetaQuotes Software Corp.
  • www.mql5.com
Do you want to try out a trading strategy while wasting no time for programming? In MQL5 Wizard you can simply select the type of trading signals, add modules of trailing positions and money management - and your work is done! Create your own implementations of modules or order them via the Jobs service - and combine your new modules with existing ones.
 

Ho notato che nella libreria delle GUI utente (pannelli) è copiato un modello di eventi a mio parere non del tutto riuscito:

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
    ...
}

Innanzitutto, non tutti gli eventi hanno un insieme di variabili corrispondenti a int, long, double e string. Da qualche parte possono esserci più variabili che descrivono l'evento, da qualche parte meno, da qualche parte non coincidono con i tipi base proposti. Infatti, vediamo conversioni costanti come int -> bool, string -> int, double -> int, ecc. E se dal punto di vista della programmazione procedurale non si può fare praticamente nulla (perché non si possono creare 1.000.000 di funzioni sovraccaricate per ogni caso ipotetico), nell'ambito dell'OOP tutto può essere fatto in modo molto più semplice ed elegante.

Ma il problema principale di OnEvent è che questo gestore di eventi è destinato a gestire gli eventi ricevuti dal grafico, mentre l'evento può essere qualsiasi cosa, come l'apertura di una nuova posizione o il cambio di quotazione. In generale, OnEvent(...) non sembra un gestore di eventi universale, IMHO. Forse gli sviluppatori sono riusciti in qualche modo a gestire i propri eventi sulla base del CWnd esistente, ma per me utilizzare la libreria standard dei pannelli è ancora problematico.

Как использовать торговые классы Стандартной библиотеки при написании советника
Как использовать торговые классы Стандартной библиотеки при написании советника
  • 2010.11.10
  • Samuel
  • www.mql5.com
В статье рассказывается о том, как использовать основной функционал торговых классов Стандартной библиотеки при написании советников, в которых применяется открытие, закрытие и модификация позиции, проверка свободной маржи перед размещением торговых ордеров, размещение и удаление отложенных ордеров. Показано, как использовать торговые классы для получения свойств ордеров и сделок.
 

Grazie, l'ho studiato, è utile! Un momento: c'è in programma di creare una sorta di costruttore, in modo che i pannelli possano essere assemblati nel costruttore del modulo come in VS? perché non è molto comodo contare tutto a mano, forse è un segno di professionalità, ma ci vuole molto tempo)).

con le macro hanno ovviamente esagerato...