Come gestire l'errore di quotazioni fuori quota?

 

Publi

Come gestire l'errore di quotazioni fuori quota?

 

Publi

Risultati da 1 a 7 di 7

Discussione: Come gestire l'errore di quotazioni fuori quota?

  1. #1
    CIAO,

    Ieri ho provato a scambiare le notizie NZD sul grafico a 5 minuti con il mio EA, ma ho ricevuto un errore che dice: Order Sell 0.6 NZDUSD opening at 0.00000 fallito [Off quotes]

    Di solito questo non accade.

    Ho controllato i grafici e ho visto che c'era un divario di prezzo insolitamente ampio tra la candela attuale e quella precedente con cui veniva aperto il mio ordine.

    Questo potrebbe essere il motivo per cui l'ordine veniva aperto a 0.00000 perché il broker non inviava momentaneamente alcun prezzo. È come una forma di slittamento.

    Ma il mio EA avrebbe dovuto aprire le negoziazioni tra le 22:00 e le 22:30 GMT 1.

    Non ha aperto più scambi dopo aver ricevuto quell'errore.

    Perchè è così?


    Potrebbe essere dovuto alla parte OrderSend del codice?



    // ----------------------------------------------- -------------------
    //| Questo MQL è generato da Expert Advisor Builder |
    //|
    http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/|
    //| |
    //| In nessun caso l'autore sarà responsabile per eventuali danni. |
    //| Utilizzare a proprio rischio. |
    //| |
    // ------------------- NON RIMUOVERE QUESTA INTESTAZIONE --------------------

    #define SEGNALE_NESSUNO 0
    #define SIGNAL_ACQUISTA 1
    #define SIGNAL_SELL 2
    #define SIGNAL_CLOSEBUY 3
    #define SIGNAL_CLOSESELL 4

    #propertycopyright Expert Advisor Builder
    #collegamento proprietà http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/

    extern int MagicNumber = 0;
    extern bool SignalMail = False;
    extern bool EachTickMode = True;
    extern doppio lotti = 0,6;
    extern int Slittamento = 1000;
    extern bool UseStopLoss = False;
    extern int StopLoss = 30;
    extern bool UseTakeProfit = Falso;
    extern int TakeProfit = 60;
    extern bool UseTrailingStop = Falso;
    extern int TrailingStop = 30;

    int BarCount;
    int Corrente;
    bool TickCheck = Falso;
    bool buyFlag = falso, sellFlag = falso;
    data e ora barraInizio = 0;

    doppio stop loss;

    bool InTrade = falso;

    // ----------------------------------------------- -------------------
    //| funzione di inizializzazione esperto |
    // ----------------------------------------------- -------------------
    intero init() {
    BarCount = Bar;

    if (EachTickMode) Corrente = 0; altrimenti Corrente = 1;

    ritorno(0);
    }
    // ----------------------------------------------- -------------------
    //| funzione di deinizializzazione esperta |
    // ----------------------------------------------- -------------------
    int deinit() {
    ritorno(0);
    }
    // ----------------------------------------------- -------------------
    //| funzione di avvio esperto |
    // ----------------------------------------------- -------------------
    int inizio() {
    int Ordine = SIGNAL_NONE;
    int Totale, Biglietto;
    doppio StopLossLevel, TakeProfitLevel;



    if (EachTickMode Bars != BarCount) TickCheck = False;
    Totale = TotaleOrdini();
    Ordine = SIGNAL_NONE;

    // ----------------------------------------------- -------------------
    //| Inizio variabile |
    // ----------------------------------------------- -------------------

    bool TradingTime = falso;
    doppia Durata = 35*60;

    //Ricorda di aumentare i numeri di StartTime*, StopTime* e StartTime* Durata!

    datetime StartTime = StrToTime(2010.7.28 22:00);
    datetime StopTime = StartTime Durata;

    datetime StartTime2 = StrToTime();
    datetime StopTime2 = StartTime2 Durata;

    datetime StartTime3 = StrToTime();
    datetime StopTime3 = StartTime3 Durata;

    double Upper1 = iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_UPPER, Current 1);
    double Lower1 = iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_LOWER, Current 1);
    double Middle1 = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, Current 1);
    double Open1 = iOpen(NULL, 0, Current 1);
    double Close1 = iClose(NULL, 0, Current 1);
    double High1 = iHigh(NULL, 0, Current 1);
    double Basso1 = iBasso(NULL, 0, Corrente 1);

    //Acquistare
    //Chiudi1 gt; Aperto1 Alto1 gt; Superiore1

    //Vendere
    //Chiudi1 lt; Aperto1 Basso1 lt; Inferiore1

    //ChiudiAcquista
    //Chiudi1 lt; Apre1 Chiude1 lt; Medio1

    //ChiudiVendi
    //Chiudi1 gt; Apri1 Chiudi1 gt; Medio1


    // ----------------------------------------------- -------------------
    //| Fine variabile |
    // ----------------------------------------------- -------------------

    if (barStart lt; Time[0])/inizio di una nuova battuta
    {
    barInizio = Tempo[0];
    buyFlag = falso;
    sellFlag = falso;

    if(StartTime lt; StopTime TimeCurrent() gt;= StartTime TimeCurrent() lt; StopTime)
    {
    TradingTime = vero;
    }

    if(StartTime2 lt; StopTime2 TimeCurrent() gt;= StartTime2 TimeCurrent() lt; StopTime2)
    {

    }

    if(StartTime3 lt; StopTime3 TimeCurrent() gt;= StartTime3 TimeCurrent() lt; StopTime3)
    {

    }

    }

    //Controlla la posizione
    bool IsTrade = Falso;

    for (int i = 0; i lt; Totale; i ) {
    OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
    if(TipoOrdine() lt;= OP_SELL SimboloOrdine() == Simbolo()) {
    IsTrade = Vero;
    if(TipoOrdine() == OP_ACQUISTA) {
    //Vicino

    // ----------------------------------------------- -------------------
    //| Segnale Inizio(Esci Acquista) |
    // ----------------------------------------------- -------------------

    if (buyFlag == false Close1 lt; Open1 Close1 lt; Middle1)
    {
    InTrade = falso;
    Ordine = SIGNAL_CLOSEBUY;
    }

    if (buyFlag == false Close1 lt; stoploss)
    {
    InTrade = falso;
    Ordine = SIGNAL_CLOSEBUY;
    }

    // ----------------------------------------------- -------------------
    //| Fine del segnale (Exit Buy) |
    // ----------------------------------------------- -------------------

    if (Ordine == SIGNAL_CLOSEBUY ((EachTickMode !TickCheck) || (!EachTickMode (Bars != BarCount)))) {
    OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
    if (SignalMail) SendMail([Signal Alert], [ Symbol() ] DoubleToStr(Bid, Digits) Close Buy);
    if (!EachTickMode) BarCount = Bars;
    IsTrade = Falso;
    Continua;
    }
    //Trailing stop
    if(UsaTrailingStop TrailingStop gt; 0) {
    if(Bid - OrderOpenPrice() gt; Punto * TrailingStop) {
    if(OrderStopLoss() lt; Offerta - Punto * TrailingStop) {
    OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
    if (!EachTickMode) BarCount = Bars;
    Continua;
    }
    }
    }
    } altro {
    //Vicino

    // ----------------------------------------------- -------------------
    //| Segnale Inizio(Uscita Vendita) |
    // ----------------------------------------------- -------------------

    if (sellFlag == false Close1 gt; Open1 Close1 gt; Middle1)
    {
    InTrade = falso;
    Ordine = SIGNAL_CLOSESELL;
    }

    if (sellFlag == false Close1 gt; stoploss)
    {
    InTrade = falso;
    Ordine = SIGNAL_CLOSESELL;
    }

    // ----------------------------------------------- -------------------
    //| Fine del segnale (vendita in uscita) |
    // ----------------------------------------------- -------------------

    if (Ordine == SIGNAL_CLOSESELL ((EachTickMode !TickCheck) || (!EachTickMode (Bars != BarCount)))) {
    OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
    if (SignalMail) SendMail([Signal Alert], [ Symbol() ] DoubleToStr(Ask, Digits) Close Sell);
    if (!EachTickMode) BarCount = Bars;
    IsTrade = Falso;
    Continua;
    }
    //Trailing stop
    if(UsaTrailingStop TrailingStop gt; 0) {
    if((OrderOpenPrice() - Ask) gt; (Punto * TrailingStop)) {
    if((OrderStopLoss() gt; (Ask Point * TrailingStop)) || (OrderStopLoss() == 0)) {
    OrderModify(OrderTicket(), OrderOpenPrice(), Ask Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
    if (!EachTickMode) BarCount = Bars;
    Continua;
    }
    }
    }
    }
    }
    }

    // ----------------------------------------------- -------------------
    //| Segnale Inizio(Entrata) |
    // ----------------------------------------------- -------------------

    if (TradingTime == true InTrade == false Close1 gt; Open1 Close1 gt; Upper1)
    {
    Ordine = SIGNAL_BUY;
    stoploss = Open1;
    InTrade = vero;
    buyFlag = vero;
    }

    if (TradingTime == true InTrade == false Close1 lt; Open1 Close1 lt; Lower1)
    {
    Ordine = SIGNAL_SELL;
    stoploss = Open1;
    InTrade = vero;
    sellFlag = vero;
    }

    // ----------------------------------------------- -------------------
    //| Segnale Fine |
    // ----------------------------------------------- -------------------

    //Acquistare
    if (Ordine == SIGNAL_BUY ((EachTickMode !TickCheck) || (!EachTickMode (Bars != BarCount)))) {
    if(!IsTrade) {
    //Controlla il margine libero
    if (AccountFreeMargin() lt; (1000 * Lotti)) {
    Print(Non abbiamo soldi. Free Margin = , AccountFreeMargin());
    ritorno(0);
    }

    if (UseStopLoss) StopLossLevel = Ask - StopLoss * Punto; altrimenti StopLossLevel = 0.0;
    if (UseTakeProfit) TakeProfitLevel = Ask TakeProfit * Point; altrimenti TakeProfitLevel = 0.0;

    Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, Buy(# MagicNumber ), MagicNumber, 0, DodgerBlue);
    if(Ticket gt; 0) {
    if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
    Print(ordine ACQUISTA aperto : , OrderOpenPrice());
    if (SignalMail) SendMail([Signal Alert], [ Symbol() ] DoubleToStr(Ask, Digits) Open Buy);
    } altro {
    Print(Errore nell'apertura dell'ordine ACQUISTA: , GetLastError());
    }
    }
    if (EachTickMode) TickCheck = True;
    if (!EachTickMode) BarCount = Bars;
    ritorno(0);
    }
    }

    //Vendere
    if (Ordine == SIGNAL_SELL ((EachTickMode !TickCheck) || (!EachTickMode (Bars != BarCount)))) {
    if(!IsTrade) {
    //Controlla il margine libero
    if (AccountFreeMargin() lt; (1000 * Lotti)) {
    Print(Non abbiamo soldi. Free Margin = , AccountFreeMargin());
    ritorno(0);
    }

    if (UseStopLoss) StopLossLevel = Offerta StopLoss * Punto; altrimenti StopLossLevel = 0.0;
    if (UseTakeProfit) TakeProfitLevel = Offerta - TakeProfit * Punto; altrimenti TakeProfitLevel = 0.0;

    Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, Sell(# MagicNumber ), MagicNumber, 0, DeepPink);
    if(Ticket gt; 0) {
    if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
    Print(ordine di VENDITA aperto : , OrderOpenPrice());
    if (SignalMail) SendMail([Signal Alert], [ Symbol() ] DoubleToStr(Bid, Digits) Open Sell);
    } altro {
    Print(Errore nell'apertura dell'ordine di VENDITA: , GetLastError());
    }
    }
    if (EachTickMode) TickCheck = True;
    if (!EachTickMode) BarCount = Bars;
    ritorno(0);
    }
    }

    if (!EachTickMode) BarCount = Bars;

    ritorno(0);
    }
    // ----------------------------------------------- -------------------

  2. #2
    Ciao, oggi ho ricevuto un altro errore di quotazioni scontate, ma l'EA non ha provato ad aprire di nuovo uno scambio. Cos'altro potrebbe essere sbagliato? Sospetto che l'EA pensi ancora che sia stato aperto un ordine, ma in questa situazione non è accettato dal server. Come riscrivere il codice per risolvere questo problema?

  3. #3
    Ciao, oggi ho ricevuto un altro errore di quotazioni scontate, ma l'EA non ha provato ad aprire di nuovo uno scambio. Cos'altro potrebbe essere sbagliato?

  4. #4
    Ho appena notato che l'hai cambiato da vero a falso. Grazie.

  5. #5
    Sì, inserisci la riga che vedi in rosso nel tuo codice. Fai lo stesso esattamente nello stesso punto nella parte del segnale di vendita. InTrade è una bandiera che l'EA imposta per garantire che scambi solo uno scambio alla volta. Imposta questo flag quando riceve il segnale di scambio ma non riesce a resettarlo se lo scambio non viene eseguito correttamente. Codice inserito #93;// ----------------------------------------- ------------------------ /| Segnale Fine |/ ----------------------------------------------- ------------------- /Buy if (Ordine == SIGNAL_BUY ((EachTickMode !TickCheck) || (!EachTickMode (Bars != BarCount)))) { if(!IsTrade) {/Controlla il margine libero if (AccountFreeMargin() lt; (1000 * Lotti)) { Print(Non abbiamo soldi. Free Margin = , AccountFreeMargin()); ritorno(0); } if (UseStopLoss) StopLossLevel = Ask - StopLoss * Punto; altrimenti StopLossLevel = 0.0; if (UseTakeProfit) TakeProfitLevel = Ask TakeProfit * Point; altrimenti TakeProfitLevel = 0.0; Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, Buy(# MagicNumber ), MagicNumber, 0, DodgerBlue); if(Ticket gt; 0) { if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) { Print(ACQUISTA ordine aperto: , OrderOpenPrice()); if (SignalMail) SendMail(#91;Signal Alert#93;, #91; Symbol() #93; DoubleToStr(Ask, Digits) Open Buy); } else { Print(Errore nell'apertura dell'ordine ACQUISTA: , GetLastError()); #91;b#93;#91;color=rosso#93;InTrade = false;#91;/color#93;#91;/b#93; } } if (EachTickMode) TickCheck = True; if (!EachTickMode) BarCount = Bars; ritorno(0); } }

  6. #6
    Ciao, grazie per averlo segnalato. Ma penso che dovrebbe essere impostato su falso, non è vero? InTrade = falso; In questo modo l'EA proverà ad aprire di nuovo uno scambio

  7. #7
    Qual è il codice per rilevare se il messaggio di acquisto dell'ordine nel journal MT4 contiene l'apertura della stringa a 0.00000 o non è riuscita o [Off quotes]? Ricevo questo errore nel diario MT4 insieme al segno di errore (cerchio rosso con un trattino bianco al centro).

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
Il sito di forexmad utilizza cookie
Il sito di forexmad utilizza cookie, alcuni dei quali già installati. Per avere maggiori informazioni sui nostri cookie ti preghiamo di cliccare qui. Ti preghiamo di cliccare sul bottone a destra per accettare i nostri cookie. Se continui a navigare sul sito di forexmad assumeremo che sei d'accordo ad utilizzarli.