Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1456

 

Buon pomeriggio!

Vi prego di aiutarmi: l'obiettivo è quello di implementare la chiusura della posizione quando il prezzo attraversa la MA.

In questa sezione di codice

if(Bid<iMA(Symbol(),0,Fast_Ma_Period,Fast_Ma_Shift,Fast_Ma_Method,Fast_Ma_Price,0) && CountBuy()>0)
          
           
     {
     for(int i=OrdersTotal ()-1; i>=0; i--)
     {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
       if (OrderMagicNumber ()== MagicNumber && OrderType() == OP_BUY)
       if(!OrderClose(OrderTicket(), OrderLots(),Bid, Slippage, Black))
       Print("Ошибка");

Sul tester ottengo la seguente immagine: il prezzo attraversa la MA e chiude la posizione alla chiusura della candela / apertura della candela successiva, già lontana dal livello di chiusura desiderato (confine della MA)....

File:
 
rex1818 chiusura della posizione quando il prezzo attraversa la MA.

In questa sezione di codice

Sul tester ottengo la seguente immagine: il prezzo attraversa la MA e chiude la posizione alla chiusura della candela / apertura della candela successiva, già lontana dal livello di chiusura desiderato (confine della MA)....

I tick sono molto più volatili della media della MA sul tick cloz, quindi lo spread tra i tick entro cui è apparso il valore della MA è una cosa comune. Il prezzo è discreto, e spero che non confondiate bid e ask (cioè il ma by bid e i prezzi aperti di chiusura sono anche bid, e il ma by ask e i prezzi sono anche ask).

Zy, non è possibile ricalcolare il ma per bid o ask, ma aggiungere lo spread e sottrarre, l'errore sarà minimo.
 
Valeriy Yastremskiy #:

I tick sono molto più volatili della media della MA sul tick cloz, quindi lo spread tra i tick entro cui è apparso il valore della MA è una cosa comune. Il prezzo è discreto, e spero che non confondiate bid e ask (cioè il ma by bid e i prezzi aperti di chiusura sono anche bid, e il ma by ask e i prezzi sono anche ask).

Zy, non puoi ricalcolare il ma by bid o ask, ma aggiungere lo spread per sottrarlo, l'errore sarà minimo.

Grazie per la risposta!

Oggi cercherò di capire tenendo conto delle tue raccomandazioni.

 
rex1818 chiusura della posizione quando il prezzo attraversa la MA.

In questa sezione di codice

Sul tester ottengo la seguente immagine: il prezzo attraversa la MA e chiude la posizione alla chiusura della candela / apertura della candela successiva, già lontana dal livello di chiusura desiderato (confine della MA)....

Non è selezionato il test per barre di chiusura?

 
Alexey Viktorov #:

Non è stato selezionato il test per la chiusura dei bar?

Buon pomeriggio!

Modello di test: tutti i tick (.....). Mi sembra di capire che il più accurato...

 
rex1818 #:

Buon pomeriggio!

Modello di test: tutte le zecche (.....). Ho capito che il più preciso...

E l'Expert Advisor non è scritto in base all'apertura di una nuova barra?

La parte di codice che hai mostrato non è sufficiente per ipotizzare con maggiore precisione la causa di tale comportamento.

 

Grazie a tutti coloro che hanno risposto!

Ho trovato gli errori.

Ora tutto funziona come dovrebbe.

 

Qualcuno può consigliare, se il grafico ha un limite di 3000 barre, e abbiamo bisogno di prendere la storia di 2000000 barre, le opzioni possibili per estrarre i dati storici, senza modificare il parametro - barre massime nella finestra ????.


Il mio sistema si sovraccarica quando l'array diventa di 2 milioni di indici. Devo cercare una soluzione per scaricare la cronologia evitando il grafico.

   void SMA(const int aRatesTotal,const int aPrevCalc,const double  &aData[], double  &aMA[])
     {
      int Start=0;
      if(aPrevCalc==0)
        {
         for(int i=0;i<aRatesTotal;i++)
           {
            if(aData[i]!=0 && aData[i]!=EMPTY_VALUE)
              {
               Start=i+m_MAPeriod-1;
               break;
              }
           }
         aMA[Start]=0;
         for(int i=Start;i>Start-m_MAPeriod;i--)
           {
            aMA[Start]+=aData[i];
           }


Ma prima di ciò, alimento questo array.


   rt=aRatesTotal;
   prv=aPrevCalc;
   for(int i=0; i<m_max_period; i++)
     {
      ArrayResize(d[i].m,rt);
      ArrayResize(d[i].f,rt);
     }

   chsma.Solve(rt,prv,aData,d[m_max_period-1].m);
Sembra che il sistema si blocchi non a causa di un array, ma perché inizia a creare array di tali dimensioni.
 

Buon pomeriggio a tutti!

Voglio passare da Mql4 a Mql5. Ho iniziato a leggere il manuale di riferimento di Mql5. Purtroppo ho capito, ma non tutto. Dove posso trovare informazioni come il libro di testo di Kovalev su Mql4 che parta dalle basi e descriva in dettaglio le caratteristiche di Mql5 e soprattutto che dia esempi specifici di codifica delle operazioni più semplici e comuni. In altre parole, abbiamo bisogno di informazioni di formazione non per gli utenti avanzati, ma per i principianti che hanno bisogno di imparare le basi e di andare avanti.

Grazie per il vostro aiuto

 
ANDREY #:

Buon pomeriggio a tutti!

Voglio passare da Mql4 a Mql5. Ho iniziato a leggere il manuale di riferimento di Mql5. Purtroppo ho capito, ma non tutto. Dove posso trovare informazioni come il libro di testo di Kovalev su Mql4 che parta dalle basi e descriva in dettaglio le caratteristiche di Mql5 e soprattutto che dia esempi specifici di codifica delle operazioni più semplici e comuni. In altre parole, abbiamo bisogno di informazioni di formazione non per gli utenti avanzati, ma per i principianti che hanno bisogno di imparare le basi e di andare avanti.

Grazie per il vostro aiuto

Nella base di codice ci sono Expert Advisor e indicatori che sono stati originariamente scritti su MT4 e poi riscritti su MT5 - è possibile utilizzarli per la formazione.

Per molti versi i linguaggi sono simili, ponetevi il compito di riscrivere il codice che capite sulla MT5 - e utilizzate attivamente la ricerca sulle istruzioni e sul portale - troverete sempre la risposta, anche negli articoli.