Trading Sistematico

Massimizzare i Trade Dopo il Break Even: Guida all'uso di un Expert Advisor per MetaTrader 4
MetaTrader4
Massimizzare i Trade Dopo il Break Even: Guida all'uso di un Expert Advisor per MetaTrader 4

Ciao a tutti, oggi parliamo di un argomento che interessa a molti trader: come ottimizzare i propri trade dopo aver raggiunto il break even grazie a un Expert Advisor (EA). Questo piccolo gioiello di EA ha una funzione fondamentale: il conteggio degli ordini. Funzione OrdersCounter int OrdersCounter() {    int counter=0;    //---    for(int i=OrdersTotal()-1; i>=0; i--)       if(OrderSelect(i,SELECT_BY_POS))          if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) {           // se l'ordine è stato aperto da questo EA           //--- se è avvenuto il break even           double XBreakeven = OrderType()==OP_BUY ? OrderStopLoss() >= OrderOpenPrice() : OrderStopLoss() <= OrderOpenPrice();             if(!XBreakeven) {               counter++; // conta la posizione               }           }    return counter; } Questa funzione conta solo gli ordini che non hanno uno stop loss superiore o uguale al prezzo di apertura per gli acquisti e inferiore per le vendite. In breve, stiamo contando tutti gli ordini che non sono andati in break even o che non hanno un trailing stop che protegge il prezzo di apertura. double XBreakeven = OrderType()==OP_BUY ? OrderStopLoss() >= OrderOpenPrice() : OrderStopLoss() <= OrderOpenPrice();             if(!XBreakeven) // se solo il break even e il trailing stop non sono avvenuti Attraverso questo contatore, otteniamo un valore che utilizzeremo per limitare la nostra posizione massima, che in questo caso è impostata a 1 ordine alla volta.    if(OrdersCounter()<MaximumOrders) Quindi, ogni volta che si verifica un break even, questa funzione ignorerà il conteggio, permettendo di aprire un altro ordine di vendita, e il ciclo continua. Naturalmente, tutto ciò non sarebbe possibile senza una funzione di break even. void BreakEvenFunction() {    //---    for(int i=OrdersTotal()-1; i>=0; i--) {       if(OrderSelect(i,SELECT_BY_POS)) {         if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) {           // per acquisti se il Bid è sopra il prezzo di apertura + pips di break even, viceversa per le vendite           double xHybrid = OrderType()==OP_BUY ? (Bid>OrderOpenPrice()+BreakevenPips*_Point && OrderStopLoss()<OrderOpenPrice()) : (Ask<OrderOpenPrice()-BreakevenPips*_Point && OrderStopLoss()>OrderOpenPrice());           /* per acquisti solo se lo StopLoss è uguale o superiore al prezzo di apertura, viceversa per le vendite */           if(xHybrid) {             bool modfy = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrNONE);           }       }   } } Che ne dite? Vale la pena provarlo!

2021.07.13
Scopri il Framework Validate Me per MetaTrader 4: Guida Pratica per Trader
MetaTrader4
Scopri il Framework Validate Me per MetaTrader 4: Guida Pratica per Trader

Framework Validate Me Oggi voglio condividere con voi la mia interpretazione di come programmare un robot di trading utilizzando ordini di acquisto e vendita per affrontare la validazione di mercato. Questo framework si occupa di alcune verifiche che un robot di trading deve superare prima di essere lanciato sul mercato. Ricordate, è tutto a scopo educativo! Esempio di codice per l'acquisto ask=MarketInfo(_Symbol,MODE_ASK);          bid=MarketInfo(_Symbol,MODE_BID);          sl=(OrderStopPips==0)?0.0:bid-ExtOrderStop;          if(sl!=0.0 && ExtOrderStop<StopLevel)             sl=bid-StopLevel;          tp=(OrderTakePips==0)?0.0:ask+ExtOrderTake;          if(tp!=0.0 && ExtOrderTake<StopLevel)             tp=ask+StopLevel;          GetLot=CheckVolumeValue(Lots);          if(!CheckStopLoss_Takeprofit(OP_BUY,ExtOrderStop,ExtOrderTake))             return;          if(CheckMoneyForTrade(GetLot,OP_BUY))             order=OrderSend(_Symbol,OP_BUY,GetLot,ask,10,sl,tp,"FrameWork",678,0,Blue); Parametri del framework

2021.06.22
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
Primo Precedente 1 2 3 4 5 6 7 8 9 10 11 Successivo Ultimo