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

 
tvv:

Non capisco. Questa opzione indica la posizione del file - \MetaQuotes\Terminal\Common. Senza questa opzione non potrò prendere il file che è stato generato nel tester. Senza questa opzione il file verrà cercato in MQL4\Files - e non sarò in grado di metterci il file del tester.

È l'assenza di questa bandiera che ho sottolineato.

 
Alexey Viktorov:

È l'assenza di questa bandiera che ho sottolineato.

Grazie per il tuo aiuto - è solo un refuso - conosco questa bandiera. Il problema non è risolto - il file non vuole aprirsi in modalità di lettura condivisa - anche senza usare il tester. Finché questo file è aperto dall'indicatore - lo script non può aprirlo. Notepad, invece, lo apre senza problemi.

 
tvv:

Grazie per l'aiuto - è solo un refuso - conosco quella bandiera. Il problema non è risolto - il file non vuole aprirsi in modalità di lettura condivisa - anche senza usare il tester. Finché questo file è aperto dall'indicatore - lo script non può aprirlo. Notepad, invece, lo apre senza problemi.

Provate a forzare i dati sul disco periodicamente con FileFlush().


hmmm: un'altra cosa che non ho notato subito

tvv:

ExtHandle=FileOpen(c_symbol+(string)20+".csv",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_READ|FILE_SHARE_READ|FILE_COMMON);
Il file nello script è aperto come segue: ExtHandleR=FileOpen("EURUSD20.csv",FILE_BIN|FILE_READ|FILE_SHARE_READ);
Per favore, fate notare il mio errore.

È strano che si legga. Ci dovrebbe essere un flag FILE_CSV.
FileFlush - Файловые операции - Справочник MQL4
FileFlush - Файловые операции - Справочник MQL4
  • docs.mql4.com
При выполнении операции записи в файл физически данные могут оказаться в нем только через некоторое время. Для того чтобы данные сразу же сохранились в файле, нужно использовать функцию FileFlush(). Если не использовать функцию, то часть данных, еще не попавших на диск, принудительно записывается туда только при закрытии файла функцией...
 
Alexey Viktorov:

Provate a forzare periodicamente i dati sul disco con FileFlush().


Suggerimento: un'altra cosa che ho notato tempo fa

È strano che si legga. Ci dovrebbe essere un flag FILE_CSV.

.CSV è un'estensione di file - puoi usare qualsiasi estensione - io l'ho scelta in modo che tu possa cercarla in Notepad. Ecco un articolo interessante - https://www.mql5.com/ru/articles/2720. Il mio codice è conforme alle regole descritte lì - ma non posso leggere il file programmaticamente. in modalità FILE_SHARE_READ. Per il file EURUSD20.HST con estensione .HST - il flag deve essere FILE.BIN, in modo che in MT 4 file può essere aperto offline.

Основы программирования на MQL5: Файлы
Основы программирования на MQL5: Файлы
  • 2016.09.28
  • Dmitry Fedoseev
  • www.mql5.com
Функции для работы с файлами есть почти во всех языках программирования, и MQL5 в этом смысле — не исключение. Хотя при программировании советников и индикаторов на MQL5 работать с использованием файлов приходится не всегда, (а скорее даже — очень редко), но тем не менее, каждый экспертописатель рано или поздно с этим сталкивается. Диапазон...
 
tvv:

.CSV è un'estensione di file - può essere qualsiasi cosa - l'ho scelto per poterlo cercare in Notepad. Ecco un articolo interessante - https://www.mql5.com/ru/articles/2720. Il mio codice è conforme alle regole descritte lì - ma non posso leggere il file programmaticamente. in modalità FILE_SHARE_READ. Per il file EURUSD20.HST con estensione .HST - il flag deve essere FILE.BIN, in modo che in MT 4 file può essere aperto offline.

Ho provato a lavorare non nel tester ma solo su un grafico normale (EURUSD M1) - eseguo l'indicatore che genera il TF M20.

Per aprire il file:

ExtHandle= FileOpen("EURUSD20.csv",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_READ|FILE_SHARE_READ).

Il file apparirà quindi nella cartella MQL4\Files. Poi eseguiamo lo script su un grafico regolare (EURUSD M5) che copia il contenuto di EURUSD20.csv in EURUSD20.HST. Il file EURUSD20.HST viene generato nella cartella history nella stessa directory di MQL4.

Il codice dello script:

ExtHandleR=FileOpen("EURUSD20.csv",FILE_BIN|FILE_READ|FILE_SHARE_READ) leggere il file;

ExtHandleW=FileOpenHistory("EURUSD20.hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ);

Tutto funziona solo quando rimuovo l'indicatore dal grafico M1. Cioè, non ho la modalità di lettura della condivisione dei file che funziona.

 

Ciao, cos'è il glitch di metatrader sul grafico dell'eurodollaro? Una candela giornaliera per domenica 9.10.2011 è apparsa, sul grafico orario c'è solo un'ora 23:00 per quella data. Questo è probabilmente dovuto al cambio degli orologi all'orario invernale. Come risolvere il problema? Prima non c'era una candela simile.

 
tvv: Tutto funziona solo quando rimuovo l'indicatore dal grafico M1. Cioè, non ho la modalità di lettura dei file divisi che funziona.

Il problema si risolve così: il programma che scrive il file deve chiudere FileClose dopo ogni operazione di scrittura, liberando così il file per un altro programma da leggere. Questo perché i dati vengono scritti prima nel buffer e non sono fisicamente presenti nel file per un certo tempo. La chiusura del file rilascia il buffer nel file. Prima della prossima scrittura

   // Открытие или создание файла и перемещение указателя в конец
   Файл = FileOpen(ИмяФайла, FILE_CSV | FILE_READ | FILE_WRITE, " "); // еще COMMON  SHARE...
   FileSeek(Файл, 0, SEEK_END);

il file viene riaperto e il puntatore viene spostato alla fine del

 

Ciao, puoi dirmi se è corretto dire che il numero di punti ottenuti sarà lo stesso in entrambe le espressioni? È davvero importante per me!

"Цена закрытия последнего закрытого ордера"-Ask>=30*Point

Ask-"Цена закрытия последнего закрытого ордера">=30*Point //Если цена Выше

Più precisamente, i punti non possono essere negativi? O è ancora.....))

 

Buona sera.

Ho iniziato a studiare mql5 e ho alcune domande, quindi per favore aiutatemi.

L'obiettivo è quello di ottenere i valori delle ultime n candele in un array e ordinare l'array scegliendo solo le candele imbattute.

Ho scritto la funzione:

double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
   {
      double high=0;
      int k=0;
      int s=0;
      ArraySetAsSeries(High,true);
         if(CopyHigh(Symbol(),Period(),0,NumCand,High)==-1)
               {
               Print("Не удалось скопировать значения цен High! Код ошибки = ",GetLastError());
               }  
               
      
       for(int x=NumCand-1; x==0; x--)
            {
            if(IsStopped())
            break;
                  for (int j = NumCand-x-1; j == 0; j--) 
                  {
                  if (High[j+1] > High[j])
                     {
                     // Если хай не побит записываем в массив
                     temp[k] = High[j+1];
                     k++;
                     }   
                   }
            }
      s=sizeof(temp);               
      high=temp[index];
      return(high);
   } 

Genera unamatrice di errorefuori portata.

 high=temp[index];

Per quanto ho capito, questo errore è causato dall'indirizzamento di una cella inesistente dell'array.

Ma non sono riuscito a trovare l'errore della mossa, per favore consigliatemi dove ho sbagliato, o forse c'è un ordinamento più elegante.

 
WhiteBerkut:

Buona sera.

Ho iniziato a studiare mql5 e ho alcune domande, quindi per favore aiutatemi.

Il compito è quello di ottenere i valori delle ultime n candele in un array e ordinare l'array scegliendo solo le candele imbattute.

Ho scritto la funzione:

Genera unamatrice di errorefuori portata.

Per quanto ho capito, questo errore è causato dall'indirizzamento di una cella inesistente dell'array.

Ma non sono riuscito a trovare l'errore della mossa, per favore consigliatemi dove ho sbagliato, o forse c'è un ordinamento più elegante.

Confronta il valore dell'indice con la dimensione dell'array. Notate che gli elementi dell'array sono numerati a partire da zero, e il numero dell'ultimo è 1 meno della dimensione dell'indice. E NumCand è uguale a cosa?
Motivazione: