hini #: Perché nel tester non chiama OnChartEvent.
È vero. Ma nella stessa situazione in MT4 c'erano possibili varianti. Ne ho implementata una con successo. L'interfaccia funzionava per un Expert Advisor in esecuzione nella modalità normale, ma poteva controllare la sua copia in esecuzione nel tester. La connessione è stata realizzata attraverso le risorse. L'EA sul grafico ha ricevuto tutti i dati durante il processo di test. Con MT5, forse, la situazione è più complicata. Non sono sicuro che sia possibile stabilire una "comunicazione" tra due copie tramite risorse. Questo problema richiede uno studio separato.
Vi ricordo l'elenco degli argomenti da considerare:
1. Orientarsi nell'elenco di intellisense e selezionare la funzione della finestra giusta.
2. Apertura e chiusura programmatica delle finestre.
3. Orientarsi nell'elenco di intellisense e selezionare l'elemento giusto nella finestra giusta.
4. Navigare negli elenchi di proprietà dei singoli elementi.
5. Parsing del nome di un elemento e funzione wrapper della finestra.
6.restituzione del valore del parametro di un elemento selezionato a una variabile del suo tipo. Considerare tre tipi di elementi diversi.
7. Impostazione di valori nei parametri di diversi tipi di elementi. Vediamo come appariranno i valori nelle finestre dell'interfaccia di questi elementi.
8. Restituzione dei valori dei parametri di un elemento, modifica e inoltro del valore a un altro elemento. Considerare diversi tipi di elementi e valori e testare l'inoltro tra diversi tipi di elementi in diverse finestre.
9. Restituzione del valore precedente (_V_LAST). Quando e in quali casi è richiesto l'ultimo valore (da non confondere con il valore corrente).
10. Testare l'impostazione degli stati ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK per diversi tipi di elementi.
11. Proviamo a collegare e sincronizzare le modifiche dei valori di elementi di tipo diverso: ad esempio, campo di input con pulsanti e cursore. Supponiamo che quando il valore di un elemento (manuale o software) cambia, il valore del secondo elemento cambi di conseguenza.
12. Proviamo a reimpostare programmaticamente i confini dell'intervallo dello slider e del campo di input con pulsanti tramite funzioni wrapper. Non ho avuto il tempo di testarlo, ma qualcosa mi suggerisce che funzionerà. Comunque, vediamo.
13. Proviamo a restituire gli stati degli elementi tramite funzioni wrapper. È inclusa nella funzionalità, ma non ho avuto il tempo di testarla. Quindi vedremo... Il risultato è sconosciuto.
14. Otteniamo e impostiamo i colori per il testo e le basi degli elementi. Possiamo provare ad associare questi colori ad alcuni semplici eventi o confini di valori.
15. Vi spiegherò meglio come navigare e leggere la nuova stampa del file API.
//------------------------------------------
Il colore giallo indica gli argomenti già trattati.
Il concetto di separazione delle proprietà in elenchi, in base alla "parentela" degli elementi, è stato implementato con successo.
Come risultato dell'implementazione, sono stati creati 7 elenchi di proprietà unici per tutti i tipi di elementi.
A ogni elenco viene assegnato un identificatore speciale. Si tratta del prefisso p (abbreviazione di property) e di un numero di serie.
Di conseguenza, ogni elenco può essere trovato in intellisense con sette prefissi: p1, p2, p3, p4, p5, p6 e p7.
Per comodità e per evitare confusione, i prefissi degli elenchi di proprietà sono impressi nei nomi delle funzioni wrapper:
Quando si inserisce il prefisso, appare un elenco di proprietà individuali. Ho sottolineato la parola "singole" di proposito, perché questo punto è di fondamentale importanza.
Per restituire e impostare i valori delle proprietà, le funzioni wrapper accettano nomi di proprietà SOLO con il prefisso scritto nel proprio nome:
Solo queste proprietà dell'elenco sono disponibili per la casella di controllo. Tuttavia, l'elenco stesso non appartiene solo alla casella di controllo, ma anche ad altri elementi.
L'elemento C_LIST non ha ancora proprietà speciali nella sua lista. Solo le azioni che possono essere eseguite dal wrapper (tranne la restituzione di V_LAST - l'ultimo valore).
All'elemento S_EDIT appartiene un'ampia gamma di proprietà e azioni disponibili:
Enfasi aggiunta:
Ogni funzione wrapper accetta solo proprietà con il prefisso scritto nel suo nome.
Ecco come si presenta in pratica il lavoro con gli elenchi(mettere le parentesi alla fine, perché intellisense non funziona all'interno delle parentesi delle funzioni wrapper):
La gif è leggermente velocizzata.
Come risultato delle chiamate mostrate nella gif, le funzioni wrapper restituiscono i valori delle proprietà specificate.
Prima della chiamata, è necessario dichiarare una variabile per memorizzare il valore della proprietà o il risultato dell'esecuzione della funzione. Maggiori informazioni al riguardo sono contenute nei seguenti argomenti.
Elaborazione_dei_dati -Il nome di questa finestra (per le finestre di avviso il nome potrebbe non coincidere con Caption, il testo nell'intestazione della finestra).
Si noti che la funzione finestra non dispone ancora di un prefisso per aprire l'elenco delle proprietà. Questa funzione apparirà sicuramente. Verrà generato un elenco speciale di proprietà della finestra da restituire/impostare e verrà assegnato un prefisso. Inoltre, la funzione finestra non contiene ancora una lettera per il tipo di ritorno.
Per ora, la funzione può solo aprire o chiudere una finestra.
Questi difetti saranno risolti nella prossima versione.
Si raccomanda di riassumere queste informazioni di tutorial una volta in privato e separatamente, altrimenti si rischia di ingolfare i commenti in futuro.
hini #: Si raccomanda di riassumere queste informazioni sulla formazione una volta sola, privatamente e separatamente, per evitare di ingolfare i commenti in futuro.
Naturalmente, queste informazioni saranno riassunte e ordinate come si deve.
Nel periodo attuale, l'ordine delle istruzioni, delle spiegazioni e dei commenti è in fase di formazione. Il contenuto della futura documentazione si accumula armoniosamente nel processo di sviluppo e di comunicazione con gli utenti. Di conseguenza, le informazioni di base sono presentate in parti. Ricevere feedback è necessario ed è una fase importante che aumenta la qualità delle soluzioni tecniche. Il software attraversa una fase formativa e sarà in grado di raggiungere la piena funzionalità grazie alla partecipazione attiva del pubblico. Il risultato sarà un programma completo con una documentazione dettagliata.
Il tipo del parametro dell'elemento(int, double o string) determina il tipo della funzione dell'elemento.
È noto che le funzioni elemento restituiscono il valore del parametro con uno dei tre tipi: int, double o string.
Tuttavia, le funzioni restituiscono anche valori di proprietà...
Si verifica una situazione in cui il tipo del valore del parametro può non coincidere con il tipo delle proprietà, che sono sempreint. Si scopre che le funzioni restituiscono valori di proprietà del tipo sbagliato, ad esempio double o string invece di int. Questo inconveniente forzato è il prezzo per l'universalità delle funzioni.
Il compito dell'utente è quello di convertire da solo il valore ricevuto nel tipo richiesto..
Sottolineo: il tipo principale di tutte le proprietà degli elementi è int.
Diamo un'occhiata più da vicino agli esempi di domande e risposte:
- D: Come farà la funzione a restituire il valore di una proprietà di tipo int se il tipo della funzione è string?
- Risposta: La funzione restituirà il valore di int con il tipo stringa.
- Domanda: Come farà la funzione a restituire il valore diint se il tipo di funzione è double?
- Risposta: La funzione restituirà il valore di int con il tipo double.
- Domanda: Come fa la funzione a restituire il valore double se il tipo di funzione è int?
- Risposta: Le proprietà degli elementi di tipo double non esistono. Le proprietà del parametro dell'elemento possono essere di tipo double. In questo caso, la funzione stessa sarà di tipo double.
Iltipo del valore del parametro determina il tipo della funzione dell'elemento.
Non esistono proprietà di un elemento di tipo double. Solo int. Esistono però proprietà dei parametri che accettano i tipi double, string o int. Ad esempio, V_CURRENT, V_LAST, V_MAX, V_MIN, V_STEP possono essere sia int che double. In entrambi i casi, anche la funzione elemento diventerà int o double, ma la funzione non può diventareint se le proprietà del parametro o il parametro stesso non sono int. Se la funzione cursore restituisce il tipo int, significa che nella fase di creazione dell'elemento l'utente ha assegnato dei numeri interi al suo parametro o alle sue proprietà, ad esempio posizionando l'intervallo del cursore o i campi di input con i pulsanti all'interno di valori interi.
Conclusione: il compito dell'utente è quello di convertire i valori ricevuti nel tipo richiesto.
Consideriamo alcuni esempi pratici:
1.
//------------------------------------------------//Текстовое поле ввода EDIT. Тип функции - string.//Получение и установка цвета текста и основания://------------------------------------------------//1. Устанавливаем любой текст в пустое поле ввода:w7_s_p4_EDIT_Comment_1("Some random text");
//------------------------------------------------
//------------------------------------------------//2. Получаем цвет основания поля ввода:uint Comment_1_base_color = (uint)w7_s_p4_EDIT_Comment_1(get_s,p4_COLOR_base);//------------------------------------------------//Выводим результат в журнал:Print("Comment_1_base_color ",Comment_1_base_color);
//------------------------------------------------
//------------------------------------------------//4. Получаем цвет текста поля ввода: uint Comment_1_text_color = (uint)w7_s_p4_EDIT_Comment_1(get_s,p4_COLOR_text);//------------------------------------------------//Выводим результат в журнал:Print("Comment_1_text_color ",Comment_1_text_color);
//------------------------------------------------
//------------------------------------------------//5. Устанавливаем другой цвет тексту:w7_s_p4_EDIT_Comment_1((uint)clrRed,p4_COLOR_text);
//------------------------------------------------
Vedere il risultato:
Proviamo quindi a ottenere e impostare altre proprietà di elementi e parametri. Proviamo anche a lavorare con il tipo double.
Ho seguito il codice e l'ho testato, e ho trovato un imprevisto che non si nasconde automaticamente quando la lunghezza della stringa casuale è troppo lunga
w7_s_p4_EDIT_Comment_1("Some random text AAAAAAAA");
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Perché nel tester non chiama OnChartEvent.
È vero. Ma nella stessa situazione in MT4 c'erano possibili varianti. Ne ho implementata una con successo. L'interfaccia funzionava per un Expert Advisor in esecuzione nella modalità normale, ma poteva controllare la sua copia in esecuzione nel tester. La connessione è stata realizzata attraverso le risorse. L'EA sul grafico ha ricevuto tutti i dati durante il processo di test. Con MT5, forse, la situazione è più complicata. Non sono sicuro che sia possibile stabilire una "comunicazione" tra due copie tramite risorse. Questo problema richiede uno studio separato.
4. navigare tra gli elenchi di proprietà dei singoli elementi.
//-----------------------------------------------------------------------------------------
Vi ricordo l'elenco degli argomenti da considerare:
1. Orientarsi nell'elenco di intellisense e selezionare la funzione della finestra giusta.
2. Apertura e chiusura programmatica delle finestre.
3. Orientarsi nell'elenco di intellisense e selezionare l'elemento giusto nella finestra giusta.
4. Navigare negli elenchi di proprietà dei singoli elementi.
5. Parsing del nome di un elemento e funzione wrapper della finestra.
6.restituzione del valore del parametro di un elemento selezionato a una variabile del suo tipo. Considerare tre tipi di elementi diversi.
7. Impostazione di valori nei parametri di diversi tipi di elementi. Vediamo come appariranno i valori nelle finestre dell'interfaccia di questi elementi.
8. Restituzione dei valori dei parametri di un elemento, modifica e inoltro del valore a un altro elemento. Considerare diversi tipi di elementi e valori e testare l'inoltro tra diversi tipi di elementi in diverse finestre.
9. Restituzione del valore precedente (_V_LAST). Quando e in quali casi è richiesto l'ultimo valore (da non confondere con il valore corrente).
10. Testare l'impostazione degli stati ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK per diversi tipi di elementi.
11. Proviamo a collegare e sincronizzare le modifiche dei valori di elementi di tipo diverso: ad esempio, campo di input con pulsanti e cursore. Supponiamo che quando il valore di un elemento (manuale o software) cambia, il valore del secondo elemento cambi di conseguenza.
12. Proviamo a reimpostare programmaticamente i confini dell'intervallo dello slider e del campo di input con pulsanti tramite funzioni wrapper. Non ho avuto il tempo di testarlo, ma qualcosa mi suggerisce che funzionerà. Comunque, vediamo.
13. Proviamo a restituire gli stati degli elementi tramite funzioni wrapper. È inclusa nella funzionalità, ma non ho avuto il tempo di testarla. Quindi vedremo... Il risultato è sconosciuto.
14. Otteniamo e impostiamo i colori per il testo e le basi degli elementi. Possiamo provare ad associare questi colori ad alcuni semplici eventi o confini di valori.
15. Vi spiegherò meglio come navigare e leggere la nuova stampa del file API.
//------------------------------------------
Il colore giallo indica gli argomenti già trattati.
//--------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------
Enfasi aggiunta:
Ogni funzione wrapper accetta solo proprietà con il prefisso scritto nel suo nome.
Ecco come si presenta in pratica il lavoro con gli elenchi(mettere le parentesi alla fine, perché intellisense non funziona all'interno delle parentesi delle funzioni wrapper):
La gif è leggermente velocizzata.
Come risultato delle chiamate mostrate nella gif, le funzioni wrapper restituiscono i valori delle proprietà specificate.
Prima della chiamata, è necessario dichiarare una variabile per memorizzare il valore della proprietà o il risultato dell'esecuzione della funzione. Maggiori informazioni al riguardo sono contenute nei seguenti argomenti.
5.
Parsing del nome dell'elemento e funzione wrapper della finestra:
1. Nome della funzione wrapper dell'elemento:
Vediamo un esempio di funzione dell'elemento campo di inserimento testo EDIT: w7_s_p4_EDIT_Comment_1();
//-------------------------------------------------------------
//-------------------------------------------------------------
//-------------------------------------------------------------
/ / - ------------------------------------------------------------
//-------------------------------------------------------------
//-------------------------------------------------------------
2. Il nome della funzione wrapper della finestra:
Vediamo un'altra funzione come esempio: w_15_Processing_the_data();
//-------------------------------------------------------------
- w_15 - finestra numero 15
Si noti che il numero non viene immediatamente dopo w, ma attraverso il trattino _. Questo è importante . Questo è importante.) // - ------------------------------------------------------------
//-------------------------------------------------------------
Si noti che la funzione finestra non dispone ancora di un prefisso per aprire l'elenco delle proprietà. Questa funzione apparirà sicuramente. Verrà generato un elenco speciale di proprietà della finestra da restituire/impostare e verrà assegnato un prefisso. Inoltre, la funzione finestra non contiene ancora una lettera per il tipo di ritorno.
Per ora, la funzione può solo aprire o chiudere una finestra.
Questi difetti saranno risolti nella prossima versione.
Si raccomanda di riassumere queste informazioni sulla formazione una volta sola, privatamente e separatamente, per evitare di ingolfare i commenti in futuro.
6.restituire il valore delparametro o della proprietà a una variabile del tipo richiesto:
Il tipo del parametro dell'elemento(int, double o string) determina il tipo della funzione dell'elemento.
È noto che le funzioni elemento restituiscono il valore del parametro con uno dei tre tipi: int, double o string.
Tuttavia, le funzioni restituiscono anche valori di proprietà...
Si verifica una situazione in cui il tipo del valore del parametro può non coincidere con il tipo delle proprietà, che sono sempre int. Si scopre che le funzioni restituiscono valori di proprietà del tipo sbagliato, ad esempio double o string invece di int. Questo inconveniente forzato è il prezzo per l'universalità delle funzioni.
Il compito dell'utente è quello di convertire da solo il valore ricevuto nel tipo richiesto..
Sottolineo: il tipo principale di tutte le proprietà degli elementi è int.
Diamo un'occhiata più da vicino agli esempi di domande e risposte:
Il tipo del valore del parametro determina il tipo della funzione dell'elemento.
Se la funzione cursore restituisce il tipo int, significa che nella fase di creazione dell'elemento l'utente ha assegnato dei numeri interi al suo parametro o alle sue proprietà, ad esempio posizionando l'intervallo del cursore o i campi di input con i pulsanti all'interno di valori interi.
Conclusione: il compito dell'utente è quello di convertire i valori ricevuti nel tipo richiesto.
Consideriamo alcuni esempi pratici:
1.
//------------------------------------------------------------------------------------------------------------
2.
//------------------------------------------------------------------------------------------------------------
3.
Vedere il risultato:
//------------------------------------------------------------------------------------------------------------
4.
//------------------------------------------------------------------------------------------------------------
5.
Vedere il risultato:
Proviamo quindi a ottenere e impostare altre proprietà di elementi e parametri. Proviamo anche a lavorare con il tipo double.
Ho seguito il codice e l'ho testato, e ho trovato un imprevisto che non si nasconde automaticamente quando la lunghezza della stringa casuale è troppo lunga
w7_s_p4_EDIT_Comment_1("Some random text AAAAAAAA");