Trading Sistematico

Gestione del Rischio: Stop Loss Nascosto e Regolare su MetaTrader 4
MetaTrader4
Gestione del Rischio: Stop Loss Nascosto e Regolare su MetaTrader 4

Quando un trader apre una nuova posizione, la prima cosa a cui deve pensare è la gestione del capitale. Un modo comune per controllare il rischio è impostare un limite di perdita per le proprie operazioni. Molti trader credono che, una volta impostato un Stop Loss (o anche un Take Profit) e inserito il prezzo nella finestra di modifica della posizione, il broker sia obbligato a chiudere la loro posizione non appena il prezzo raggiunge questo limite. In realtà, però, non è proprio così. La chiusura della posizione dipende dal tipo di conto che hai presso il tuo broker. È importante sapere che nei conti ECN, quando fornisci un prezzo al broker come Stop Loss o Take Profit, il broker chiuderà la tua posizione al primo prezzo disponibile dopo che il limite è stato raggiunto. Se non sei d'accordo con questo, dai un'occhiata più da vicino alla tua storia di trading. Ti accorgerai che alcune delle tue operazioni sono state chiuse a un prezzo diverso da quello che avevi impostato, e potresti subire perdite maggiori o guadagni diversi da quelli previsti. Questo fenomeno è noto come slippage. Inoltre, alcuni trader sono convinti che il limite di perdita non debba essere indicato esattamente al broker. Nasce così lo Stop Loss Nascosto, progettato proprio per soddisfare questa esigenza. Da ora in poi, potrai avere sia lo Stop Loss Nascosto che quello Regolare insieme. Puoi impostare facilmente uno Stop Loss Regolare per le tue posizioni come hai sempre fatto. Non importa se utilizzi robot o se fai trading manualmente. Basta eseguire questo robot su un nuovo grafico separato (qualsiasi) per gestire tutte le tue posizioni. Il valore di input determina la distanza tra lo Stop Loss Nascosto e lo Stop Loss Regolare. Nota che questo valore è definito in punti, non in pip.

2021.04.23
Auto Scheduler: L'Esperto per il Trading Automatico su MetaTrader 4 e 5
MetaTrader4
Auto Scheduler: L'Esperto per il Trading Automatico su MetaTrader 4 e 5

Se sei un trader che utilizza MetaTrader 4 o 5, conosci bene l'importanza di gestire in modo efficace il tuo tempo di trading. Oggi parliamo di un ottimo strumento: l'Auto Scheduler, un Expert Advisor che ti permette di controllare quando il trading automatico è attivo nel tuo terminale. L'Auto Scheduler ti offre la possibilità di impostare dei periodi specifici durante i quali il trading automatico può essere attivato o disattivato. In questo modo, puoi evitare di essere preso alla sprovvista da eventi di mercato imprevisti o da notizie importanti. Puoi anche configurare i giorni della settimana in cui desideri che il trading automatico sia operativo e, cosa ancora più interessante, l'Auto Scheduler può chiudere automaticamente tutte le operazioni aperte e gli ordini in attesa prima di disattivare il trading automatico. Questo ti offre un ulteriore livello di sicurezza. Caratteristiche principali dell'Auto Scheduler Controllo totale: Imposta orari precisi per ogni giorno della settimana. Chiusura automatica: Chiusura delle operazioni attive prima di disabilitare il trading automatico. Facile da usare: Interfaccia intuitiva che semplifica la gestione del tuo trading. In breve, l'Auto Scheduler è un'ottima soluzione per tutti i trader che vogliono avere un maggiore controllo sulle loro operazioni, ottimizzando il tempo e riducendo il rischio associato al trading automatico. Non sottovalutare l'importanza di avere un piano ben definito!

2021.04.01
Chiudere Ordini per Obiettivo o Limitare le Perdite - Strumento per MetaTrader 4
MetaTrader4
Chiudere Ordini per Obiettivo o Limitare le Perdite - Strumento per MetaTrader 4

In questo articolo, esploreremo come utilizzare questo Expert Advisor (EA) come strumento di trading efficace. Input Necessari Per configurare correttamente l'EA, sono richiesti tre input: Obiettivo di Profitto Limite di Perdita Numero Magico extern    double         inTargetProfitMoney     = 10;       //Obiettivo di Profitto (€)extern    double         inCutLossMoney          = 0.0      //Limite di Perdita (€)extern    int            inMagicNumber           = 0        //Numero Magico Funzione di Inizializzazione Quando questo EA viene eseguito, verrà prima chiamata la funzione OnInit(), dove verificheremo l'inizializzazione degli input e delle variabili. int OnInit()  {    //---    if(inTargetProfitMoney <= 0)       {        Alert("Input non valido");        return(INIT_PARAMETERS_INCORRECT);     }     inCutLossMoney = MathAbs(inCutLossMoney) * -1;    //---    return(INIT_SUCCEEDED);  } Funzione OnTick Ogni volta che ci sarà un movimento di prezzo (tick), verrà chiamata la funzione OnTick(). void OnTick()  {    //---    double   tFloating = 0.0;    int tOrder  = OrdersTotal();    for(int i=tOrder-1; i>=0; i--)       {        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))          {            if(OrderMagicNumber() == inMagicNumber)               {                tFloating   += OrderProfit()+OrderCommission() + OrderSwap();               }        }     }    if(tFloating >= inTargetProfitMoney || (tFloating <= inCutLossMoney && inCutLossMoney < 0))     {      fCloseAllOrders();     }  } Funzione di Chiusura Ordini La funzione OnTick calcola continuamente il profitto o la perdita totale, chiudendo poi tutti gli ordini che raggiungono l'obiettivo o il limite massimo di perdita. void fCloseAllOrders()  {    double   priceClose = 0.0;    int tOrders = OrdersTotal();    for(int i=tOrders-1; i>=0; i--)       {        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))          {            if(OrderMagicNumber() == inMagicNumber && (OrderType() == OP_BUY || OrderType() == OP_SELL))               {                priceClose = (OrderType()==OP_BUY)?MarketInfo(OrderSymbol(), MODE_BID):MarketInfo(OrderSymbol(), MODE_ASK);                if(!OrderClose(OrderTicket(), OrderLots(), priceClose, slippage, clrGold))              {                   Print("AVVISO: Chiusura Fallita");              }           }        }     }  } Unisciti a Noi! Per ulteriori informazioni dettagliate e per condividere codice MQL4, ti invitiamo a unirti al nostro gruppo Telegram t.me/codeMQL.

2021.03.31
Guida al Trailing Stop con MagicNumber per MetaTrader 4
MetaTrader4
Guida al Trailing Stop con MagicNumber per MetaTrader 4

Il trailing stop è uno strumento fondamentale per i trader, poiché ci permette di spostare il nostro stop loss nell'area di profitto, garantendo così la sicurezza delle nostre operazioni in modo automatico.Iniziamo a scrivere il codice specificando i parametri di input per il trailing stop.input    bool     isTrailingStop = true;  //Attivazione Trailing Stop input    int      trailingStart  = 15;    //Inizio Trailing (pips) input    int      trailingStep   = 5;     //Passo Trailing (pips) input    int      MagicNumber = 0;        //Numero MagicoVariabile Globale//Variabile Globale double   myPoint    = 0.0;Quando eseguiamo questo EA, la funzione OnInit() verrà eseguita per la prima volta, e in questa funzione verranno validate e inizializzate le variabili di input.int OnInit()   {       if (isTrailingStop && trailingStart <= 0){       Alert ("Parametri non validi");       return(INIT_PARAMETERS_INCORRECT);    }       myPoint     = GetPipPoint(Symbol());       return(INIT_SUCCEEDED);   }Ogni volta che si verifica un movimento di prezzo (tick) sul grafico dove è associato questo EA, verrà eseguita la funzione OnTick(). All'interno di OnTick() verrà chiamata la funzione setTrailingStop().void OnTick()   { //---    setTrailingStop(MagicNumber);      }Funzione setTrailingStop()void setTrailingStop(int magicNumber=0){    if (isTrailingStop==false) return;       int      tOrder = 0;    string   pair = "";    double   sl = 0.0, tp = 0.0;       pair = Symbol();       tOrder = OrdersTotal();    for (int i=tOrder-1; i>=0; i--){       bool hrsSelect = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);       if (OrderMagicNumber() == magicNumber && StringFind(OrderSymbol(), pair, 0) == 0 ){          if (OrderType() == OP_BUY){             if ( (Bid - (trailingStart * myPoint)) >= OrderOpenPrice()                   && (Bid - ((trailingStart+trailingStep) * myPoint) >= OrderStopLoss() )                 )             {                sl = NormalizeDouble(Bid - (trailingStart * myPoint), Digits());                if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){                   Print ("#", OrderTicket(), " errore aggiornamento sl");                }             }          }                   if (OrderType() == OP_SELL){             if ( (Ask + (trailingStart * myPoint)) <= OrderOpenPrice()                   && ( (Ask + ((trailingStart+trailingStep) * myPoint) <= OrderStopLoss() ) || OrderStopLoss() == 0.0)                )             {                sl = NormalizeDouble(Ask + (trailingStart * myPoint), Digits() );                if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){                   Print ("#", OrderTicket(), " errore aggiornamento sl");                }             }          }       } //fine if magicNumber    }//fine for }Altre funzioni standard necessarie sono GetPipPoint() // Funzione GetPipPoint double GetPipPoint(string pair) {    double point= 0.0;    int digits = (int) MarketInfo(pair, MODE_DIGITS);    if(digits == 2 || digits== 3) point= 0.01;    else if(digits== 4 || digits== 5) point= 0.0001;    return(point); } Se hai domande, sentiti libero di lasciarle nei commenti oppure puoi unirti al nostro gruppo di condivisione t.me/codeMQL.Inoltre, non dimenticare di scaricare l'App SignalForex per supportare le tue operazioni e massimizzare i tuoi profitti.https://play.google.com/store/apps/details?id=com.autobotfx.signalforex

2021.03.30
EA 2 MA Crossing per MetaTrader 4: Guida alla Creazione
MetaTrader4
EA 2 MA Crossing per MetaTrader 4: Guida alla Creazione

In questo articolo, vedremo come creare un Expert Advisor (EA) utilizzando la strategia delle medie mobili (MA) incrociate. Iniziamo definendo le variabili di input. //--- parametri di input input    int      periodo_ma_veloce = 8  //Periodo della MA Veloce input    int      periodo_ma_lenta = 20; //Periodo della MA Lenta input    double   takeProfit  = 20.0;  //Take Profit (pips) input    double   stopLoss    = 20.0  //Stop Loss (pips) input    double   dimensioneLotto     = 0.10;  //Dimensione Lotto input    double   equityMinima   = 100.0;//Equity Minima ($) input    int slippage = 3       //Slippage input    int numeroMagico = 889  //Numero Magico Successivamente, definiamo le variabili globali. Le variabili con questo ambito globale saranno accessibili a tutte le funzioni. //Variabili Globali double   mioPunto    = 0.0; int      mySlippage = 0; int      TicketAcquisto   = 0; int      TicketVendita  = 0; Quando l'EA viene eseguito, la prima funzione che viene chiamata è OnInit(). È importante utilizzare questa funzione per convalidare e inizializzare le variabili globali che utilizzeremo. int OnInit() {    //validazione input, è sempre consigliato validare l'inizializzazione dei dati di input    if (periodo_ma_veloce >= periodo_ma_lenta || takeProfit < 0.0 || stopLoss < 0.0 || dimensioneLotto < 0.01 || equityMinima < 10) {       Alert("ATTENZIONE - I dati di input non sono validi");       return (INIT_PARAMETERS_INCORRECT);    }       double volume_minimo=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);    if(dimensioneLotto<volume_minimo) {       string messaggio =StringFormat("Il volume è inferiore al limite consentito di %.2f",volume_minimo);       Alert (messaggio);       return(INIT_PARAMETERS_INCORRECT);    }       mioPunto = GetPipPoint(Symbol());    mySlippage = GetSlippage(Symbol(),slippage);    return(INIT_SUCCEEDED); } Quando il prezzo di mercato si muove (tick), la funzione OnTick() verrà chiamata ed eseguirà tutte le istruzioni/funzioni contenute nel blocco di questa funzione. All'interno della funzione OnTick() verranno chiamate varie altre funzioni. Iniziamo chiamando la funzione checkMinEquity() per controllare la sufficienza dell'equity. Se i fondi di equity sono sufficienti (superando l'equity minima), seguirà una dichiarazione della variabile segnale e verrà chiamata la funzione NewCandle() che informa quando si forma una nuova candela. La funzione getSignal() leggerà i valori sui due indicatori delle medie mobili e restituirà informazioni sul segnale se si verifica un incrocio verso l'alto o verso il basso come segnale per un acquisto/vendita. In base a queste informazioni di segnale, verrà inoltrato alla funzione transaction() per impostare le posizioni di acquisto o vendita aperte. E continuerà con la chiamata alla funzione setTPSL(), che ha il compito di impostare i prezzi del take profit e dello stop loss.Se l'equity non soddisfa i requisiti minimi, verrà visualizzato un avviso e questo EA verrà terminato. void OnTick() {    if (cekMinEquity()) {              int segnale = -1;       bool nuovaCandela = NewCandle(Period(), Symbol());              segnale = getSignal(nuovaCandela);       transaction(nuovaCandela, segnale);       setTPSL();                  }else {       //Stop trading, perché l'equity non è sufficiente       Print("L'EA verrà fermata perché l'equity non è sufficiente");    } } Funzione setTPSL() void setTPSL() {    int   tOrdine = 0;    string   strMN = "", coppia = "";    double sl = 0.0, tp = 0.0;       coppia = Symbol();       tOrdine = OrdersTotal();    for (int i=tOrdine-1; i>=0; i--) {       bool hrsSelect = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);       strMN = IntegerToString(OrderMagicNumber());       if (StringFind(strMN, IntegerToString(numeroMagico), 0) == 0 && StringFind(OrderSymbol(), coppia, 0) == 0) {          if (OrderType() == OP_BUY && (OrderTakeProfit() == 0 || OrderStopLoss() == 0)) {             if (takeProfit > 0) {                tp = OrderOpenPrice() + (takeProfit * mioPunto);             }else {                tp = OrderOpenPrice();             }             if (stopLoss > 0) {                sl = OrderOpenPrice() - (stopLoss * mioPunto);             }else {                sl = OrderStopLoss();             }             if (OrderTakeProfit() != tp || OrderStopLoss() != sl) {                if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0, clrBlue)) {                   Print ("Modifica Ordine Riuscita");                }             }          }          if (OrderType() == OP_SELL && (OrderTakeProfit() == 0 || OrderStopLoss() == 0)) {             if (takeProfit > 0) {                tp = OrderOpenPrice() - (takeProfit * mioPunto);             }else {                tp = OrderOpenPrice();             }             if (stopLoss > 0) {                sl = OrderOpenPrice() + (stopLoss * mioPunto);             }else {                sl = OrderStopLoss();             }             if (OrderTakeProfit() != tp || OrderStopLoss() != sl) {                if (OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0, clrRed)) {                   Print ("Modifica Ordine Riuscita");                }             }          }                 }//fine if numero magico && coppia           }//fine for } Per ulteriori informazioni e condivisione, vi invitiamo a unirvi al nostro gruppo Telegram t.me/codeMQL Se stai cercando un'app per supportare il tuo trading, puoi scaricare la nostra app SignalForex nel Play Store https://play.google.com/store/apps/details?id=com.autobotfx.signalforex

2021.03.30
Expert Advisor Auto-Adattivo: Il Sistema di Deep Learning per MetaTrader 4
MetaTrader4
Expert Advisor Auto-Adattivo: Il Sistema di Deep Learning per MetaTrader 4

Ciao a tutti, trader! Oggi voglio parlarvi di un progetto entusiasmante che ho sviluppato: un Expert Advisor auto-adattivo che ho deciso di chiamare "L'Incantatrice". Prima di tutto, l'idea di creare questo sistema è nata dopo aver sviluppato un altro EA che opera su schemi statici: "The Unreal Engine". Se siete curiosi, potete dare un'occhiata qui: The Unreal Engine. Devo ammettere che ho incontrato alcune limitazioni durante i test di questo Expert Advisor di Deep Learning a causa delle risorse del mio computer (ho un PC dual core con solo 4 Gb di RAM). Per testare questo EA nel lungo periodo, avrete bisogno di una macchina potente, altrimenti ci vorrà un'eternità! L'Incantatrice è progettata per raccogliere ogni schema che si presenta sul mercato, aprendo ordini virtuali con stop loss e take profit. Questo EA è in grado di individuare i migliori schemi di mercato per aprire un'operazione reale. Nota Importante: Essendo un Expert Advisor di deep learning, avrà bisogno di un periodo di attivazione tra i 3 e i 5 mesi prima di iniziare ad aprire operazioni reali. Vi consiglio vivamente di testarlo sul strategy tester prima di utilizzarlo su un conto reale. Se qualcuno di voi decide di testare questo EA, vi invito a condividere i risultati qui: Condividi i tuoi risultati. Per ulteriori aggiornamenti, potete seguire il canale qui: Canale The Unreal Engine. Buon testing a tutti! Vi consiglio di testare su coppie a 5 cifre e su timeframe minimi (H1).

2021.03.13
EA Semplice con Indicatore DeMarker: Guida per MetaTrader 4
MetaTrader4
EA Semplice con Indicatore DeMarker: Guida per MetaTrader 4

Ciao a tutti! Oggi voglio condividere con voi un Expert Advisor (EA) che ho sviluppato utilizzando l'indicatore DeMarker. È davvero semplice e potrebbe essere un'ottima aggiunta alle vostre strategie di trading. Fateci sapere cosa ne pensate dopo averlo provato! Questo EA è progettato per lavorare su un singolo strumento. Potete impostare il timeframe, il numero di lotti, lo stop loss e il take profit direttamente nel menù delle proprietà. extern ENUM_TIMEFRAMES TF = PERIOD_CURRENT;// Seleziona il Time Frame extern int period = 8;// Periodo DeMarker extern double lt = 0.01;// Lotti extern int sl = 100;// Stop Loss extern int tp = 100;// Take Profit extern double OB = 0.7;// Over Sold extern double OS = 0.3;// Over Bought extern bool OPENBAR = false;// Trading al prezzo di apertura del nuovo bar Il segreto del mio EA è suddividere le variabili in tre parti: Dati | timeframe Ordine Coppia //+------------------------------------------------------------------+ //-- timeframe|indicatore double dmrk[5]; int signal = -1;//-- 0.buy 1.sell int hold = 0; //-- ordine int ticket = 0; double lot = 0.0; int typ = -1; //-- coppia datetime t1 = 0; bool newbar = false; bool entry = false; //+------------------------------------------------------------------+ All'interno della funzione OnInit(), inizializzo l'array dell'indicatore DeMarker e verifico la dimensione minima dei lotti necessari per il broker specifico. //+------------------------------------------------------------------+ //|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //+------------------------------------------------------------------+ void OnInit() &nbsp;&nbsp;{ &nbsp;&nbsp; ArrayInitialize(dmrk,0.0); &nbsp;&nbsp;//--- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const double test_lot = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(lt < test_lot) lt = test_lot; &nbsp;&nbsp;} Nella funzione OnTick(), calcolo l'indicatore e determino i segnali di acquisto e vendita. //--------------------------------------------------------------------------- &nbsp;&nbsp; signal = -1; //--------------------------------------------------------------------------- //---calcolo &nbsp;&nbsp; for(int i = 0; i < ArraySize(dmrk); i++) &nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dmrk[i] = iDeMarker(Symbol(), TF, period, i); &nbsp;&nbsp;&nbsp;&nbsp; } //--- &nbsp;&nbsp; if(dmrk[1] > OB) &nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hold = 1;//set &nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp; else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(dmrk[1] < OS) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hold = -1;//set &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hold = 0;//reset &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; if(hold == 1) &nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(dmrk[0] < OB && dmrk[1] > OB) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; signal = OP_SELL; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp; if(hold == -1) &nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(dmrk[0] > OS && dmrk[1] < OS) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; signal = OP_BUY; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp; } Per aprire un segnale di acquisto o vendita... //--------------------------------------------------------------------------- &nbsp;&nbsp; if(signal != -1) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(newbar == true) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(entry == false)//porta aperta &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//--- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;entry = true;//set &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//--- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(signal == OP_BUY) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ticket = OrderSend(Symbol(), OP_BUY, lt, Ask, (int)((Ask-Bid)/Point, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sl > 0?Bid-sl*Point:0.0, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tp > 0?Bid+tp*Point:0.0, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EAName + ":signal= " + IntegerToString(signal) + ":hold= " + IntegerToString(hold), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EANumber, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clrBlue); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; signal = -1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //hold =0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}//reset &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}//reset signal &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } Per la chiusura... &nbsp;&nbsp; if(entry == true) // chiusura &nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(OrderSelect(ticket, SELECT_BY_TICKET)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(OrderCloseTime() == 0)//-- ordine attivo &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;da fare condizione per chiudere&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//entry = false; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(OrderCloseTime() != 0)//--&nbsp;&nbsp;chiudi per 1. manuale 2. sl/tp 3. ea &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entry = false;//reset entry &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp; } In conclusione, questo EA può sembrare semplice, ma con le giuste impostazioni e un po' di pratica, potrebbe diventare un prezioso alleato nel vostro trading. Provate e fatemi sapere come va!

2020.12.17
Guida alla Creazione di un Expert Advisor per MetaTrader 4: Salvataggio Dati in CSV
MetaTrader4
Guida alla Creazione di un Expert Advisor per MetaTrader 4: Salvataggio Dati in CSV

Ciao a tutti, sono Luca! Volevo contribuire a questa fantastica comunità da cui ho imparato tanto leggendo articoli informativi e molto altro. Io sono un investitore nel forex e nel mercato azionario, e sviluppo Expert Advisor per il mio trading personale. Quindi ecco il mio contributo, spero che possa essere utile a molti di voi! Questa è un'esempio di come puoi scrivere i dati degli ordini in un file CSV, che potrai poi analizzare e utilizzare nelle tue strategie di trading. Tieni presente che questo Expert Advisor non è pensato per essere usato per il trading (così com'è), ma serve a dimostrare come potresti implementare e utilizzare questa funzione nel tuo Expert o continuare a costruirlo e modificarlo secondo le tue esigenze. Questo Expert aprirà operazioni nella direzione selezionata, le operazioni verranno chiuse virtualmente tramite le impostazioni del menu TP/SL, e se l'opzione 'WriteCloseData' è impostata su true, verrà creato un file dove verranno memorizzati i dati degli ordini, come direzione, guadagni/perdite, prezzo e così via, in formato CSV nel tuo terminale. Testando questo Expert nel tester di strategia, potrai accedere a questo file da OpenDataFolder/tester/CSVexpert/CSVexample. La directory CSVexpert verrà creata automaticamente al momento dell'inizio dei test, e il file che memorizza tutti i dati, CSVexample, sarà creato al suo interno. Quando implementerai questa funzione nel tuo Expert o continuerai a svilupparlo e successivamente lo eseguirai su conti demo o reali, potrai trovare il file creato in MQL4/Files/CSVexpert/CSVexample. Puoi rinominare la directory e il nome del file come preferisci, tranne per l'estensione .csv che deve rimanere invariata. Ricorda che questo è solo un esempio di Expert per mostrarti cosa puoi fare e come usare questa funzione; non voglio che perdi dei fondi pensando che possa essere utilizzato per il trading immediato!

2020.11.14
Primo Precedente 10 11 12 13 14 15 16 17 18 19 20 Successivo Ultimo