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

 
Alexey Viktorov:

Leggete attentamente la documentazione e il codice di esempio. Il vostro ciclo non è organizzato correttamente.

Non ditemi che i cicli for e while funzionano allo stesso modo. Non è questo il problema, sono le linee evidenziate.

Grazie, l'ho letto (è da lì che ho iniziato)

Tutto funziona nel mio codice, solo un inconveniente in MT4, grafici 8 ma vede 7(

2021.03.10 11:59:23.914 Label EURCAD,M15: 9/
2021.03.10 11:59:23.914 Label EURCAD,M15: 8/
2021.03.10 11:59:23.914 Label EURCAD,M15: 7/
2021.03.10 11:59:23.914 Label EURCAD,M15: 6/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 5/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 4/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 3/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 2/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 1/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 0/EURUSD
 
Improbabile. Per quante volte ho peccato sulla piattaforma, mi sono sempre rivelato in errore io stesso.
 
Aleksei Stepanenko:
Improbabile. Quante volte ho dato la colpa alla piattaforma, si scopre sempre che ho sbagliato io.
Non posso vedere un grafico in particolare, posso vedere tutti gli altri e se ne aggiungo uno nuovo, posso vederlo
 
long currChart=ChartFirst();
int i=0;
while(currChart>=0)
  {
  Print(i,ChartSymbol(currChart)," ID =",currChart);
  currChart=ChartNext(currChart); // на основании предыдущего получим новый график
  i++;// не забудем увеличить счетчик
  }

Perché non provi questo?

 
Aleksei Stepanenko:

Perché non provi questo?

La stessa cosa.

2021.03.10 12:45:48.434 Label EURCAD,M15: 8/
2021.03.10 12:45:48.434 Label EURCAD,M15: 7/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 6/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 5/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 4/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 3/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 2/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 1/EURUSD
 

Perché la stampa è diversa? Codice diverso?

Print(i,ChartSymbol(currChart)," ID =",currChart);
2021.03.10 12:45:48.434 Label EURCAD,M15: 1/EURUSD

Quanti grafici sono aperti, quali? Simbolo, punto.

Dispiegato/dispiegato?
 
MakarFX:

Grazie, è quello che ho letto (è da lì che ho iniziato).

Tutto funziona nel mio codice, solo un inconveniente in MT4, grafici 8 ma vede 7(

Una pessima lettura. Probabilmente come la lettura forzata a scuola. L'ho letto, ma niente è rimasto impresso nel mio cervello.

Ecco un esempio. Lo scopo è diverso lì, ma ancora l'enumerazione dei grafici aperti non cambia a seconda dello scopo dell'enumerazione.

Oppure ecco il codice

/********************Script program start function*******************/
void OnStart()
 {
  long prevChart = 0;
  int i = 0;
  do
   {
    prevChart = ChartNext(prevChart);
    ChartSetInteger(prevChart, CHART_BRING_TO_TOP, 0, true);
    Sleep(200);
    i++;
   }
  while(prevChart >= 0);
 }/*******************************************************************/
Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2021.01.15
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
Aleksei Stepanenko:

Perché la stampa è diversa? Codice diverso?

Quanti grafici sono aperti, quali? Simbolo, punto.

Dispiegato/dispiegato?
Alexey Viktorov:

Una pessima lettura. Deve essere stato come una lettura forzata a scuola. Cioè, l'ho letto, ma niente mi è rimasto in testa.

Ecco un esempio. Lì l'obiettivo è diverso, ma ancora l'enumerazione dei grafici aperti non cambia a seconda dello scopo di questa enumerazione.

Oppure ecco il codice

Il problema viene rimosso, il problema si risolve riavviando il terminale

 

Aiutatemi a evitare array fuori portata in questo codice

double GetExtremumZigZagPriceHigh(string symbol="",ENUM_TIMEFRAMES timeframe=0,int extremum_number=0)//,int depth=12,int deviation=5,int backstep=3)
  {
   if(symbol=="") //Если symbol = "" , то..
      symbol=Symbol(); //Присвоить переменной symbol значение текущего символа на графике.

//Объявить необходимые переменные:
   double price[];                                                 //Цена экстремума выбранная из массива таймсерии.
//datetime time[];
   int    count;                                                   //Счетчик цикла.
int bars_quantity=1000; //Количество баров на графике.
int extremum_count=0;                                           //Счетчик экстремумов.

   ArraySetAsSeries(price,true);                   //Устанавить флаг, чтобы индексация массива производилась как в таймсериях.
   CopyBuffer(handle,1,0,bars_quantity,price);     //Скопировать в динамический массив price[] цены указанного количества баров.

   for(count=1; count<bars_quantity; count++) //Запустить цикл, который будет бежать по каждому бару.
     {
      if(price[count]!=0) //Если Цена Зигзага есть, то есть не равна нулю, то..
        {
         extremum_count++;        //Увеличить счетчик экстремумов на одну единицу.

         if(extremum_count>extremum_number) //Если счетчик экстремумов превысил значение указанного номера экстремума, то..
            return(price[count]);                 //Вернуть эту цену.
        }
     }
//Print("GetExtremumZigZagPrice(): Экстремум ЗигЗага ",extremum_number," не найден"); //А до тех пор, пока ЗигЗаг не показывает цену,
   return(0);                                                                          //Печатать Print, и возвращать ноль.
  }

È questa posizione che viene buttata via.

if(price[count]!=0)
 
CopyBuffer

Возвращаемое значение

Numero di elementi della matrice copiati o -1 in caso di errore .

Nota

Quando si richiedono i dati da un indicatore, se le serie temporali richieste non sono ancora state costruite o devono essere scaricate dal server, la funzione restituirà immediatamente -1, ma il processo di caricamento/costruzione stesso verrà avviato.

Quando si richiedono dati dall'Expert Advisor o da uno script, viene avviato il caricamento dal server se il terminale non ha questi dati localmente, o inizia la costruzione delle serie temporali richieste se i dati possono essere costruiti dallo storico locale, ma non sono ancora pronti. La funzione restituisce la quantità di dati che sarà pronta quando il timeout scade.

Controlla se hai bar_quantity lì

Motivazione: