Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 443

 
Alexey Viktorov: Scivolamento in apertura e chiusura.

Alexey! MT5 è diventato generalmente prolisso oggi - duplica TP nel commento:


 
STARIJ:

Grazie Alexey!!! L'ho pensato anch'io - ma come si fa a controllarlo? e come si fa a sapere che cos'è? e perché non ci sono conti veri. Forse perché è vecchio e il conto demo è nuovo?

La differenza tra il prezzo di tp e il prezzo di chiusura dell'ordine si divide per _Point e si riconcilia con la voce nel commento dell'ordine. Questo è esattamente il modo in cui l'abbiamo scoperto. La coincidenza casuale non può durare indefinitamente e stabilmente. Immagino che non ci siano questi slittamenti sul conto reale. Anche se una volta li avevo. Lo stavo calcolando sul conto reale. All'inizio ho notato che la chiusura era su tp e il prezzo di chiusura non era evidenziato in verde.

 

Salve, potete aiutarmi, per favore?

Voglio, in qualsiasi momento, conoscere il numero della barra in cui si trova la freccia dell'indicatore.

Nell'esempio, ha provato a riempire il buffer se la freccia è sulla decima barra.

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(rates_total<2) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      limit=rates_total-2;
      ArrayInitialize(BufferUP,EMPTY_VALUE);
      ArrayInitialize(BufferDN,EMPTY_VALUE);
     }
   for(int i=limit; i>=0; i--)
     {
      for(int il=i+1;il<=i+300;il++)
        {
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",0,il),Digits)!=EMPTY_VALUE
            )
           {
            num_buy=il;
            break;
           }
        }
      //
      if(num_buy==10)
        {
         BufferUP[i+1]=low[i+1]-distance*MyPoint;

        }

      for(int il=i+1;il<=i+300;il++)
        {
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",1,il),Digits)!=EMPTY_VALUE
            )
           {
            num_sell=il;
            break;
           }
        }
      if(num_sell==10)
        {
         BufferDN[i+1]=high[i+1]+distance*MyPoint;
         
         
        }

      Comment(num_buy,"num_sell",num_sell);
     }
//--- return value of prev_calculated for next call

   return(rates_total);
  }

Dove è sbagliato?

 
mila.com: Salve, potete aiutarmi, per favore?
Voglio sapere in qualsiasi momento il numero della barra in cui si trova la freccia dell'indicatore.
Nell'esempio, ho provato a riempire il buffer se la freccia è sulla decima barra.
Dove è sbagliato?

Di solito quando lo controllo, lo eseguo e vedo il risultato. Questa è solo una parte del codice. Qui è tutto molto piccolo, è difficile da vedere - nel mio editore è più grande

if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",0,il),Digits)!=EMPTY_VALUE)
{
    num_buy=il;
    break;  // Это выход из цикла. Остальные бары лишаются чести быть просмотренными. Ошибка здесь?
}
 

Salve, potreste consigliarmi come fare in modo che un indicatore salvi i dati in un file

invece di RSI indicatore Williams' Percent Range


//| funzione di inizio esperto |

//+------------------------------------------------------------------+

int start()

{

//----

int iRSI;

iRSI=FileOpen("File.txt", FILE_CSV|FILE_WRITE, '\t');

//------------------------------------------------//

//-------------------------------------------------//

se(iRSI>0)

{

FileWrite(iRSI, [0]);

FileClose(iRSI);

}

//----

ritorno(0);

}

 
STARIJ:

Qui tutto è molto piccolo,

C'è un'opzione nel browser per cambiare la scala)

STARIJ:
Ошибка здесь?


Purtroppo, questo non è l'unico errore.

Il valore corretto viene visualizzato nel commento, dalla barra corrente, ora num_buy 9

Perché non c'è nessuna condizione nella storia?

if(num_buy==10)

Ho controllato, nell'EA apre una posizione quando la freccia è sulla barra 10

for(int il=1;il<=300;il++)
        { 
        if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",0,il),Digits)!=EMPTY_VALUE)
            
           {
            num_buy=il;
            break;
           }
        }
        if(num_buy==10)
           {
            B_OrderSend();
           }

Come faccio a mettere un punto nell'indicatore quando la freccia è sulla barra 10?

 
mila.com:

Nel browser c'è un'opzione che permette di cambiare la scala (in inglese).


Purtroppo, questo non è l'unico errore.

Il commento mostra il valore corretto, dalla barra corrente, ora num_buy 9

Perché non c'è nessuna condizione nella storia?

Controllato nell'EA, apre la posizione quando la freccia è sulla barra 10

Come faccio a mettere un punto nell'indicatore quando la freccia è sulla barra 10?

Interrompete il ciclo non appena vedete il primo valore non vuoto dell'indicatore. Ecco perché non raggiunge il 10.

 
Artyom Trishkin:

Quindi, qui si interrompe il ciclo non appena si incontra il primo valore non vuoto dell'indicatore. Ecco perché non arriva a dieci.

Ho rimosso una pausa dall'indicatore; come raccomandato da STARIJ

ancora nessun punto sul grafico, e nel commento scrive i numeri della terza e quarta freccia, ma il primo e il secondo (più vicino alla data corrente) non vede.

 
mila.com:

Nell'indicatore ho rimosso la pausa; come raccomandato da STARIJ

ancora nessun punto sul grafico

Ma l'hai lasciato nell'Expert Advisor. E cosa fa? Trova il primo punto dell'indicatore e... break

 
Artyom Trishkin:

Ma il consigliere è rimasto indietro. Quindi cosa fa? Trova il primo punto dell'indicatore e... break

Ho fatto l'Expert Advisor per verificare la possibilità, si apre correttamente, ma nell'indicatore non vede affatto i valori dei due buffer di indicatori più vicini "Arrow v.3".