Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
FUNZIONI C++ (2020) - Cos'è la ricorsione? Impara le funzioni ricorsive!
FUNZIONI C++ (2020) - Cos'è la ricorsione? Impara le funzioni ricorsive! TUTORIAL DI PROGRAMMAZIONE
La ricorsione è un processo in cui una funzione invoca se stessa e la funzione corrispondente è chiamata funzione ricorsiva.
La ricorsione è uno di quegli argomenti nella programmazione che spesso confonde gli studenti, e in questo video spiego come funziona la ricorsione e confronto anche diverse soluzioni allo stesso problema (usando i cicli e usando la ricorsione).
Come costruire un'applicazione ATM in C++? (Per principianti)
Come costruire un'applicazione ATM in C++? (Per principianti) - TUTORIAL DI PROGRAMMAZIONE (2020)
Benvenuti nel mio canale! Sono Saldina, e creo video legati alla programmazione. Se ti interessa, considera di iscriverti al mio canale e dare un pollice in su a questo video.
In questo video, ti mostrerò come creare un'applicazione ATM. Innanzitutto, pianifichiamo le funzionalità dell'applicazione. Avremo bisogno di quanto segue:
Ora iniziamo implementando la funzione "Mostra menu". Creeremo una funzione chiamata "showMenu" che mostra le opzioni del menu all'utente.
Dopo aver definito il menu, invocheremo la funzione "showMenu" per visualizzarlo. Quindi, consentiremo all'utente di scegliere un'opzione.
Per gestire la scelta dell'utente, useremo uno switch case. Per ogni caso, eseguiremo l'azione corrispondente. Nel caso dell'opzione 1, visualizzeremo il saldo. Nel caso dell'opzione 2, chiederemo l'importo del deposito e aggiorneremo il saldo di conseguenza. Nel caso dell'opzione 3, chiederemo l'importo del prelievo e verificheremo se è valido prima di aggiornare il saldo. Infine, aggiungeremo un'opzione 4 per uscire dal programma.
Per consentire all'utente di interagire ripetutamente con il menu, utilizzeremo un ciclo do-while. Il ciclo continuerà finché l'utente non seleziona l'opzione 4.
Sentiti libero di migliorare il programma aggiungendo altre funzionalità, come il trasferimento di denaro tra conti. Condividi il tuo codice nei commenti e lo esaminerò. Non dimenticare di mettere mi piace, iscriverti e premere l'icona della campana. Ci vediamo nel prossimo video!
FUNZIONI C++ (2020) - Cosa sono le funzioni e i modelli generici? TUTORIAL DI PROGRAMMAZIONE
FUNZIONI C++ (2020) - Cosa sono le funzioni e i modelli generici? TUTORIAL DI PROGRAMMAZIONE
Ciao a tutti, benvenuti nel mio canale! Mi chiamo Saldina e creo video legati alla programmazione. Se sei interessato alla programmazione, iscriviti al mio canale e metti un pollice in su a questo video. Il tuo supporto mi aiuta a raggiungere più persone e diffondere la conoscenza della programmazione.
In questo video, voglio parlare di generici e modelli in C++. I generici ci consentono di utilizzare lo stesso codice con diversi tipi di dati. Ciò significa che possiamo avere un'unica funzione che funziona con diversi tipi di dati.
Facciamo un esempio per capire questo concetto. Supponiamo di voler creare una funzione che scambia i valori di due variabili. Inizialmente, creiamo la funzione per lo scambio di due variabili intere, ma possiamo estenderla per lavorare anche con altri tipi di dati.
Per creare una funzione generica, utilizziamo i modelli in C++. Definiamo un tipo di modello utilizzando la parola chiave "template" seguita dal nome del tipo, comunemente indicato come "T." All'interno della funzione, sostituiamo il tipo di dati specifico con "T." Ciò rende la funzione generica e in grado di lavorare con diversi tipi di dati.
Non è più necessario creare funzioni separate per ogni tipo di dati. La funzione template può essere utilizzata con qualsiasi tipo di dati che supporti la logica di scambio.
Per testare la funzione, creiamo variabili del tipo desiderato e le passiamo alla generica funzione di scambio. Il meccanismo di inferenza del tipo in C++ ci consente di omettere di specificare il tipo in modo esplicito.
Utilizzando generici e modelli, possiamo eliminare la duplicazione del codice e scrivere codice più flessibile e riutilizzabile. Questo approccio ci consente di gestire diversi tipi di dati senza creare funzioni separate per ciascun tipo.
Spero che questo video ti abbia aiutato a comprendere il concetto di generici e modelli in C++. Se lo hai trovato utile, iscriviti al mio canale e metti un pollice in su a questo video. Il tuo supporto è molto apprezzato. Grazie per aver guardato e ci vediamo nel mio prossimo video. Arrivederci!
Espressioni lambda nel moderno C++ (tutorial approfondito passo dopo passo)
Espressioni lambda nel moderno C++ (tutorial approfondito passo dopo passo)
Benvenuti nel mio canale, tutti! In questo video, discuterò un argomento cruciale nel C++ moderno, ovvero le espressioni lambda, note anche come lambda. Probabilmente hai già sentito parlare di lambda e oggi spiegherò tutto ciò che devi sapere per iniziare a scrivere codice più veloce e più pulito usando lambda nel C++ moderno.
Tratterò i concetti più importanti, ma tieni presente che i lambda sono un argomento ampio con molto da imparare. Se vuoi ulteriori esempi e pratica, fornirò un libro gratuito nella descrizione che si concentra sulle espressioni lambda nel C++ moderno. Sentiti libero di dare un'occhiata.
Le espressioni lambda sono state introdotte nel C++ moderno e sono disponibili in C++11 e versioni successive. Il loro scopo principale è consentire di scrivere funzioni anonime in linea. Quindi quali sono le funzioni anonime in linea? Le funzioni regolari ti consentono di scrivere il codice una volta e riutilizzarlo invocando la funzione ogni volta che ne hai bisogno di nuovo, eliminando la necessità di codice ridondante. D'altra parte, una funzione inline è una funzione piccola e semplice che non è pensata per essere riutilizzata come funzioni regolari. Sono spesso usati per piccoli frammenti di codice che non richiedono un nome e non valgono lo sforzo di creare una funzione separata. È qui che brillano le lambda in quanto forniscono un modo per scrivere funzioni senza nome che sono concise, facili da leggere, veloci da eseguire e mantengono tutto in un unico posto.
Ora, tuffiamoci nel codice. Per questa dimostrazione utilizzerò C++Builder, l'IDE ideale per la creazione di applicazioni di interfaccia utente C++. Se sei interessato a conoscere le applicazioni dell'interfaccia utente C++, fornirò un collegamento nella descrizione da cui puoi scaricare C++Builder. Per iniziare, creiamo un'applicazione console. Fare clic su "File", quindi su "Nuovo altro" e selezionare "Applicazione console". Assicurati che C++ sia selezionato e fai clic su "OK". Ecco il nostro codice iniziale. Facciamo alcune aggiunte ad esso.
Per prima cosa, aggiungerò un comando "system pause" per tenere aperta la finestra della console dopo aver eseguito il codice. Successivamente, includerò la libreria "iostream" per le operazioni di input/output. Ora il nostro codice è pronto per essere eseguito e, se eseguiamo il programma, vedremo il messaggio "Hello, World!" messaggio nella console.Ora, diamo un'occhiata alla struttura di un'espressione lambda. Rimuoverò il codice precedente e inizieremo con un semplice esempio. Per creare un lambda, utilizziamo la seguente sintassi: parentesi angolari (clausola di cattura), parentesi (parametri) e parentesi graffe (definizione di funzione).
All'interno della clausola di acquisizione, possiamo specificare le variabili dall'ambito di inclusione che vogliamo utilizzare all'interno del lambda. Per ora, lasciamo vuota la clausola di cattura e concentriamoci sui parametri. Possiamo definire i parametri all'interno delle parentesi. In questo esempio, utilizzerò un singolo parametro, "p". Infine, definiamo il corpo della funzione lambda all'interno delle parentesi graffe. Ora, creiamo un esempio in cui incontreremo un problema e poi lo risolviamo usando lambda. Lavoreremo con un vettore, quindi dobbiamo includere la libreria "vettoriale". Creerò un vettore di numeri interi chiamato "v" e lo inizializzerò con alcuni valori. Successivamente, introdurrò un'utile funzione dalla libreria "algoritmo" chiamata "for_each". Questa funzione itera sugli elementi in un intervallo, come il nostro vettore, e applica una data funzione a ciascun elemento.
All'interno della funzione "for_each", specificheremo l'intervallo utilizzando "v.begin()" e "v.end()". Ora, definiamo cosa vogliamo fare con ogni elemento. Inizialmente, ti mostrerò un problema con il codice e poi introdurrò lambda come soluzione. Ho aggiunto una struttura con un operatore in overload che stampa il parametro. Ci aspettiamo che la funzione "for_each" stampi tutti gli elementi nel vettore. Se eseguiamo il codice, vedremo che non funziona come previsto. Stampa solo l'ultimo elemento. Questo perché l'operatore di overload viene passato per valore e copia il parametro per ogni chiamata, generando un output non corretto. Per risolvere questo problema, possiamo sostituire l'operatore di overload con un'espressione lambda. Copio la sintassi dell'espressione lambda discussa in precedenza e la incollo all'interno della funzione "for_each". Ora, eseguiamo di nuovo il codice.
Come puoi vedere, l'espressione lambda funziona perfettamente e stampa tutti gli elementi nel vettore. L'espressione lambda semplifica il codice e migliora la leggibilità. Assicura inoltre che a ogni chiamata venga passato il parametro corretto, evitando il problema riscontrato in precedenza. Ora, esploriamo un'altra caratteristica utile delle espressioni lambda, ovvero la loro capacità di acquisire variabili dall'ambito di inclusione. Questa funzione consente ai lambda di accedere alle variabili e di usarle all'interno del lambda. Tuttavia, per impostazione predefinita, le espressioni lambda acquisiscono le variabili per valore, nel senso che creano una copia della variabile.
Nel nostro prossimo esempio, creerò una variabile chiamata "moltiplicatore" e la imposterò a 2. All'interno del lambda, userò questa variabile per moltiplicare ciascun elemento nel vettore. Questa volta, userò un ciclo for basato su intervalli invece della funzione "for_each" a scopo dimostrativo. Se eseguiamo il codice, vedremo che gli elementi nel vettore vengono moltiplicati per 2, grazie alla variabile catturata. Tuttavia, c'è una limitazione con l'acquisizione di variabili per valore. Non possiamo modificare la variabile catturata all'interno del lambda.
Per superare questa limitazione, possiamo catturare la variabile per riferimento, permettendoci di modificarne il valore. Lo dimostrerò aggiungendo un'operazione di incremento all'espressione lambda. Ora, se eseguiamo il codice, vedremo che gli elementi nel vettore vengono moltiplicati per 2 e quindi incrementati di 1. L'acquisizione di variabili dall'ambito di inclusione offre flessibilità e consente ai lambda di lavorare senza problemi con i dati esterni. È importante tenere presente che l'acquisizione di variabili per riferimento può avere implicazioni, come la gestione della durata e potenziali corse di dati. Quindi fai attenzione quando usi questa funzione e assicurati che la variabile catturata rimanga valida durante l'esecuzione di lambda.
Per riassumere, le espressioni lambda sono potenti strumenti nel C++ moderno per scrivere codice conciso e leggibile. Consentono di creare funzioni anonime in linea, riducendo la necessità di funzioni separate per piccoli frammenti di codice. I lambda possono anche accedere alle variabili dal loro ambito di inclusione, fornendo flessibilità e migliorando il riutilizzo del codice.
Spero che questo video ti sia stato utile per comprendere le espressioni lambda nel C++ moderno. Se hai domande, non esitare a chiedere nei commenti qui sotto. Non dimenticare di mettere mi piace a questo video e di iscriverti al mio canale per altri tutorial sul C++. Grazie per aver guardato e buona programmazione!
Suggerimenti e trucchi di Visual Studio per i professionisti - Tutorial di Visual Studio
Suggerimenti e trucchi di Visual Studio per i professionisti - Tutorial di Visual Studio
Ciao a tutti! Mi chiamo Leslie Richardson e lavoro come program manager nel team di diagnostica e debug di Visual Studio. In questo video, sono entusiasta di illustrare una nuova funzionalità di Visual Studio 2019 denominata funzionalità di ricerca per Auto, locali e finestre di controllo. Questa funzione è progettata per migliorare notevolmente la tua esperienza di debug e farti risparmiare tempo prezioso, rendendoti più produttivo.
Per dimostrare questa funzionalità, consideriamo uno scenario in cui ho un'applicazione .NET Core aperta in Visual Studio 2019. All'interno di questa applicazione, ho un elenco che contiene più oggetti ricetta. La sfida che devo affrontare è individuare ricette specifiche all'interno di questo elenco, il che può essere piuttosto noioso, soprattutto quando l'elenco contiene 61 oggetti. Espandere manualmente ogni oggetto, trovare la proprietà del titolo e controllare se corrisponde ai miei criteri di ricerca, come "insalata", è un'attività che richiede tempo.
Per semplificare questo processo, utilizzerò una funzione chiamata "Debugger Display". Questa funzione mi consente di personalizzare il modo in cui gli oggetti vengono visualizzati in varie finestre del debugger, tra cui Autos, Locals e Watch windows. Aggiungendo l'attributo "Debugger Display" alla definizione della classe dei miei oggetti, posso specificare quale proprietà deve essere mostrata nella colonna del valore di queste finestre. In questo caso, desidero visualizzare ogni ricetta in base al titolo, quindi imposto l'attributo "Visualizzazione debugger" per visualizzare la proprietà del titolo della ricetta.
Ora, quando espando nuovamente l'elenco delle ricette, posso vedere immediatamente il titolo di ogni oggetto, rendendo molto più facile individuare le ricette desiderate senza espanderle singolarmente. Questo è un miglioramento significativo, ma con 61 articoli, può ancora volerci del tempo per trovare le ricette specifiche che mi interessano. È qui che torna utile la funzione di ricerca per la finestra dell'orologio.
Invece di scorrere o espandere manualmente l'elenco, posso semplicemente utilizzare la funzionalità di ricerca fornita. Inserisco il termine di ricerca, ad esempio "insalata", e premo invio. Visual Studio mi porta immediatamente alla prima occorrenza della parola chiave, risparmiando molto tempo e fatica. Posso anche utilizzare il pulsante "Trova successivo" per navigare attraverso altre corrispondenze trovate da Visual Studio. Per navigare avanti e indietro nell'elenco delle corrispondenze, posso regolare il parametro del passaggio di ricerca, che determina la profondità della ricerca.
Oltre alla funzionalità di ricerca, voglio anche menzionare che la funzionalità di visualizzazione del debugger è disponibile per gli utenti di codice gestito, ad esempio quelli che usano C#, F# o Visual Basic. Per gli utenti C++, è disponibile una funzionalità equivalente denominata NATVIS. Con NATVIS, è necessario creare un file XML separato in cui è possibile definire le proprietà da visualizzare nelle finestre del debugger.
Spero che questa spiegazione sia stata utile. Grazie per aver guardato!
Ora, esploriamo come possiamo rendere l'interfaccia di Visual Studio più organizzata e migliorarne le prestazioni. Quando apriamo soluzioni in Visual Studio, ricorda lo stato dei documenti, le posizioni di scorrimento e le sezioni espanse/compresse in Esplora soluzioni dall'ultima volta che l'abbiamo usato. Sebbene ciò possa essere utile, consuma anche cicli della CPU e potrebbe non essere sempre desiderabile. Per ricominciare da capo e migliorare le prestazioni, possiamo modificare alcune impostazioni.
Nel menu Strumenti > Opzioni, nella sezione Progetti e soluzioni, ci sono due impostazioni da considerare. L'opzione "Riapri i documenti al caricamento della soluzione" ricorda i documenti aperti in precedenza e l'opzione "Ripristina lo stato della gerarchia del progetto di Esplora soluzioni al caricamento della soluzione" ricorda lo stato espanso/compresso di Esplora soluzioni. Deselezionando queste opzioni, Visual Studio non ripristinerà lo stato precedente all'apertura di una soluzione. Invece, inizierà con una tabula rasa, senza documenti aperti o sezioni espanse in Esplora soluzioni. Questo può aiutare a migliorare le prestazioni e fornire un nuovo inizio per ogni soluzione.
Quando si lavora con Git in Visual Studio, sono disponibili diverse funzionalità che possono migliorare la produttività e la collaborazione. La finestra Modifiche Git offre una visualizzazione completa del repository Git e consente di mettere in scena, eseguire il commit e inviare le modifiche direttamente da Visual Studio. Puoi accedere a questa finestra andando su Visualizza > Git Changes. Inoltre, Visual Studio fornisce uno strumento Git diff integrato che evidenzia le differenze tra le diverse versioni del codice. Puoi accedere a questa funzione facendo clic con il pulsante destro del mouse su un file in Esplora soluzioni e selezionando "Confronta con non modificato" o "Confronta con più recente".
Un'altra funzionalità utile in Visual Studio è la possibilità di eseguire il refactoring del codice. Il refactoring aiuta a migliorare la struttura e la leggibilità del codice senza modificarne il comportamento. Visual Studio offre un'ampia gamma di opzioni di refactoring, ad esempio la ridenominazione di variabili o metodi, l'estrazione del codice in metodi o classi separati e la riorganizzazione dei blocchi di codice. Per accedere a queste opzioni di refactoring, fai clic con il pulsante destro del mouse sul codice che desideri refactoring e seleziona "Refactoring" dal menu contestuale. Puoi anche utilizzare le scorciatoie da tastiera per operazioni di refactoring comuni, come Ctrl + R, Ctrl + R per rinominare un simbolo.
Per migliorare ulteriormente la tua esperienza di codifica, puoi sfruttare i frammenti di codice in Visual Studio. I frammenti di codice sono modelli di codice predefiniti che possono essere inseriti rapidamente nel codice digitando una scorciatoia e premendo il tasto Tab. Visual Studio offre un'ampia gamma di frammenti di codice predefiniti per diversi linguaggi e framework di programmazione. Puoi anche creare i tuoi frammenti di codice personalizzati per automatizzare le attività di codifica ripetitive. Per accedere e gestire i frammenti di codice, vai su Strumenti > Gestore frammenti di codice.
Il debug è una parte essenziale del processo di sviluppo e Visual Studio offre potenti funzionalità di debug. È possibile impostare punti di interruzione nel codice per sospendere l'esecuzione e ispezionare lo stato di variabili e oggetti. Durante il debug, è possibile utilizzare la finestra Watch per monitorare i valori di variabili o espressioni specifiche. La finestra immediata consente di eseguire codice e valutare espressioni durante il debug. È inoltre possibile sfruttare i punti di interruzione condizionali, che si attivano solo quando viene soddisfatta una condizione specifica, e i punti di traccia, che stampano i messaggi nella finestra Output senza sospendere il debugger.
Visual Studio supporta anche i test unitari, fondamentali per garantire la qualità e la correttezza del codice. È possibile creare unit test utilizzando vari framework di test, ad esempio MSTest, NUnit o xUnit. Visual Studio fornisce una finestra Esplora test che visualizza tutti i test disponibili nella soluzione e consente di eseguirli o eseguirne il debug singolarmente o in gruppi. È possibile utilizzare gli attributi per definire metodi di test e asserzioni per verificare i risultati previsti. Visual Studio offre anche l'analisi della copertura del codice, che mostra la quantità di codice coperta dagli unit test.
Quando si lavora con progetti o soluzioni di grandi dimensioni, può essere difficile navigare e comprendere la base di codice. Visual Studio offre diverse funzionalità per facilitare la navigazione e la comprensione del codice. Solution Explorer ti consente di esplorare la struttura della tua soluzione e di navigare rapidamente verso file o classi specifici. È inoltre possibile utilizzare la funzionalità Naviga verso (Ctrl + ,) per cercare simboli, file o tipi all'interno della soluzione. La funzione CodeLens visualizza informazioni aggiuntive sul tuo codice, come riferimenti, modifiche e copertura del test, direttamente all'interno dell'editor.
Per lo sviluppo Web, Visual Studio offre un supporto eccellente per le tecnologie Web più diffuse come HTML, CSS e JavaScript. L'editor HTML fornisce funzionalità come IntelliSense, la formattazione del codice e la possibilità di visualizzare in anteprima le pagine HTML direttamente all'interno dell'editor. L'editor CSS offre funzionalità simili, tra cui selettori di colori, proprietà IntelliSense per CSS e anteprima in tempo reale delle modifiche CSS. Visual Studio supporta anche il debug JavaScript, consentendoti di impostare punti di interruzione, ispezionare le variabili ed esaminare il codice per identificare e risolvere i problemi.
Visual Studio dispone di un vasto ecosistema di estensioni e plug-in che possono migliorare la tua esperienza di sviluppo. Queste estensioni forniscono funzionalità aggiuntive, supporto linguistico e strumenti per framework o piattaforme specifici. È possibile sfogliare e installare le estensioni direttamente da Visual Studio passando a Estensioni > Gestisci estensioni. Alcune estensioni popolari includono ReSharper, che offre strumenti avanzati di analisi del codice e refactoring, e Visual Studio Code, che fornisce un editor di codice leggero e multipiattaforma.
Quando si lavora su progetti collaborativi, Visual Studio offre l'integrazione con piattaforme di collaborazione come Azure DevOps e GitHub. Puoi connettere facilmente il tuo progetto Visual Studio a un repository Git remoto ed eseguire operazioni Git comuni come il push, il pull e l'unione delle modifiche. Visual Studio fornisce anche strumenti per le revisioni del codice, il monitoraggio degli elementi di lavoro e i flussi di lavoro di distribuzione e integrazione continui.
Visual Studio supporta un'ampia gamma di framework e linguaggi di programmazione, tra cui .NET, C++, Python, JavaScript e molti altri. Fornisce funzionalità specifiche della lingua come IntelliSense, frammenti di codice e funzionalità di debug su misura per ogni lingua. Puoi installare estensioni e SDK specifici della lingua per migliorare ulteriormente l'esperienza di sviluppo per i tuoi linguaggi di programmazione preferiti.
Per l'ottimizzazione delle prestazioni e la risoluzione dei problemi, Visual Studio offre strumenti di profilatura che consentono di identificare colli di bottiglia e perdite di memoria nelle applicazioni. Il Performance Profiler ti consente di analizzare le prestazioni del tuo codice e identificare le aree che possono essere ottimizzate. Memory Profiler ti aiuta a rilevare e diagnosticare i problemi relativi alla memoria nelle tue applicazioni. Questi strumenti di profilazione forniscono report e approfondimenti dettagliati per aiutarti a ottimizzare il codice e migliorare le prestazioni dell'applicazione.
Visual Studio fornisce anche il supporto per lo sviluppo di app per dispositivi mobili per piattaforme come Android e iOS. Puoi creare app per dispositivi mobili multipiattaforma usando framework come Xamarin o React Native. Visual Studio offre strumenti per la progettazione di interfacce utente, il debug di app per dispositivi mobili e la loro distribuzione in emulatori o dispositivi fisici. Puoi anche sfruttare i servizi cloud come App per dispositivi mobili di Azure per l'integrazione back-end e l'archiviazione.
Oltre alle tradizionali applicazioni desktop e Web, Visual Studio supporta lo sviluppo di applicazioni Internet of Things (IoT). Puoi creare applicazioni per dispositivi come Raspberry Pi, Arduino e altri dispositivi IoT usando Visual Studio. Gli strumenti di sviluppo IoT di Visual Studio forniscono modelli di progetto, supporto per il debug e opzioni di distribuzione per gli scenari IoT.
Visual Studio offre anche funzionalità di sviluppo cloud con integrazioni per le piattaforme cloud più diffuse come Azure. Puoi creare, gestire e distribuire risorse cloud direttamente da Visual Studio. Fornisce strumenti per la creazione e la distribuzione di applicazioni cloud, l'integrazione con i servizi cloud e il monitoraggio delle risorse cloud.
Queste sono solo alcune delle numerose funzionalità e funzionalità offerte da Visual Studio agli sviluppatori. È un IDE potente e versatile in grado di soddisfare un'ampia gamma di esigenze di sviluppo e flussi di lavoro. Che tu stia lavorando su piccoli progetti o soluzioni aziendali di grandi dimensioni, Visual Studio offre gli strumenti e le funzionalità per semplificare il processo di sviluppo e aumentare la produttività.
Codice EA completo per MetaTrader 5 in 20 minuti!
Codice EA completo per MetaTrader 5 in 20 minuti!
Oggi siamo entusiasti di iniziare a registrare il nostro primo EA (Expert Advisor) per la piattaforma di trading MetaTrader. Questo EA è progettato per essere un sistema di trading per MetaTrader e nel nostro video eseguiremo anche un rapido backtest per valutarne le prestazioni.
Per iniziare, lanciamo la piattaforma MetaTrader e accediamo al MetaEditor facendo clic su "Strumenti" e selezionando "MetaQuotes Language Editor" dal menu a tendina. Il MetaEditor è dove creiamo i nostri consulenti esperti, così come gli script e gli indicatori per MetaTrader.
Per creare un nuovo consulente esperto, facciamo clic sul pulsante "Nuovo" nell'angolo in alto a sinistra del MetaEditor. Nella procedura guidata che appare, selezioniamo la prima opzione e facciamo clic su "Avanti". Possiamo quindi assegnare un nome al nostro EA, ad esempio "Primo EA" e fare nuovamente clic su "Avanti". Saltiamo la selezione di eventuali opzioni aggiuntive e procediamo facendo clic su "Fine".
Ora abbiamo il codice iniziale per il nostro EA. Per iniziare, ripuliamo il codice rimuovendo i commenti non necessari, come i commenti grigi che non forniscono alcuna funzionalità al codice stesso. Eliminiamo le prime cinque righe e alcune altre righe non necessarie, secondo le nostre preferenze.
Prima di iniziare a programmare, prendiamoci un momento per considerare cosa vogliamo che faccia il nostro EA. Per questo video, il nostro obiettivo è fare in modo che l'EA apra un'operazione di acquisto a un'ora specifica e la chiuda a un'altra ora prestabilita della giornata. Per ottenere ciò, abbiamo bisogno di due variabili di input: una per l'ora di apertura e un'altra per l'ora di chiusura.
Tornando al MetaEditor, dichiariamo queste due variabili di input in una nuova sezione chiamata "Variabili". Usiamo la parola chiave "input" per specificare che queste variabili possono essere modificate dall'esterno del codice. Impostiamo i loro tipi come numeri interi poiché vogliamo inserire valori orari specifici. Ad esempio, possiamo denominare le variabili "openHour" e "closeHour".
Dopo aver dichiarato le variabili, compiliamo il codice per assicurarci che non ci siano errori. Se tutto è corretto, possiamo vedere che non ci sono messaggi di errore nella casella degli strumenti.
Successivamente, torniamo alla piattaforma MetaTrader e trasciniamo il nostro EA su qualsiasi grafico. Possiamo vedere il nome, la versione e il link dell'EA nel navigatore sotto "Expert Advisors". Espandendo l'EA, possiamo accedere alle variabili di input e modificarne i valori senza modificare il codice.
Passiamo ora alla funzione "OnTick", che viene chiamata ogni volta che il prezzo cambia. Vogliamo verificare se abbiamo raggiunto l'orario di apertura specificato dall'utente. Per fare ciò, dobbiamo recuperare l'ora corrente del simbolo e del server. Creiamo una variabile chiamata "time" di tipo "datetime" e utilizziamo la funzione "TimeCurrent" per assegnarle l'ora corrente.
Con l'ora corrente memorizzata nella nostra variabile "time", ora possiamo verificare se corrisponde all'ora aperta. Usiamo un'istruzione "if" per confrontare la variabile "openHour" con la componente ora dell'ora corrente ("time.hour"). Se la condizione è vera, entriamo nel blocco "if".
All'interno del blocco "if", apriamo una posizione utilizzando la funzione "OrderSend". Specifichiamo il simbolo, la direzione commerciale (acquisto), la dimensione del lotto (1 lotto) e il prezzo richiesto come parametri. Inoltre, impostiamo i valori di stop loss e take profit secondo le nostre preferenze.
Dopo aver compilato il codice ed eseguito un backtest utilizzando il tester della strategia MetaTrader, osserviamo che l'EA apre una posizione all'orario di apertura specificato. Tuttavia, notiamo che vengono aperte più posizioni a causa dei successivi movimenti di prezzo che attivano nuovamente la funzione "OnTick".
Per impedire l'apertura di più posizioni, introduciamo una variabile booleana chiamata "isTradeOpen" per tenere traccia del fatto che un'operazione sia già aperta. Inizialmente, impostiamo il valore di "isTradeOpen" su false. Prima di aprire una nuova posizione, controlliamo se "isTradeOpen" è falso. Se lo è, procediamo ad aprire la posizione e impostiamo il valore di "isTradeOpen" su true. In questo modo, anche se la funzione "OnTick" viene attivata più volte, aprirà una nuova posizione solo se non c'è già uno scambio aperto.
Dopo aver implementato questa logica, compiliamo nuovamente il codice ed eseguiamo un backtest. Questa volta, osserviamo che l'EA apre una posizione all'orario di apertura specificato e non apre alcuna posizione aggiuntiva finché quella precedente non viene chiusa.
Passando alla chiusura del trade all'ora di chiusura specificata, dobbiamo introdurre un altro controllo nella funzione "OnTick". Dopo aver aperto la posizione, confrontiamo l'ora corrente con l'ora di chiusura specificata dall'utente. Se corrispondono, entriamo in un blocco "if".
All'interno del blocco "if", chiudiamo il trade utilizzando la funzione "OrderClose". Forniamo come parametri il numero del ticket della posizione da chiudere, nonché la dimensione del lotto e il prezzo di offerta. Inoltre, se lo desideri, possiamo impostare parametri aggiuntivi come i valori di stop loss e take profit.
Compiliamo nuovamente il codice ed eseguiamo un backtest per verificare che il trade sia chiuso all'orario di chiusura specificato. Durante il backtest, possiamo controllare lo storico delle negoziazioni per assicurarci che le posizioni siano aperte e chiuse secondo gli orari specificati.
Abbiamo creato con successo il nostro primo EA per la piattaforma di trading MetaTrader. L'EA è progettato per aprire un'operazione di acquisto in un orario di apertura specifico e chiuderla in un orario di chiusura predeterminato. Abbiamo implementato variabili di input per consentire la personalizzazione degli orari di apertura e chiusura senza modificare il codice. Introducendo controlli e variabili, ci assicuriamo che venga aperta una sola operazione alla volta e che venga chiusa all'ora di chiusura specificata.
Media mobile Crossover Programmazione EA mql5
Media mobile Crossover Programmazione EA mql5
Ciao, sono Toby e nel video di oggi ti mostrerò come codificare un semplice consulente esperto di crossover a media mobile per MetaTrader 5. Cominciamo.
Per prima cosa, definiamo cosa vogliamo che faccia il consulente esperto. Vogliamo che l'EA apra una posizione di acquisto quando la media mobile veloce (linea blu) supera la media mobile lenta (linea rossa) e apre una posizione di vendita quando la media mobile veloce supera la media mobile lenta. Aggiungeremo anche uno stop loss e un take profit all'EA, oltre a variabili di input per i periodi delle medie mobili.
Per iniziare a codificare, apri MetaEditor in MetaTrader 5. Crea un nuovo consulente esperto utilizzando il modello e chiamalo "Media mobile". Pulisci il codice rimuovendo righe e commenti non necessari. Successivamente, aggiungi le variabili di input per i periodi delle medie mobili veloci e lente. Imposta i valori predefiniti per queste variabili e visualizzali nella scheda Input delle impostazioni EA.
Controllare l'input dell'utente nella funzione OnInit per assicurarsi che vengano immessi valori validi. Se l'input non è valido (zero o negativo), visualizzare un messaggio di avviso e arrestare l'EA. Crea maniglie per le medie mobili veloci e lente usando la funzione ma. Impostare il simbolo, il periodo e le variabili di input per ciascuna media mobile. Controlla se la creazione degli handle ha esito positivo. In caso contrario, visualizzare un messaggio di avviso e interrompere l'EA. Creare variabili globali per memorizzare i valori dell'indicatore. Usa array dinamici per i buffer veloci e lenti. Nella funzione OnTick, copia gli ultimi valori dell'indicatore nei buffer e controlla se sono disponibili dati sufficienti. In caso contrario, tornare indietro e visualizzare un messaggio di avviso.
Stampa i valori dell'indicatore sullo schermo per verificare se tutto funziona correttamente. Utilizzare la funzione Commento per visualizzare i valori delle medie mobili veloci e lente.
In Strategy Tester, prova l'EA per verificare se i valori dell'indicatore sono visualizzati correttamente. Ora possiamo verificare la presenza di un crossover delle medie mobili. Se la media mobile veloce è al di sotto della media mobile lenta alla barra 1 e al di sopra della media mobile lenta alla barra 0, abbiamo un crossover. Apri una posizione di acquisto in questo caso.
Per aprire posizioni, usa la classe CTrade. Definisci una variabile commerciale e procedi con le azioni necessarie. Compila il codice e testa l'EA nello Strategy Tester per verificare se la condizione di crossover funziona correttamente e le posizioni vengono aperte di conseguenza.
Questo è tutto per codificare il consulente esperto di crossover della media mobile in MetaTrader 5. E poi possiamo usare la funzione trade.Buy per aprire una posizione di acquisto. Specifichiamo il volume della posizione, che può essere un valore fisso o basato sulla tua strategia di gestione del rischio. Per ora, usiamo un volume fisso di 0,1 lotti. Ora dobbiamo aggiungere una condizione per verificare la presenza di una posizione di vendita. Se la media mobile veloce è al di sopra della media mobile lenta per la barra 1 e al di sotto per la barra corrente, abbiamo un crossover nella direzione opposta. In questo caso, vogliamo aprire una posizione di vendita. Possiamo usare la funzione trade.Sell per farlo.
Infine, possiamo aggiungere uno stop loss e prendere profitto alle nostre posizioni. Useremo le funzioni trade.SetStopLoss e trade.SetTakeProfit. Per questo esempio, impostiamo uno stop loss di 100 pip e un take profit di 200 pip. Ora abbiamo un codice completo per il nostro semplice consulente esperto di crossover a media mobile. Possiamo compilarlo e testarlo nella piattaforma MetaTrader 5.
Una volta compilato il codice senza errori, puoi salvare l'expert advisor e utilizzarlo in MetaTrader 5. Ricordati di eseguire il backtest e ottimizzare il tuo expert advisor prima di utilizzarlo con denaro reale.
Gamma Breakout EA mql5 Programmazione | Parte 1/4
Gamma Breakout EA mql5 Programmazione | Parte 1/4
Ciao, sono Toby e nel video di oggi ti mostrerò come codificare un consulente esperto (EA) di breakout per intervallo di tempo per MetaTrader 5. L'obiettivo è ottenere risultati simili alla strategia mostrata nel video.
Innanzitutto, discutiamo la logica alla base dell'EA. Definiremo un semplice intervallo di tempo, che inizia in un momento specifico e termina in un altro momento. L'EA salverà i prezzi più alti e più bassi all'interno di questo intervallo. Se il prezzo supera il prezzo più alto dopo l'intervallo, l'EA entrerà in un'operazione di acquisto. Al contrario, se il prezzo scende al di sotto dell'intervallo, l'EA entrerà in un'operazione di vendita. Inoltre, fisseremo un orario di chiusura per chiudere tutte le posizioni. Questa semplice logica guiderà il nostro EA.
Per iniziare a programmare, apri MetaEditor e crea un nuovo consulente esperto. Ripulisci il codice del modello, secondo le preferenze personali, rimuovendo le righe non necessarie.
Successivamente, definisci le variabili di input per l'ora di inizio, la durata dell'intervallo, l'ora di chiusura, la dimensione del lotto e il numero magico. Questi input consentono agli utenti di personalizzare il comportamento dell'EA. È importante controllare i valori di input per evitare input errati. Ad esempio, possiamo garantire che il numero magico non sia zero o negativo, i lotti non siano negativi, l'ora di inizio e la durata rientrino in intervalli validi e l'ora di chiusura non sia uguale all'ora di inizio più la durata dell'intervallo.
Dopo aver definito le variabili di input e verificato i loro valori, si passa alla creazione delle variabili globali. Queste variabili saranno utilizzate in tutto l'EA. Raggruppiamo le variabili relative all'intervallo in una struttura chiamata "struttura dell'intervallo". Questa struttura contiene variabili per l'ora di inizio, l'ora di fine, l'ora di chiusura, i prezzi massimo e minimo e i flag per l'ingresso, il breakout alto e il breakout basso.
Inoltre, definiamo il costruttore della struttura, dove predefiniamo i valori iniziali per le variabili. Questo aiuta a inizializzare la struttura con valori predefiniti. Aggiungiamo anche commenti dopo ogni variabile per descriverne lo scopo.
Compiliamo il codice per verificare eventuali errori e garantire che tutto funzioni correttamente.
Infine, creiamo alcune altre variabili, come "MqlTick" e "last_tick" del tipo "MqlTick" di MetaTrader 5. Definiamo anche una variabile di tipo "CTrade" per gestire le operazioni relative al commercio.
A questo punto, abbiamo impostato le variabili e le strutture necessarie per il nostro EA. Nella parte successiva, ci immergeremo nella codifica della logica effettiva dell'EA nella funzione "OnTick". Nella parte successiva del video, ci concentreremo sulla codifica dell'effettiva logica dell'Expert Advisor nella funzione OnTick. Tuttavia, prima di procedere, esaminiamo innanzitutto ciò che abbiamo fatto finora.
Abbiamo iniziato definendo le variabili di input per l'EA, come l'ora di inizio dell'intervallo, la durata, l'ora di chiusura, la dimensione del lotto e il numero magico. Abbiamo anche aggiunto controlli di convalida dell'input per garantire che l'utente immetta valori validi per questi input. Successivamente, abbiamo creato una struttura chiamata rangeStructure per memorizzare le variabili relative all'intervallo, inclusi l'ora di inizio, l'ora di fine, l'ora di chiusura, il massimo e il minimo dell'intervallo e i flag per l'ingresso, il breakout alto e il breakout basso. Abbiamo quindi definito un costruttore per rangeStructure per inizializzare le variabili con valori predefiniti. Inoltre, abbiamo dichiarato alcune variabili globali, tra cui un'istanza di rangeStructure, due variabili di tipo MqlTick per memorizzare i tick correnti e precedenti e un oggetto CTrade per gestire le operazioni commerciali.
Passiamo ora all'implementazione della funzione OnTick per codificare la logica principale dell'EA. Ecco la continuazione del video: Nella funzione OnTick, per prima cosa aggiorneremo le informazioni sul tick corrente utilizzando la funzione SymbolInfoTick. Questo ci consente di accedere ai prezzi bid e ask, nonché all'ora del tick. Successivamente, verificheremo se il tempo di tick corrente rientra nell'intervallo definito dall'utente. Per fare ciò, confrontiamo l'ora corrente del tick con l'ora di inizio e l'ora di fine dell'intervallo. Se il tempo di tick è all'interno dell'intervallo, impostiamo flagEntry su true, indicando che siamo all'interno dell'intervallo.
Successivamente, controlliamo un breakout elevato. Se l'attuale prezzo del tick supera il massimo precedente dell'intervallo e il flagHighBreakout è falso, avviamo un'operazione di acquisto. Impostiamo flagHighBreakout su true per evitare inserimenti ripetuti. Allo stesso modo, controlliamo un breakout basso. Se l'attuale prezzo del tick scende al di sotto del minimo precedente dell'intervallo e il flagLowBreakout è falso, avviamo un'operazione di vendita. Impostiamo flagLowBreakout su true per impedire voci multiple. Infine, controlliamo se l'ora del tick corrente è uguale all'ora di chiusura. In tal caso, chiudiamo tutte le posizioni aperte utilizzando il metodo trade.CloseAll.
Questa è la logica di base dell'EA. Naturalmente, ci sono elementi aggiuntivi che puoi aggiungere per migliorare la sua funzionalità, come livelli di stop-loss e take-profit, regole di gestione del denaro e filtri di trading aggiuntivi. Tuttavia, in questo video, ci siamo concentrati sul concetto centrale della strategia di breakout dell'intervallo di tempo.
Ricorda, questo EA è pensato per fungere da punto di partenza e puoi personalizzarlo ulteriormente in base alle tue esigenze e preferenze di trading.
Nella parte successiva del video, continueremo con il processo di codifica, aggiungendo il codice necessario per implementare la logica discussa. Se hai trovato utile questo video, non dimenticare di lasciare un mi piace e di iscriverti al mio canale per rimanere aggiornato con i video futuri. Se hai domande o hai bisogno di assistenza, non esitare a lasciare un commento e sarò lieto di aiutarti. Grazie per aver guardato e ci vediamo nel prossimo video. Ciao!
Gamma Breakout Programmazione EA mql5| Parte 2/4
Gamma Breakout Programmazione EA mql5| Parte 2/4
Ciao, sono Toby, e nel video di oggi continueremo a codificare il nostro breakout dell'intervallo di tempo EA per MetaTrader 5. Se non hai ancora guardato il primo video, puoi trovare il link qui. Nel video precedente, ho spiegato la logica dell'EA e cosa stiamo cercando di codificare.
Ora passiamo a MetaEditor e riprendiamo la codifica. Lavoreremo sulla funzione OnTick, che viene chiamata ogni volta che il prezzo cambia per il nostro simbolo. In questa funzione, codificheremo il nostro calcolo dell'intervallo e il controllo del breakout. Innanzitutto, dobbiamo ottenere il segno di spunta corrente per il simbolo. Memorizziamo il tick corrente in una variabile chiamata currentTick, e abbiamo anche una variabile previousTick per memorizzare il tick precedente.
Successivamente, controlliamo se è necessario calcolare un nuovo intervallo. Esistono diverse condizioni per il calcolo di un nuovo intervallo.
Se abbiamo impostato un tempo di chiusura dell'intervallo e il tempo di tick corrente è maggiore o uguale al tempo di chiusura dell'intervallo, calcoliamo un nuovo intervallo.
Se entrambi i flag di breakout alto e basso sono impostati su true, calcoliamo un nuovo intervallo.
Se è la prima volta che esegui l'EA e non abbiamo ancora calcolato un intervallo, calcoliamo un nuovo intervallo.
Se l'ora di fine dell'intervallo non è zero e siamo dopo l'intervallo e non siamo entrati nell'intervallo, calcoliamo un nuovo intervallo.
Controlliamo anche se abbiamo posizioni aperte. Se non ci sono posizioni aperte, si procede al calcolo di un nuovo range.
Una volta stabilito che è necessario calcolare un nuovo intervallo, chiamiamo la funzione CalculateRange. In questa funzione, reimpostiamo tutte le variabili di intervallo al loro stato predefinito. Quindi calcoliamo l'ora di inizio dell'intervallo ottenendo l'inizio della giornata e aggiungendo l'ora di inizio dell'intervallo di input in minuti. Se l'ora di inizio calcolata è già trascorsa, la spostiamo al giorno successivo, considerando sabato e domenica come giorni di fine settimana. Allo stesso modo, calcoliamo l'ora di fine dell'intervallo aggiungendo la durata dell'intervallo di input in minuti all'ora di inizio. Se l'ora di fine cade di sabato o domenica, la spostiamo al giorno valido successivo.
Calcoliamo anche l'ora di chiusura dell'intervallo utilizzando la stessa logica del calcolo dell'ora di inizio e dell'ora di fine. Per visualizzare i tempi calcolati sul grafico, creiamo oggetti utilizzando la funzione ObjectCreate. Creiamo un oggetto linea verticale per l'ora di inizio intervallo ed eliminiamo tutti gli oggetti precedentemente disegnati.
Questo è il progresso che abbiamo fatto finora e continueremo a codificare nel prossimo video.
Gamma Breakout EA mql5 Programmazione | Parte 3/4
Gamma Breakout EA mql5 Programmazione | Parte 3/4
Ciao, sono Toby, e nel video di oggi continueremo a programmare il nostro breakout EA. Nei video precedenti, abbiamo già calcolato l'ora di inizio, l'ora di fine e l'ora di chiusura dell'intervallo. Ora, vogliamo codificare il range massimo e il range minimo, così come le condizioni di breakout e la chiusura della posizione. Se non hai guardato i video precedenti, puoi trovare i link nella descrizione qui sotto. Passiamo a MetaEditor e iniziamo a programmare.
Innanzitutto, andremo alla funzione OnTick. Inizieremo controllando se siamo all'interno dell'intervallo e salviamo i valori alti e bassi. Utilizziamo un'istruzione if per verificare se l'ora corrente è compresa tra l'ora di inizio e quella di fine dell'intervallo. Se lo è, aggiorniamo i valori alti e bassi di conseguenza. Abbiamo anche impostato un flag di ingresso su true per indicare che avevamo un segno di spunta all'interno dell'intervallo. Quindi aggiorniamo gli oggetti del grafico per l'intervallo alto e basso.
Successivamente, passiamo alla funzione DrawObject per disegnare i livelli alti e bassi dell'intervallo. Copiamo il blocco di codice per l'ora di chiusura e apportiamo le modifiche necessarie per l'alto livello. Utilizziamo il nome dell'oggetto "Range High" e tracciamo una linea di tendenza dall'ora di inizio dell'intervallo al prezzo massimo dell'intervallo. Aggiorniamo anche la descrizione comandi per visualizzare il valore massimo dell'intervallo. Facciamo lo stesso per il range low, cambiando il nome dell'oggetto e disegnando una linea di tendenza dall'ora di inizio del range al prezzo del range low.
Per tracciare una linea dalla fine dell'intervallo all'ora di chiusura, indicando un breakout, copiamo nuovamente il blocco di codice e lo modifichiamo di conseguenza. Cambiamo il nome dell'oggetto e tracciamo una linea di tendenza dall'ora di fine dell'intervallo all'ora di chiusura. Impostiamo anche lo stile della linea su punteggiato.
Dopo aver compilato ed eseguito un test visivo, possiamo vedere la gamma alta, la gamma bassa e le linee di breakout visualizzate sul grafico. Ora, codifichiamo le condizioni di breakout. Aggiungiamo una nuova funzione chiamata CheckBreakouts all'interno della funzione OnTick. Per prima cosa, controlliamo se siamo oltre l'ora di fine intervallo. Ci assicuriamo inoltre che il flag di ingresso sia impostato su true, a indicare che abbiamo avuto un segno di spunta all'interno dell'intervallo. Se queste condizioni sono soddisfatte, procediamo a verificare la presenza di breakout alti e bassi.
Per un breakout alto, controlliamo se il flag di breakout alto è falso e se il prezzo ask dell'ultimo tick è maggiore o uguale al massimo dell'intervallo. In tal caso, apriamo una posizione di acquisto utilizzando la funzione PositionOpen. Allo stesso modo, per un breakout basso, controlliamo se il flag di breakout basso è falso e se il prezzo bid dell'ultimo tick è inferiore o uguale al range minimo. Se queste condizioni sono soddisfatte, apriamo una posizione di vendita.
Compiliamo il codice ed eseguiamo un test visivo per confermare che le posizioni sono aperte quando si verifica un breakout. Successivamente, implementiamo la chiusura della posizione. Prima di calcolare un nuovo intervallo, controlliamo se l'ora corrente è maggiore o uguale all'ora di chiusura dell'intervallo. In tal caso, chiamiamo la funzione ClosePositions. Questa funzione scorre tutte le posizioni aperte con il numero magico specificato e le chiude utilizzando la funzione PositionClose. Utilizziamo un ciclo di conto alla rovescia per garantire che tutte le posizioni siano chiuse anche se il numero totale di posizioni cambia durante il ciclo.
Infine, compiliamo il codice ed eseguiamo un test visivo per confermare che le posizioni sono chiuse quando viene raggiunto il tempo di chiusura dell'intervallo.
Questo è tutto per questo video. Se hai domande, sentiti libero di lasciarle nei commenti qui sotto. Non dimenticare di mettere mi piace e iscriverti per altri video di programmazione. Grazie per la visione!