Announcement

Collapse
No announcement yet.

Come evitare l'Errore 130

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Come evitare l'Errore 130

    Buonasera,
    ho fatto diverse ricerche su questo problema noto, ho trovato le più spiegazioni possibili a ciò che può determinare l'errore ma non riesco a risolvere.

    Esempio cross incriminati: GBPJPY M30 - CHFJPY M60

    Code:
    OrderModify(Ticket,OrderOpenPrice(),NormalizeDouble(Spostamento,Digits),OrderTakeProfit(),0,CLR_NONE);
    Output: TICKET: 69558110 FAILURE. ERRORE: |130| STOPLEVEL: 0.108

    Dati esempio caso OP_BUY:

    - (Prezzo apertura - Stoploss) > 50 pip
    - (Prezzo attuale - Dove voglio spostare lo SL) > X pip ------ Scrivo X perchè sia che sia > di STOPLEVEL o che sia > di 30,40, eccc mi da sempre errore 130
    - Automaticamente siamo lontani dal freezlevel
    - Quindi a sua volta (Dove voglio spostare lo SL - SL) > 100 pip


    Che cosa può generare questo errore? Da premettere che non ci comporta così in tutti i CROSS, c'e quando opera senza problemi a primo tentativo. L'esempio di output che ho scritto viene ripetuto quasi all'infinito.

    Grazie a tutti per l'attenzione.
    Saluti.

    #2
    OrdeModify() richiede
    per un Buy: uno stoploss che dev'essere inferiore al prezzo corrente Bid - stoplevel
    per un Sell: uno stoploss che dev'essere superiore al prezzo corrente Ask + stoplevel


    dal codice leggo che il valore numerico di stoploss è NormalizeDouble(Spostamento,Digits)

    Per sapere se i valori che stai usando nella funzione OrderModify sono corretti rispetto alle regole che ho evidenziato in grassetto,
    devi stampare con la Print prima dell'OrderModify (e quindi prima di avere errore)

    - il tipo di ordine che stai modificando, se buy o sell
    - il valore corrente del Bid e dell'Ask
    - il valore di stoplevel
    - il valore dello stoploss

    così, lavorando in Visual Mode puoi leggere nella cartella Journal
    questi valori e comprendere come mai hai l'errore




    La vita non è un giro di prova, cogli l’attimo..
    Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

    Comment


      #3
      Buonasera,
      ho opportunamente calcolato il nuovo SL considerando i valori che hai scritto. Mi sono accorto che usavo il bid sia per il buy che per il sell. Grazie per la segnalazione adesso non si sa perchè esce fuori errore 4051, ci sbatto un pò su..... Grazie ancora per la dritta.

      Comment


        #4
        Ho passato un bel pò di tempo a capire il perchè e mi sorgono numerose domande sui cross particolari come GBPJPY dove sorge questo errore.
        Prima di inviare un ordine faccio il controllo margine con questa funzione:

        Code:
        bool ConfermaMargine(string Simbolo,int OrdineType,double LotSize) {
          
           if(AccountStopoutMode()==0 && MathRound(AccountMargin()+AccountFreeMargin()-AccountFreeMarginCheck(Simbolo,OrdineType,LotSize))!=0 && (100*AccountEquity()/(AccountMargin()+AccountFreeMargin()-AccountFreeMarginCheck(Simbolo,OrdineType,LotSize)))<AccountStopoutLevel() && GetLastError()==134)
             {
              return false;
             }
           else if(AccountStopoutMode()==1 && AccountFreeMarginCheck(Simbolo,OrdineType,LotSize)<AccountStopoutLevel() && GetLastError()==134)
             {
              return false;
             }
           return true;
          }
        Se true procedo all'apertura altrimenti mi da l'errore 134 per il margine. Sto usando un conto demo con margine pressoché infinito. Da cosa può dipendere questo tipo di errore?
        Subito dopo l'invio di richiesta dell'ordine ne invio un'altro per un pendente opposto, che "supera" il controllo margine, ma che non viene piazzato per errore 4051.
        Ho provato diversi cross e situazioni senza riscontrare questa problematica. Consigli?

        Grazie ancora

        Comment


          #5
          Originally posted by amuzzu View Post
          esce fuori errore 4051
          leggendo su internet per l'errore 4051 di Metatraer4
          una delle cause potrebbe essere il numero di ticket che non corrisponde al numero di trade aperto

          in questi casi, io stampo sempre tutte le variabili una riga prima del comando che dà l'errore
          quindi nel caso di OrderModify, vanno stampati i valori di
          ticket, price, ecc..
          bool OrderModify(
          int ticket, // ticket
          double price, // price
          double stoploss, // stop loss
          double takeprofit, // take profit
          datetime expiration, // expiration
          color arrow_color // color
          );
          La vita non è un giro di prova, cogli l’attimo..
          Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

          Comment


            #6
            il pendente non viene piazzato dunque non tento la modifica. L'errore appare proprio nel tentativo di invio dell'ordine pendente

            Comment


              #7
              Dunque,
              L'ordine a mercato restituisce un 134, mentre il pendente il 4051. Cosa faccio per controllare il margine:

              Code:
              bool ConfermaMargine(string Simbolo,int OrdineType,double LotSize) { 
                
                 if(AccountStopoutMode()==0 && MathRound(AccountMargin()+AccountFreeMargin()-AccountFreeMarginCheck(Simbolo,OrdineType,LotSize))!=0 && (100*AccountEquity()/(AccountMargin()+AccountFreeMargin()-AccountFreeMarginCheck(Simbolo,OrdineType,LotSize)))<AccountStopoutLevel() && GetLastError()==134)
                   {
                    return false;
                   }
                 else if(AccountStopoutMode()==1 && AccountFreeMarginCheck(Simbolo,OrdineType,LotSize)<AccountStopoutLevel() && GetLastError()==134)
                   {
                    return false;
                   }
                 return true;
                }
              Ritorna false e nel mio file log trovo:
              Sell___M30--- |-> Errore 0 nell'invio dell'ordine SELL. Non c'e margine. Errore 134.

              Sono in testing con tutto il margine del mondo....
              Allora controllo il lotto...

              Code:
              double VerificaLotSize(string Simbolo,double LotSize) {
              
              LotSize=MarketInfo(Simbolo,MODE_LOTSTEP)==0.1?NormalizeDouble(LotSize,1):NormalizeDouble(LotSize,2);
              return MathMax(MarketInfo(Simbolo,MODE_MINLOT),MathMin(MarketInfo(Simbolo,MODE_MAXLOT),LotSize));
              }
              Prendo il massimo tra il lotto minimo e il minimo tra il lotto massimo e il mio lotto che genera errore....

              Strano... C'e qualcosa che non sto gestendo... ma cosa?

              Comment


                #8
                Se sei in backtest
                ed il tuo conto è con una valuta non contemplata nella coppia Forex o nel Cfd, puoi avere errore per questa ragione.
                Ad esempio: conto in Euro e tradi GBPUSD,
                oppure conto in Dollari e tradi il Dax (che lavora con l'Euro)
                La vita non è un giro di prova, cogli l’attimo..
                Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

                Comment


                  #9
                  in questo caso è un GBPJPY, ma non c'e rimedio? Trado diversi cross con conto in euro su questo ecn e non mi da problemi

                  Comment


                    #10
                    Ti ho scritto "se sei in backtest"
                    perché il live non dà problemi se il conto è in Euro e tradi GBPJPY, in quanto prende dal mercato le variabili che servono per tradare in Live.
                    Invece in backtest DEVI mettere un conto fittizio che dev'essere in GBP o JPY
                    altrimenti hai errore.
                    La vita non è un giro di prova, cogli l’attimo..
                    Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

                    Comment

                    Working...
                    X