Il primo progetto algoritmico può registrare segnali, dimensionare una posizione o controllare l’esposizione senza inviare ordini. Scegli un’operazione di cui sai spiegare e verificare il risultato. Dati, regola e comportamento del programma vengono prima dei permessi operativi: automatizzare non dimostra redditività.

Che cosa automatizzi davvero?

Separa scelta del segnale, esecuzione di una decisione già presa, gestione della posizione e report. Dividere un ordine esistente non equivale a scegliere gli ingressi. Il rapporto BIS del 2020 sugli algoritmi di esecuzione FX tratta struttura del mercato, esecuzione e rischi; non certifica il rendimento di un robot retail. In quel documento EA significa execution algorithm, mentre in MetaTrader indica Expert Advisor: la stessa sigla non identifica lo stesso compito.

La specifica deve indicare strumento, fonte dati, orari, timestamp della decisione, ingresso, uscita, volume, limite di esposizione e comportamento se esiste già una posizione. Restano scelte umane e responsabilità di supervisione. Il software può eliminare un errore manuale e introdurne un altro, per esempio una richiesta duplicata dopo il riavvio. Correttezza del programma e risultato economico della regola richiedono verifiche separate.

Scegliere lo strumento per il compito

Per un promemoria può bastare un avviso. Il dialogo standard MT5 confronta prezzi, volume dell’ultima esecuzione o ora; non è un editor arbitrario di medie mobili e ATR. Una logica personalizzata può richiedere indicatore o EA. MQL5 opera nel terminale MT5; Python può analizzare dati o utilizzare un collegamento documentato pertinente. Non esiste una scala obbligatoria avvisi → MQL5 → Python → FIX.

Conta la compatibilità con conto, prodotto, dati e operazione. Non presumere numero standard di righe di codice, tempo di sviluppo, latenza o API disponibili presso ogni broker. Expert Advisor: regole, prove e posizioni del robot spiega il comportamento degli EA; Backtest Python: dati, tempi ed eseguiti riconciliati tratta un ambiente di ricerca distinto. Implementare la stessa idea in entrambi è una scelta, non un prerequisito.

Il terzo dato della media non si può indovinare

Regola didattica: ultima chiusura completata maggiore della media di esattamente tre chiusure completate, con pesi uguali e senza arrotondare prima del confronto. Servono x, 100 e 102, dal dato più vecchio al più recente. x è un valore storico mancante, non un prezzo futuro. Conosciamo soltanto 100 e 102.

Un dato mancante cambia la decisione

Un dato mancante cambia la decisioneChiusure x, 100,102. Se x = 98, media 100 e ultimo 102 supera la media. Se x = 106, media 308 diviso 3 circa 102,667 e 102 non supera. Asse comune 99–104, 80 pixel per unità. Senza x entrambe le ricostruzioni restano possibili; nessuna decisione.Tre chiusure richieste: x, 100, 102Due dati validi non completano una regola a tre.x = 98 → media 100 → condizione verax = 106 → media 102,667… → falsaUltima: 1029910499104x = 98x = 106Senza x: dati incompleti, nessuna valutazione.
Completamenti storici alternativi inventati, stesso ultimo prezzo. Il diagramma usa un asse lineare comune e non afferma che una delle due storie sia quella reale.

Scorri orizzontalmente o ingrandisci il diagramma per leggere i dettagli.

Con x = 98 la media è 100 e 102 > 100. Con x = 106 la media è 308/3, circa 102,667: 102 non la supera. Fare la media dei soli due dati dà 101 ma cambia la regola; usare zero inventa una chiusura. Registra dati incompleti e sospendi la valutazione. Se il recupero riesce dopo, controlla che riguardi proprio le barre previste. Il numero restituito da CopyRates è parte della verifica: successo parziale non equivale a tre record validi. Questo esempio riguarda completezza, non convenzione degli indici o ordine fisico dell’array.

Competenze e scelta del linguaggio

Servono programmazione e trattamento dei dati adeguati al progetto, dimensionamento del rischio e ragionamento statistico. Una breve curva di equity descrive quel campione, non il profitto futuro. Pianifica dati rappresentativi, valutazione separata fuori campione e controlli di esecuzione demo. MQL5 comunica attraverso MT5; Python può usare il terminale o altre interfacce documentate. Latenza completa dipende da codice, hosting, rete e broker: nessuna promessa generale di pochi millisecondi.

Da un’idea a una prova riproducibile

Per un crossover EUR/USD H1 ipotetico definisci EMA, Media mobile semplice, SMA, ATR, momento del segnale, stop e obiettivo. Una specifica offline può usare EMA 21, SMA 55 e una distanza basata su ATR scelta per l’esercizio, dichiarando barre completate e momento della valutazione. Inizia registrando segnali. Prova un segnale, assenza di segnale, cambio di barra, storico mancante e posizione già aperta. Input mancante non significa risultato valido «nessun ingresso».

Confronta decisioni manuali e automatiche sugli stessi dati e date. Cinque anni di backtest automatico non devono coincidere con sei mesi manuali: campioni, regimi e feed sono diversi. Riconcilia prima le discrepanze sullo stesso periodo, modella costi, poi valuta regole congelate su dati separati. Se cambi la regola dopo aver visto il risultato fuori campione, quel periodo entra nello sviluppo: non rimane una verifica intatta.

Modello USD originario separato: equity 10.000 USD, budget iniziale scelto 0,5 % per la perdita di prezzo, stop a 25 pip, pip EUR/USD 0,0001 e lotto standard da 100.000 EUR. Valore del pip 10 USD per lotto; budget 50 USD. Prima dei costi, 50/(25 × 10) = 0,20 lotti, cioè Valore nozionale della posizione di 20.000 EUR. Le impostazioni non sono raccomandazioni universali: nominale, margine e perdita pianificata sono grandezze diverse. Commissioni e ipotesi di esecuzione vengono considerate prima di adattare volume e passo contrattuale. Uno stop ordinario può eseguire oltre il livello durante un gap: 50 USD non è un massimo incondizionato.

Controlla anche la coerenza della quotazione. A t 1 Bid/Ask 1,1000/1,1002 e a t 2 1,1010/1,1012 danno entrambi spread di 2 pip. Mescolare Ask di t 1 e Bid di t 2 produce invece (1,1002−1,1010)/0,0001 = −8 pip. Un filtro spread < 2,5 accetterebbe quel dato costruito: non è uno spread negativo osservato nel mercato. SymbolInfoTick restituisce prezzi e ora dell’aggiornamento in una struttura MqlTick; verifica il successo e usa i campi della medesima struttura conservata. Aggiungi un caso che mescoli intenzionalmente due letture per scoprire l’errore. Coerenza dei dati non garantisce liquidità o prossimo fill.

Controesempio EUR distinto: riavvio e richiesta ambigua. Contratto inventato da 1 EUR per punto e unità, cinque unità, distanza di perdita assegnata 4 punti, senza costi: esposizione alla perdita modellata 20 EUR, che esaurisce il budget scelto 20. La prima richiesta è stata eseguita ma la risposta locale manca. Il riavvio invia altre cinque unità senza riconciliare: totale dieci e perdita modellata 40 EUR. «Non ho ricevuto conferma» non dimostra «non esiste la posizione». La procedura sospende nuovi invii e interroga ordini, deal e posizione; non chiude o inverte automaticamente sulla base dell’assenza di risposta. Costi, gap e slippage restano fuori da questo conto didattico.

La risposta mancante non dimostra mancata esecuzioneContratto EUR fittizio: 1 EUR/punto/unità, distanza 4 punti, costi esclusi; primo fill già avvenuto nel modello.ESEMPIO DI CALCOLOPrima richiesta5 unità / 20 EURRitentativo ciecoAltre 5 unitàStato ambiguoSospendere nuovi invii
La risposta mancante non dimostra mancata esecuzione. Contratto EUR fittizio: 1 EUR/punto/unità, distanza 4 punti, costi esclusi; primo fill già avvenuto nel modello.

Prima riconciliare, poi decidere se inviare.

Prima richiesta
5 unità / 20 EUR – Budget assegnato 20 esaurito.
Ritentativo cieco
Altre 5 unità – Totale 10: perdita modellata 40 EUR.
Stato ambiguo
Sospendere nuovi invii – Controllare ordini, deal e posizione; nessuna inversione automatica.

Tre verifiche: codice, dati e risultato economico

Regola sbagliata, codice errato, dati incompleti, differenze esecutive e problemi operativi sono cause distinte, senza una classifica universale in due sole categorie. OrderSend che restituisce true non dimostra da solo un fill completo: esamina codici di risultato ed effettive transazioni. Prima di ritentare dopo risposta ambigua controlla lo stato reale. Registra versione della regola, timestamp informativo e motivo dell’azione o dell’astensione.

Un Backtesting richiede dati pertinenti al prodotto, costi e cronologia corretti. Conserva tutte le varianti, anche quelle fallite; confronta singole decisioni e non solo profitti finali simili ottenuti con operazioni diverse. Verificare un vantaggio: campioni, costi e pesi sviluppa la valutazione di un vantaggio senza garantire aumento delle probabilità di successo.

Win rate, Valore atteso (expectancy) e profit factor rispondono a domande diverse. Campione fittizio a R fisso: cento operazioni, quaranta da +2 R e sessanta da −1 R. Vincite complessive 80 R, perdite 60 R, media +0,2 R prima dei costi; profit factor 80/60, circa 1,33. Non è una strategia testata, né una previsione del prossimo campione.

Annota costi di dati, hosting, licenze e tempo anche se il linguaggio non richiede una licenza a pagamento. Prezzi, diritti d’accesso e recupero dai guasti dipendono dalla configurazione. Verifica riavvii e interruzioni: un VPS non elimina supervisione e rischi. Per orari di esercizio italiani usa Europe/Rome sulla data effettiva, mantenendo separati timestamp UTC e ora del broker; lingua del programma non determina sede del servizio o normativa del conto.

Il primo progetto può fermarsi a un registro affidabile

  1. Scrivi dati, timestamp, regola, risultato e casi di sospensione per una sola operazione. Un registro verificabile può essere un progetto completo senza ordini.
  2. Controlla completezza e coerenza su esempi piccoli, distinguendo barra corrente e completata. Conserva il timestamp degli input di ogni decisione.
  3. Se occorrono ordini, usa un ambiente chiaramente demo. Prova conferma, rifiuto, riavvio e risposta ambigua, controllando lo stato prima del nuovo invio. Una scadenza di calendario non obbliga a passare al denaro reale.
  4. Congela la regola per dati separati, con costi del prodotto e stesse date nel confronto. Indaga differenze rilevanti senza inventare una tolleranza percentuale universale.
  5. Definisci pausa, aggiornamento e ripartenza. Disattivare AutoTrading locale non chiude posizioni; distingui protezioni accettate dal server e regole gestite dal programma, controllando ogni istanza remota. Demo non garantisce esecuzione live identica.