Trading Sistematico

Automazione del Trading con MQL5: Guida Pratica per Trader
MetaTrader5
Automazione del Trading con MQL5: Guida Pratica per Trader

Parte 6. Automazione del Trading In "Parte 6. Automazione del Trading" del libro "Programmazione MQL5 per Trader", approfondiremo un componente fondamentale del linguaggio MQL5. Inizieremo con una descrizione delle entità principali, come le specifiche degli strumenti finanziari e le impostazioni del conto di trading. Questi sono requisiti indispensabili per la creazione di Expert Advisor (EA) che funzionano correttamente. Successivamente, ci concentreremo sulle funzioni integrate e sulle strutture dati, sugli eventi specifici dei robot e sugli aspetti chiave delle operazioni degli Expert Advisor nel tester strategico. Il Tester Strategico di MetaTrader 5 è uno strumento cruciale nello sviluppo di robot di trading, poiché consente di valutare le performance finanziarie e ottimizzare le strategie di trading. Il tester offre strumenti indispensabili per il debug in varie modalità, compresa la prova visiva utilizzando barre o tick, con tick modellati o reali. Permette anche la riproduzione visiva del flusso di quotazioni e test semplici senza finestra visiva. Abbiamo già visto come testare gli indicatori in modalità visiva, ma per questi ultimi è consentito solo un insieme limitato di impostazioni. Sviluppando Expert Advisor, avremo accesso all'intera gamma di funzionalità del tester. Esamineremo anche una rappresentazione diversa dei dati di mercato: la Profondità di Mercato e la sua interfaccia software. MetaTrader 5 offre la possibilità di analizzare e negoziare strumenti finanziari (simboli), che formano la base di tutti i sottosistemi del terminale. Gli utenti possono selezionare i simboli dall'elenco fornito dal broker e monitorarli nella Market Watch. Con l'API MQL5, è possibile visualizzare e analizzare le caratteristiche di tutti i simboli, aggiungendoli o rimuovendoli dalla Market Watch. Oltre ai simboli standard forniti dai broker, MetaTrader 5 supporta la creazione di simboli personalizzati, caricando le loro proprietà e la storia delle quotazioni da fonti di dati arbitrari o calcolandoli utilizzando formule e programmi MQL5.

2023.12.16
Programmazione MQL5 per Trader: Creazione di Applicazioni per MetaTrader 5
MetaTrader5
Programmazione MQL5 per Trader: Creazione di Applicazioni per MetaTrader 5

Parte 5. Creazione di programmi applicativi in MQL5In "Parte 5. Creazione di programmi applicativi" del libro Programmazione MQL5 per Trader, ci immergeremo nel mondo delle API legate al trading algoritmico, esplorando l'analisi e l'elaborazione dei dati finanziari, la visualizzazione dei grafici, l'automazione e le interazioni con l'utente.Inizieremo con i principi generali per la creazione di programmi MQL e analizzeremo i tipi di eventi, le funzionalità e i modelli disponibili nel terminale. Successivamente, esploreremo l'accesso alle serie temporali, le operazioni con i grafici e gli oggetti grafici, oltre ai principi di creazione e applicazione di ciascun tipo di programma MQL separatamente.Il terminale MetaTrader 5 supporta cinque tipi di programmi: indicatori tecnici, Sistemi Trading (EAs) per il trading automatico o semi-automatico, script per eseguire compiti una tantum, servizi per operazioni in background e librerie per moduli funzionali individuali.Ci concentreremo sul lavoro con indicatori e grafici e apprenderemo tecniche che possono essere applicate anche ai Sistemi Trading. Lo sviluppo dei Sistemi Trading sarà trattato nella prossima parte del libro, dove esploreremo l'esecuzione automatica degli ordini, la formalizzazione delle strategie di trading e i loro test e ottimizzazioni utilizzando dati storici.Impareremo a utilizzare gli indicatori standard già integrati e come creare le nostre applicazioni personalizzate da zero o basate su altri indicatori. Tutti i programmi compilati sono visualizzati nel Navigator di MetaTrader 5, ad eccezione delle librerie EX5, che sono utilizzate da altri programmi ma non hanno una rappresentazione separata nel Navigator.In definitiva, acquisiremo una comprensione più approfondita delle potenzialità del linguaggio MQL5 e della sua applicazione nel trading algoritmico. Questo ci permetterà di lavorare in modo efficace con i dati finanziari e di creare indicatori di trading e Sistemi Trading.

2023.12.16
Guida all'Utilizzo delle API MQL5 per il Trading Automatizzato
MetaTrader5
Guida all'Utilizzo delle API MQL5 per il Trading Automatizzato

Parte 4. API MQL5 Comuni Nelle sezioni precedenti del libro, abbiamo esplorato le basi del linguaggio di programmazione MQL5, analizzando la sua sintassi, le regole d'uso e i concetti chiave. Tuttavia, per scrivere programmi reali che utilizzano l'elaborazione dei dati e il trading automatizzato, è fondamentale sfruttare molte funzioni integrate per interagire con il terminale MetaTrader 5. In "Parte 4. API MQL5 Comuni", ci concentreremo sul padroneggiare le funzioni integrate (API MQL5) e ci addentreremo gradualmente in sottosistemi specializzati. Ogni programma MQL5 può utilizzare una miriade di tecnologie e funzionalità. Pertanto, ha senso iniziare con le funzioni più semplici e utili, che possono essere utilizzate nella maggior parte dei programmi. Tra i temi principali, studieremo le operazioni sugli array, l'elaborazione delle stringhe, le interazioni con i file, la conversione dei dati e le funzioni di interazione con l'utente. Esploreremo anche le funzioni matematiche e la gestione dell'ambiente di programmazione. Contrariamente ad altri linguaggi di programmazione, l'utilizzo delle funzioni integrate dell'API MQL5 non richiede direttive di preprocessore aggiuntive. I nomi di tutte le funzioni API MQL5 sono disponibili nel contesto globale (namespace) e possono sempre essere accessibili incondizionatamente. Discuteremo anche la possibilità di utilizzare nomi simili in diversi contesti di programma, come nomi di metodi di classe o namespace personalizzati. In questi casi, è necessario utilizzare l'operatore di risoluzione del contesto per richiamare la funzione globale, di cui abbiamo parlato nella sezione sui tipi annidati, i namespace e l'operatore di contesto '::'. La programmazione richiede spesso operazioni con vari tipi di dati. Nelle sezioni precedenti, abbiamo già visto i meccanismi per la conversione esplicita e implicita dei tipi di dati integrati. Tuttavia, queste conversioni potrebbero non essere sempre adatte per vari motivi. Per fornire una conversione dei dati più precisa tra diversi tipi, l'API MQL5 include un insieme di funzioni di conversione. Particolare attenzione è riservata alle funzioni per le conversioni tra stringhe e altri tipi, come numeri, date e orari, colori, strutture ed enumerazioni.

2023.12.15
Programmazione OOP in MQL5 per Trader: Scopri il Potere degli Oggetti
MetaTrader5
Programmazione OOP in MQL5 per Trader: Scopri il Potere degli Oggetti

Parte 3. Programmazione Orientata agli Oggetti in MQL5 "Parte 3. Programmazione Orientata agli Oggetti in MQL5" ti porta a scoprire il mondo della programmazione orientata agli oggetti (OOP) nel linguaggio MQL5. Sviluppare software comporta spesso la gestione di più entità, e la tecnologia OOP è fondamentale per migliorare la facilità di programmazione, la produttività e la qualità. La tecnologia OOP si basa sul concetto di oggetti, che sono variabili di un tipo personalizzato definite dal programmatore utilizzando gli strumenti MQL5. Creare tipi personalizzati consente di modellare oggetti e semplifica la scrittura e la manutenzione dei programmi. Questa sezione esamina diversi modi per definire nuovi tipi, tra cui classi, strutture e unioni. Questi tipi personalizzati possono combinare dati e algoritmi per descrivere lo stato e il comportamento degli oggetti applicativi. L'autore approfondisce il principio del "dividi e conquista", dimostrando che gli oggetti sono mini-programmi, ognuno responsabile della risoluzione di un compito piccolo ma logicamente completo. Puoi combinare oggetti in un unico sistema per creare prodotti e servizi di complessità arbitraria. Per aiutarti a esplorare le potenzialità di MQL5, la Parte "Programmazione Orientata agli Oggetti in MQL5" introduce i principi dell'OOP insieme a esempi pratici di implementazione. Il libro tratta anche di template, interfacce e namespace, rivelando la flessibilità e la potenza della OOP nello sviluppo di programmi in MQL5.

2023.12.15
Introduzione a MQL5: Ambienti di Sviluppo e Programmazione per Trader
MetaTrader5
Introduzione a MQL5: Ambienti di Sviluppo e Programmazione per Trader

Parte 1. Introduzione a MQL5 e all'ambiente di sviluppo In questa prima parte del libro, intitolata "Introduzione a MQL5 e all'ambiente di sviluppo", andremo a scoprire le basi del linguaggio MQL5 e del suo ambiente di sviluppo. Una delle novità principali che MQL5 porta rispetto a MQL4 (il linguaggio di MetaTrader 4) è il supporto per la programmazione orientata agli oggetti (OOP), rendendolo simile a C++. Anche se alcune funzioni OOP sono state già trasferite in MQL4, molti trader che non hanno esperienza di programmazione potrebbero trovare l'OOP piuttosto complesso. L'obiettivo di questo libro è rendere questo approccio comprensibile e accessibile a tutti. Si tratta di un valido supplemento al riferimento MQL5, coprendo tutti gli aspetti della programmazione in MQL5 e spiegando dettagliatamente ogni processo. Gli sviluppatori possono scegliere tra uno stile di programmazione orientato agli oggetti e uno procedurale, oppure combinarli. Coloro che hanno già esperienza di programmazione possono saltare le basi. I programmatori C++ troveranno più facile padroneggiare MQL5, ma è importante prestare attenzione alle differenze tra i due linguaggi per evitare errori. Con MQL5, puoi creare vari tipi di programmi, come indicatori per la visualizzazione grafica dei dati, Expert Advisor per l'automazione del trading, script per azioni una tantum e servizi per compiti in background. Una caratteristica distintiva di MetaTrader 5 è la gestione dell'intero sistema di trading direttamente dal terminale client, dove i programmi MQL5 vengono eseguiti e inviano comandi di trading al server. Le applicazioni MQL5 non vengono installate sul server. In questa prima parte, spiegheremo come modificare, compilare ed eseguire programmi, oltre a trattare vari tipi di dati, variabili, espressioni, array, debugging e output.

2023.12.15
Utilizzare un Modello ONNX per Riconoscere le Cifre Scritte a Mano in MetaTrader 5
MetaTrader5
Utilizzare un Modello ONNX per Riconoscere le Cifre Scritte a Mano in MetaTrader 5

Un Expert Advisor per il Riconoscimento delle Cifre Scritte a Mano Il database MNIST è composto da 60.000 immagini utilizzate per l'addestramento e 10.000 per il test. Queste immagini sono state create "ri-mixando" un set originale NIST di campioni in bianco e nero di 20x20 pixel, ottenuti dal Bureau del Censimento degli Stati Uniti e arricchiti con campioni di test prelevati da studenti delle scuole superiori americane. I campioni sono stati normalizzati a una dimensione di 28x28 pixel e sono stati applicati filtri per migliorare la qualità, introducendo livelli di scala di grigi. Il modello di riconoscimento delle cifre scritte a mano mnist.onnx è stato scaricato da Github dal Model Zoo (opset 8). Chi è interessato può scaricare e provare altri modelli, escludendo quelli con opset 1, che non è più supportato dall'ultima runtime di ONNX. Sorprendentemente, il vettore di output non è stato elaborato con la funzione di attivazione Softmax, come è comune nei modelli di classificazione. Ma non preoccupatevi, possiamo implementarlo facilmente noi stessi. int PredictNumber(void)   {    static matrixf image(28,28);    static vectorf result(10);    PrepareMatrix(image);    if(!OnnxRun(ExtModel,ONNX_DEFAULT,image,result))      {       Print("OnnxRun errore ",GetLastError());       return(-1);      }    result.Activation(result,AF_SOFTMAX);    int predict=int(result.ArgMax());    if(result[predict]<0.8)       Print(result);       Print("valore ",predict," previsto con probabilità ",result[predict]);    return(predict);   } Disegna le cifre in una griglia speciale utilizzando il mouse, tenendo premuto il pulsante sinistro. Per riconoscere la cifra disegnata, premi il pulsante CLASSIFICA. Se la probabilità ottenuta per la cifra riconosciuta è inferiore a 0.8, il vettore risultante con le probabilità per ciascuna classe viene stampato nel log. Ad esempio, prova a classificare un campo di input vuoto non compilato. [0.095331445,0.10048489,0.10673151,0.10274081,0.087865397,0.11471312,0.094342403,0.094900772,0.10847695,0.09441267] valore 5 previsto con probabilità 0.11471312493085861 Per qualche motivo, l'accuratezza del riconoscimento è notevolmente inferiore per il numero nove (9). Le cifre inclinate a sinistra vengono riconosciute con maggiore precisione.

2023.11.23
Strategia Breakout Martin Gale: EA per MetaTrader 5
MetaTrader5
Strategia Breakout Martin Gale: EA per MetaTrader 5

La strategia "Martin Gale Breakout" è un Expert Advisor (EA) progettato specificamente per il trading nel mercato Forex. Questo EA combina un approccio al breakout con elementi del sistema di gestione del denaro Martin Gale, ottimizzando così le performance di trading. Parametri di Input: TakeProfPoints: Questo parametro consente di impostare il livello di Take Profit in punti per ogni operazione. BalancePercentageAvailable: Specifica la percentuale del saldo del tuo conto che verrà utilizzata per il trading. TP_Percentage_of_Balance: Determina la percentuale del saldo del tuo conto da utilizzare come Take Profit per ogni operazione. SL_Percentage_of_Balance: Imposta la percentuale del tuo saldo da allocare come Stop Loss per le operazioni. Start_The_Recovery: Questo parametro gioca un ruolo cruciale nel processo di recupero, controllando quando e come attivare le misure di recupero. TP_Points_Multiplier: Un moltiplicatore per i punti di Take Profit, che consente strategie di presa di profitto flessibili. MagicNumber: Un identificatore unico per questo EA, assicurando che possa gestire le proprie operazioni in autonomia. Punti Salienti della Strategia: Trading di Breakout: L'EA si specializza nell'individuare opportunità di breakout nel mercato, quando i movimenti dei prezzi superano livelli chiave. Dimensionamento Dinamico dei Lotti: Le dimensioni dei lotti vengono regolate dinamicamente in base al saldo del tuo conto e alle tue preferenze di rischio, seguendo i principi della gestione del denaro Martin Gale. Recupero delle Perdite: L'EA include un potente meccanismo di recupero progettato per riprendersi dalle perdite modificando in modo adattivo i parametri di trading quando necessario. La funzione principale utilizzata in questo EA è CalcLotWithTP(), che ha 3 parametri di input: Takeprofit, Startprice, Endprice. Questa funzione calcola il volume necessario per l'operazione in modo da raggiungere l'obiettivo di profitto quando si entra in una operazione al Startprice e si esce al Endprice. Tutto nel codice è commentato per facilitarne la comprensione.

2023.09.26
Trailing Take Profit: Una Nuova Strategia per MetaTrader 5
MetaTrader5
Trailing Take Profit: Una Nuova Strategia per MetaTrader 5

Se sei un trader, sicuramente conosci il concetto di Trailing Stop, che segue il prezzo fino a quando non raggiunge il livello di stop loss, chiudendo la posizione in profitto. Oggi voglio parlarti di una novità: il Trailing Take Profit, una strategia che inverte questo meccanismo, chiudendo la posizione in perdita quando il prezzo scende. Facciamo un esempio pratico. Immagina di avere una posizione in perdita e che il prezzo attuale raggiunga il livello di TrailingTPStart (ad esempio, se il TrailingTPStart è impostato a 500 punti, ciò significa che quando il prezzo è a 500 punti dall'apertura e la posizione è in perdita di 500 punti, il take profit inizia a seguire il prezzo). Qui entra in gioco il TrailingTPDistance, che rappresenta la distanza massima tra il take profit e il prezzo attuale. Non so se questa strategia ti sarà utile, ma può essere implementata in alcuni EA senza stop loss per ridurre le perdite in determinate situazioni. Come utilizzare il Trailing Take Profit EA Avvia l'EA TrailingTakeProfit. Se TrailingTP_Mode è impostato su vero, l'EA inizierà a funzionare. Inserisci il simbolo, ad esempio GBPUSD, nell'EA. Imposta il TrailingTPStart, che indica i punti dal prezzo attuale dove il take profit inizia a seguire il prezzo quando la posizione è in perdita. Imposta il TrailingTPDistance, che rappresenta la distanza massima in punti tra il take profit e il prezzo attuale.

2023.07.11
AK-47 Scalper EA: Il Tuo Alleato per MetaTrader 5
MetaTrader5
AK-47 Scalper EA: Il Tuo Alleato per MetaTrader 5

Se sei un trader alla ricerca di un sistema di trading automatizzato efficace, l'AK-47 Scalper EA potrebbe fare al caso tuo. In questo post, esploreremo i parametri di input e come configurare questo Expert Advisor per massimizzare le tue operazioni. 1. Parametri di input #define ExtBotName "AK-47 EA" //Nome del Bot #define  Version "1.00" //Importa classi necessarie #include <Trade\PositionInfo.mqh> #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh>   #include <Trade\AccountInfo.mqh> #include <Trade\OrderInfo.mqh> //--- Introduzione di variabili predefinite per migliorare la leggibilità del codice #define Ask    SymbolInfoDouble(_Symbol, SYMBOL_ASK) #define Bid    SymbolInfoDouble(_Symbol, SYMBOL_BID) //--- Parametri di input input string  EASettings         = "---------------------------------------------"; //-------- <Impostazioni EA> -------- input int      InpMagicNumber    = 124656;   //Numero Magico input string  MoneySettings      = "---------------------------------------------"; //-------- <Impostazioni Finanziarie> -------- input bool     isVolume_Percent  = true;     //Consenti Percentuale di Volume input double   InpRisk           = 3;        //Percentuale di Rischio sul Saldo (%) input string  TradingSettings    = "---------------------------------------------"; //-------- <Impostazioni di Trading> -------- input double   Inpuser_lot       = 0.01;     //Lotti input double   InpSL_Pips        = 3.5      //Stoploss (in Pips) input double   InpTP_Pips        = 7        //TP (in Pips) (0 = No TP) input int      InpMax_slippage   = 3        //Massimo slippage consentito in Pips. input double   InpMax_spread     = 5        //Massimo spread consentito (in Punti) (0 = flottante) input string   TimeSettings      = "---------------------------------------------"; //-------- <Impostazioni Orarie di Trading> -------- input bool     InpTimeFilter     = true;     //Filtro Orario di Trading input int      InpStartHour      = 2;        //Ora di Inizio input int      InpStartMinute    = 30       //Minuto di Inizio input int      InpEndHour        = 21       //Ora di Fine input int      InpEndMinute      = 0        //Minuto di Fine 2. Inizializzazione delle variabili locali //--- Variabili int      Pips2Points;    // slippage  3 pips    3=points    30=points double   Pips2Double;    // Stoploss 15 pips    0.015      0.0150 bool     isOrder = false; int      slippage; long     acSpread; string   strComment = ""; CPositionInfo  m_position;                   // oggetto posizione di trading CTrade         m_trade;                      // oggetto di trading CSymbolInfo    m_symbol;                     // oggetto info simbolo CAccountInfo   m_account;                    // wrapper info account COrderInfo     m_order;                      // oggetto ordini in attesa 3. Codice Principale a/ Funzione di inizializzazione dell'Expert //+------------------------------------------------------------------+ //| Funzione di inizializzazione dell'Expert                                   | //+------------------------------------------------------------------+ int OnInit() {    //Rilevamento di 3 o 5 cifre    //Pip e punto    if(_Digits % 2 == 1) {       Pips2Double  = _Point*10;       Pips2Points  = 10;       slippage = 10* InpMax_slippage;    }    else {       Pips2Double  = _Point;       Pips2Points  =  1;       slippage = InpMax_slippage;    }         if(!m_symbol.Name(Symbol())) // Imposta nome simbolo       return(INIT_FAILED);           RefreshRates(); //---    m_trade.SetExpertMagicNumber(InpMagicNumber);    m_trade.SetMarginMode();    m_trade.SetTypeFillingBySymbol(m_symbol.Name());    m_trade.SetDeviationInPoints(slippage); //---    return(INIT_SUCCEEDED); } b/ Funzione di tick dell'Expert //+------------------------------------------------------------------+ //| Funzione di tick dell'Expert                                             | //+------------------------------------------------------------------+ void OnTick() {    if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) == false) {       Comment("LazyBot\nTrading non consentito.");       return;    }         MqlDateTime structTime;    TimeCurrent(structTime);    structTime.sec = 0;       //Imposta l'ora di inizio    structTime.hour = InpStartHour;    structTime.min = InpStartMinute;          datetime timeStart = StructToTime(structTime);       //Imposta l'ora di fine    structTime.hour = InpEndHour;    structTime.min = InpEndMinute;    datetime timeEnd = StructToTime(structTime);       acSpread = SymbolInfoInteger(_Symbol, SYMBOL_SPREAD);          strComment = "\n" + ExtBotName + " - v." + (string)Version;    strComment += "\nOra server = " + TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS) + " - " + DayOfWeekDescription(structTime.day_of_week);    strComment += "\nOrario di trading = [" + (string)InpStartHour + "h" + (string)InpStartMinute + " --> " +  (string)InpEndHour + "h" + (string)InpEndMinute + "]";       strComment += "\nSpread attuale = " + (string)acSpread + " Punti";       Comment(strComment);       //Aggiorna valori    UpdateOrders();       TrailingStop();           //Condizioni di trading secondo l'orario    if(InpTimeFilter) {       if(TimeCurrent() >= timeStart && TimeCurrent() < timeEnd) {          if(!isOrder) OpenOrder();       }    }    else {       if(!isOrder) OpenOrder();    }    } //---Fine della funzione 3.1 Calcola il segnale per inviare ordini //+------------------------------------------------------------------+ //| CALCOLA IL SEGNALE E INVIA L'ORDINE                                  | //+------------------------------------------------------------------+ void OpenOrder(){       ENUM_ORDER_TYPE OrdType = ORDER_TYPE_SELL;//-1;       double TP = 0;    double SL = 0;    string comment = ExtBotName;       //Calcola Lotti    double lot1 = CalculateVolume();       if(OrdType == ORDER_TYPE_SELL) {       double OpenPrice = Bid - NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits);              TP = OpenPrice - NormalizeDouble(InpTP_Pips * Pips2Double, _Digits);       SL = Ask + NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits);                if(CheckSpreadAllow()                                             //Controlla Spread          && CheckVolumeValue(lot1)                                      //Controlla volume          && CheckOrderForFREEZE_LEVEL(ORDER_TYPE_SELL_STOP, OpenPrice)  //Controlla distanza tra openPrice e Bid          && CheckStopLoss(OpenPrice,  SL, TP)                           //Controlla distanza da SL, TP a OpenPrice          && CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_SELL)) //Controlla bilancio quando il comando viene eseguito       {          if(!m_trade.SellStop(lot1, OpenPrice, m_symbol.Name(), SL, TP, ORDER_TIME_GTC, 0, comment))          Print(__FUNCTION__,"--> Errore OrderSend ", m_trade.ResultComment());       }    }    else if(OrdType == ORDER_TYPE_BUY) {       double OpenPrice = Ask + NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits);       SL = Bid - NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits);              if(CheckSpreadAllow()                                             //Controlla Spread          && CheckVolumeValue(lot1)                                      //Controlla volume          && CheckOrderForFREEZE_LEVEL(ORDER_TYPE_BUY_STOP, OpenPrice)   //Controlla distanza tra openPrice e Bid          && CheckStopLoss(OpenPrice,  SL, TP)                           //Controlla distanza da SL, TP a OpenPrice                  && CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_BUY))  //Controlla bilancio quando il comando viene eseguito       {          if(!m_trade.BuyStop(lot1, OpenPrice, m_symbol.Name(), SL, TP, ORDER_TIME_GTC, 0, comment))// usa "ORDER_TIME_GTC" quando la data di scadenza = 0          Print(__FUNCTION__,"--> Errore OrderSend ", m_trade.ResultComment());       }    }    } 3.2 Calcola il Volume //+------------------------------------------------------------------+ //| CALCOLA IL VOLUME                                                 | //+------------------------------------------------------------------+ // Definiamo la funzione per calcolare la dimensione della posizione e restituire il lotto da ordinare. double CalculateVolume() {    double LotSize = 0;    if(isVolume_Percent == false) {       LotSize = Inpuser_lot;      }    else {       LotSize = (InpRisk) * m_account.FreeMargin();       LotSize = LotSize /100000;       double n = MathFloor(LotSize/Inpuser_lot);       //Comment((string)n);       LotSize = n * Inpuser_lot;              if(LotSize < Inpuser_lot)          LotSize = Inpuser_lot;       if(LotSize > m_symbol.LotsMax()) LotSize = m_symbol.LotsMax();       if(LotSize < m_symbol.LotsMin()) LotSize = m_symbol.LotsMin();    }      //---    return(LotSize); }3.3 Funzione di "Trailing Stop" dell'EA,  SL cambierà ogni volta che il prezzo cambia (in giù) //+------------------------------------------------------------------+ //| TRAILING STOP                                                    | //+------------------------------------------------------------------+ void TrailingStop() {    double SL_in_Pip = 0;    for(int i = PositionsTotal() - 1; i >= 0; i--) {       if(m_position.SelectByIndex(i)) {    // seleziona gli ordini per indice per accedere ulteriormente alle sue proprietà                  if((m_position.Magic() == InpMagicNumber) && (m_position.Symbol() == m_symbol.Name())) {             // Per ordine di acquisto             if(m_position.PositionType() == POSITION_TYPE_BUY) {                //--Calcola SL quando il prezzo cambia                SL_in_Pip = NormalizeDouble(Bid - m_position.StopLoss(), _Digits) / Pips2Double;                if(SL_in_Pip > InpSL_Pips) {                   double newSL = NormalizeDouble(Bid - InpSL_Pips * Pips2Double, _Digits);                                      if(!m_trade.PositionModify(m_position.Ticket(), newSL, m_position.TakeProfit())) {                      Print(__FUNCTION__,"--> Errore OrderModify ", m_trade.ResultComment());                    continue                 }             }           }             //Per ordine di vendita             else if(m_position.PositionType() == POSITION_TYPE_SELL) {                //--Calcola SL quando il prezzo cambia                SL_in_Pip = NormalizeDouble(m_position.StopLoss() - Bid, _Digits) / Pips2Double;                if(SL_in_Pip > InpSL_Pips){                   double newSL = NormalizeDouble(Bid + (InpSL_Pips) * Pips2Double, _Digits);               if(!m_trade.PositionModify(m_position.Ticket(), newSL, m_position.TakeProfit())) {                      Print(__FUNCTION__,"--> Errore OrderModify ", m_trade.ResultComment());                      //continue;                 }           }             }       }//--- Modifica ordini in attesa         for(int i=OrdersTotal()-1; i>=0; i--) {// restituisce il numero di ordini correnti       if(m_order.SelectByIndex(i)) {      // seleziona l'ordine in attesa per indice per accesso successivo alle sue proprietà          if(m_order.Symbol() == m_symbol.Name() && m_order.Magic()==InpMagicNumber) {             if(m_order.OrderType() == ORDER_TYPE_BUY_STOP) {                SL_in_Pip = NormalizeDouble(Bid - m_order.StopLoss(), _Digits) / Pips2Double;                               if(SL_in_Pip < InpSL_Pips/2) {                   double newOP = NormalizeDouble(Bid + (InpSL_Pips/2) * Pips2Double, _Digits);                   double newTP =  NormalizeDouble(newOP + InpTP_Pips * Pips2Double, _Digits);                   double newSL = NormalizeDouble(Bid - (InpSL_Pips/2) * Pips2Double, _Digits);                                     if(!m_trade.OrderModify(m_order.Ticket(), newOP, newSL, newTP, ORDER_TIME_GTC,0)) {                      Print(__FUNCTION__,"--> Errore Modifica Ordine in Attesa!", m_trade.ResultComment());                      continue                 }               }             }           else if(m_order.OrderType() == ORDER_TYPE_SELL_STOP) {                SL_in_Pip = NormalizeDouble(m_order.StopLoss() - Ask, _Digits) / Pips2Double;                           if(SL_in_Pip < InpSL_Pips/2){                   double newOP = NormalizeDouble(Ask - (InpSL_Pips/2) * Pips2Double, _Digits);                   double newTP =  NormalizeDouble(newOP - InpTP_Pips * Pips2Double, _Digits);                   double newSL = NormalizeDouble(Ask + (InpSL_Pips/2) * Pips2Double, _Digits);                                      if(!m_trade.OrderModify(m_order.Ticket(), newOP, newSL, newTP, ORDER_TIME_GTC,0)) {                      Print(__FUNCTION__,"--> Errore Modifica Ordine in Attesa!", m_trade.ResultComment());                      //continue                     }               }                }       }//--- Fine della funzione   } }

2023.06.12
Chiusura Posizioni Azionarie: Guida all'Utilizzo di MT5
MetaTrader5
Chiusura Posizioni Azionarie: Guida all'Utilizzo di MT5

Se sei un trader attivo su MetaTrader 5, saprai quanto sia fondamentale gestire le tue posizioni in modo efficace. Oggi parliamo della chiusura delle posizioni azionarie e di come farlo al meglio con MT5, per massimizzare i tuoi profitti e minimizzare le perdite.Perché chiudere una posizione?La chiusura di una posizione può sembrare semplice, ma è una delle decisioni più importanti che un trader deve prendere. Ecco alcune situazioni in cui potrebbe essere opportuno chiudere una posizione:Raggiungimento del target di profitto: Se hai impostato un obiettivo di profitto e il mercato ha raggiunto quel punto, è il momento di chiudere e incassare i guadagni.Stop loss attivato: Se le cose non vanno come previsto e il tuo stop loss si attiva, chiudere la posizione è fondamentale per limitare le perdite.Cambiamenti di mercato: Notizie economiche o eventi imprevisti possono influenzare drasticamente i mercati. Essere pronti a chiudere le posizioni in queste situazioni può fare la differenza.Come chiudere una posizione su MetaTrader 5Chiudere una posizione su MT5 è un processo semplice. Ecco i passaggi da seguire:Aprite la finestra Terminale (CTRL + T) per visualizzare le vostre posizioni aperte.Selezionate la posizione che desiderate chiudere.Cliccate con il tasto destro del mouse sulla posizione e selezionate Chiudi ordine.In alternativa, potete utilizzare il pulsante di chiusura regolabile che vedete nell'immagine qui sopra. Questo strumento è molto utile per chiudere rapidamente le posizioni senza dover navigare attraverso i menu.ConclusioneLa chiusura delle posizioni è una competenza essenziale per ogni trader. Mantenere il controllo e agire tempestivamente può fare la differenza tra un trade vincente e uno perdente. Assicurati di utilizzare MetaTrader 5 al massimo delle sue potenzialità e di seguire le tue strategie di trading con disciplina.

2023.05.27
Gestione Dinamica del Trailing Stop Loss e Target di Profitto per MetaTrader 5
MetaTrader5
Gestione Dinamica del Trailing Stop Loss e Target di Profitto per MetaTrader 5

Oggi parliamo di una strategia di gestione del rischio per un Expert Advisor (EA) in MetaTrader 5 che si occupa di gestire le operazioni esistenti in base ai parametri di input. Questo sistema si concentra sulla chiusura delle operazioni quando si raggiunge una soglia di profitto o perdita, utilizzando un trailing stop loss per garantire i profitti man mano che il trade si muove a favore del trader.Ecco una breve spiegazione del codice:Includiamo i file header necessari per le classi di informazioni su trade e simboli.Definiamo i parametri di input per la percentuale di rischio, la percentuale di profitto e i punti di trailing stop.Dichiariamo variabili globali per gli oggetti di informazioni su trade e simboli.La funzione OnInit inizializza l'oggetto di informazioni sul simbolo e verifica eventuali errori.La funzione OnDeinit non esegue alcuna azione in questo caso.La funzione OnTick viene chiamata ogni volta che arriva un nuovo tick, e richiama la funzione CheckTrades.La funzione CheckTrades itera attraverso tutte le posizioni aperte e verifica se la posizione appartiene al simbolo corrente. Se sì, calcola il profitto attuale e determina se sono state raggiunte le soglie di profitto o perdita. Se una delle due soglie viene raggiunta, chiude la posizione.Se nessuna soglia è stata raggiunta, il codice controlla se il tipo di posizione è un ordine di acquisto o vendita e aggiorna il livello del stop loss con un trailing stop. Se il nuovo livello di stop loss è più favorevole rispetto all'attuale, la posizione viene modificata con il nuovo livello di stop loss.Questo codice fornisce una strategia di gestione del rischio semplice per gestire le operazioni esistenti, adeguando dinamicamente il livello di stop loss in base a un trailing stop e chiudendo le operazioni quando si raggiungono le soglie di profitto o perdita.

2023.04.28
Sistema Trading per Aprire Ordini Multipli di Acquisto e Vendita in Base all'Input dell'Utente
MetaTrader5
Sistema Trading per Aprire Ordini Multipli di Acquisto e Vendita in Base all'Input dell'Utente

Se sei un trader e stai cercando un modo per gestire i tuoi ordini in modo più efficiente, questo Sistema Trading per MetaTrader 5 è proprio ciò di cui hai bisogno. Grazie a questo EA, potrai aprire più ordini di acquisto e vendita semplicemente fornendo i tuoi parametri. Il sistema è dotato di variabili di input che ti permettono di impostare il numero di ordini da aprire, la percentuale di rischio per ogni operazione, il livello di stop loss, il take profit e la slippage. Inoltre, l'interfaccia utente è molto intuitiva, con pulsanti Acquista e Vendi che attivano l'apertura degli ordini. Ma come funziona esattamente? L'EA calcola la dimensione del lotto adeguata in base alla percentuale di rischio impostata e allo stop loss. Prima di eseguire gli ordini, verifica anche lo spread rispetto alla slippage configurata. Aprirà ordini di acquisto se il prezzo medio è superiore al prezzo ask attuale, mentre ordini di vendita se il prezzo medio è inferiore al prezzo bid attuale. Quando clicchi su uno dei pulsanti, il sistema aprirà il numero specificato di ordini di acquisto o vendita utilizzando la dimensione del lotto calcolata, insieme ai livelli di stop loss e take profit definiti. Tieni presente che questo EA è un esempio semplice e potrebbe non essere adatto per il trading dal vivo senza ulteriori modifiche e ottimizzazioni. È fondamentale testare qualsiasi algoritmo di trading in un ambiente sicuro, come un conto demo, prima di utilizzarlo con fondi reali.

2023.04.27
CheckTrades: Il tuo alleato per una gestione del rischio su MetaTrader 5
MetaTrader5
CheckTrades: Il tuo alleato per una gestione del rischio su MetaTrader 5

Se sei un trader su MetaTrader 5, conosci bene l'importanza di gestire il rischio in modo efficace. Oggi parliamo di CheckTrades, un Expert Advisor (EA) che ti aiuta a chiudere le posizioni aperte quando raggiungono un profitto o una perdita predefiniti, calcolati come percentuale del tuo saldo conto. Ma attenzione, questo EA non fornisce segnali di ingresso o regole per il timing di mercato; il suo scopo principale è quello di gestire il rischio delle posizioni già aperte, chiudendole quando si raggiunge una certa soglia di profitto o perdita. Variabili esterne utilizzate nel codice: RiskPercentage: Questa variabile rappresenta la massima perdita consentita per ogni operazione, espressa come percentuale del saldo conto. Quando la perdita attuale di una posizione aperta raggiunge questa percentuale, la posizione verrà chiusa per limitare il rischio. ProfitPercentage: Questa variabile indica il profitto desiderato per ogni operazione, sempre come percentuale del saldo conto. Quando il profitto attuale di una posizione aperta raggiunge questa percentuale, la posizione verrà chiusa per garantire il profitto. Essendo focalizzato sulla gestione del rischio, questo EA può essere utilizzato su qualsiasi simbolo o timeframe. Tuttavia, è fondamentale notare che CheckTrades dovrebbe essere integrato con una strategia di trading che includa segnali di ingresso e altre regole di gestione delle operazioni, per formare un sistema di trading completo. Se decidi di utilizzare questo codice come file di inclusione (posizionandolo nella cartella MQL5\Include), il suo scopo principale sarà la gestione del rischio, chiudendo le posizioni in base a soglie di profitto e perdita definite dall'utente. È possibile combinare questo file di inclusione con altri file che servono a scopi specifici, come il calcolo della dimensione della posizione in base al rischio di conto, trailing stop-loss e altro ancora. Per farlo, utilizza la direttiva #include nel tuo file principale EA per includere questo file e poi chiama la funzione CheckTrades() quando necessario per gestire le posizioni aperte.

2023.04.25
Primo Precedente 1 2 3 4 5 6 7 8 9 10 11 Successivo Ultimo