MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 353

 
tvv :

나는 이해하지 못했다. 이 옵션은 \\MetaQuotes\Terminal\Common 파일의 위치를 가리킵니다. 이 옵션이 없으면 테스터에서 생성된 파일을 가져올 수 없습니다. 이 옵션이 없으면 파일은 MQL4\Files에서 검색되며 테스터의 파일을 거기에 넣을 수 없습니다.

내가 지적한 것은 이 깃발의 부재였다.

 
Alexey Viktorov :

내가 지적한 것은 이 깃발의 부재였다.

도움을 주셔서 감사합니다. 오타일 뿐입니다. 이 플래그를 알고 있습니다. 테스터를 사용하지 않고도 문제가 해결되지 않았습니다. 파일이 공유 읽기 모드에서 열리기를 원하지 않습니다. 이 파일이 표시기에 의해 열려 있는 동안 스크립트는 파일을 열 수 없습니다. 그러나 메모장은 문제없이 열립니다.

 
tvv :

도움을 주셔서 감사합니다. 단지 오타일 뿐입니다. 저는 이 플래그를 알고 있습니다. 테스터를 사용하지 않고도 문제가 해결되지 않았습니다. 파일이 공유 읽기 모드에서 열리기를 원하지 않습니다. 이 파일이 표시기에 의해 열려 있는 동안 스크립트는 파일을 열 수 없습니다. 그러나 메모장은 문제없이 열립니다.

주기적으로 데이터를 디스크 FileFlush() 로 강제 플러시하십시오.


추신 : 여기에 내가 즉시 눈치 채지 못한 다른 것이 있습니다.

tvv :

ExtHandle=FileOpen(c_symbol+(문자열)20+" .csv ", FILE_BIN |FILE_WRITE|FILE_SHARE_WRITE|FILE_READ|FILE_SHARE_READ|FILE_COMMON);
스크립트의 파일은 다음과 같이 열립니다. ExtHandleR=FileOpen(" EURUSD20.csv ", FILE_BIN |FILE_READ|FILE_SHARE_READ);
제 실수를 지적해주세요.

읽기가 이상합니다. FILE_CSV 플래그가 있어야 합니다.
FileFlush - Файловые операции - Справочник MQL4
FileFlush - Файловые операции - Справочник MQL4
  • docs.mql4.com
При выполнении операции записи в файл физически данные могут оказаться в нем только через некоторое время. Для того чтобы данные сразу же сохранились в файле, нужно использовать функцию FileFlush(). Если не использовать функцию, то часть данных, еще не попавших на диск, принудительно записывается туда только при закрытии файла функцией...
 
Alexey Viktorov :

주기적으로 데이터를 디스크 FileFlush() 로 강제 플러시하십시오.


추신 : 여기에 내가 즉시 눈치 채지 못한 다른 것이 있습니다.

읽기가 이상합니다. FILE_CSV 플래그가 있어야 합니다.

.CSV는 파일 확장자입니다. 무엇이든 가능합니다. 메모장에서 볼 수 있도록 하나를 선택했습니다. 다음은 흥미로운 기사입니다 - https://www.mql5.com/ru/articles/2720. 내 코드는 거기에 설명된 규칙을 준수하지만 프로그래밍 방식으로 파일을 읽을 수 없습니다. FILE_SHARE_READ 모드에서. 확장자가 .HST인 EURUSD20.HST 파일의 경우 플래그는 FILE.BIN이어야 하므로 MT에서 4개의 파일을 오프라인으로 열 수 있습니다.

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

.CSV는 파일 확장자입니다. 무엇이든 가능합니다. 메모장에서 볼 수 있도록 하나를 선택했습니다. 다음은 흥미로운 기사입니다 - https://www.mql5.com/ru/articles/2720. 내 코드는 거기에 설명된 규칙을 준수하지만 프로그래밍 방식으로 파일을 읽을 수 없습니다. FILE_SHARE_READ 모드에서. 확장자가 .HST인 EURUSD20.HST 파일의 경우 플래그는 FILE.BIN이어야 하므로 MT에서 4개의 파일을 오프라인으로 열 수 있습니다.

테스터가 아닌 일반 차트(EURUSD M1)에서 작업하려고 했습니다. M20 TF를 구성하는 지표를 시작합니다.

파일 열기 코드:

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

이 경우 이 파일은 MQL4\Files 폴더에 나타납니다. 다음으로 EURUSD20.csv 파일의 내용을 EURUSD20.HST 파일로 복사하는 일반 차트(EURUSD M5)에서 스크립트를 실행합니다. EURUSD20.HST 파일은 MQL4와 동일한 디렉토리의 history 폴더에 생성됩니다.

스크립트 코드:

읽을 파일 ExtHandleR=FileOpen("EURUSD20.csv",FILE_BIN|FILE_READ|FILE_SHARE_READ);

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

M1 차트에서 지표를 제거할 때만 모든 것이 작동합니다. 즉, 읽기로 파일을 분할하는 모드가 작동하지 않습니다.

 

안녕하세요! 유로달러 차트의 메타 트레이더 결함은 무엇입니까? 시간별 차트에서 2011년 10월 9일 일요일에 일간 양초가 있었는데 이 날짜에는 단 한 시간 23:00입니다. 아마도 이것은 시계가 겨울 시간으로 이전되었기 때문일 것입니다. 그것을 고치는 방법? 이 촛불은 이전에 존재하지 않았습니다.

 
tvv : M1 차트에서 지표를 제거해야 모든 것이 작동합니다. 즉, 읽기로 파일을 분할하는 모드가 작동하지 않습니다.

문제는 다음과 같이 해결됩니다. 파일을 쓰는 프로그램은 각 쓰기 작업 후에 FileClose 파일 을 닫아야 하므로 다른 프로그램에서 읽을 수 있도록 해제해야 합니다. 이는 데이터를 쓸 때 데이터가 먼저 버퍼에 들어가고 한동안 파일에 물리적으로 존재하지 않기 때문입니다. 파일을 닫으면 버퍼가 파일 로 해제됩니다. 다음 입장 전

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

파일이 다시 열리고 포인터가 끝으로 이동합니다.

 

안녕하세요! 말해봐, 결과로 나오는 포인트 수가 두 표현식에서 동일하다는 것이 사실입니까? 그것은 나에게 정말 중요합니다!

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

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

더 정확하게 말하면 결국 포인트는 음수가 될 수 없습니다??? 아니면 어쨌든.....))

 

좋은 저녁이에요.

mql5 공부를 시작했는데 몇가지 질문이 있어서 도움을 구합니다.

작업은 n개의 마지막 양초의 고점 값을 배열로 가져오고 무패 고점만 선택하여 배열을 정렬하는 것입니다.

나는이 기능을 썼다 :

 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);
   } 

범위를 벗어난 배열 오류를 발생시킵니다. 줄에.

 high=temp[index];

내가 이해하는 이 오류는 존재하지 않는 배열 셀에 액세스하여 발생합니다.

그러나 나는 박쥐에서 바로 오류를 찾을 수 없었습니다. 내가 망친 부분을 알려주십시오. 아니면 더 우아한 정렬이있을 수 있습니다.

 
WhiteBerkut :

좋은 저녁이에요.

mql5 공부를 시작했는데 몇가지 질문이 있어서 도움을 구합니다.

작업은 n개의 마지막 양초의 고점 값을 배열로 가져오고 무패 고점만 선택하여 배열을 정렬하는 것입니다.

나는이 기능을 썼다 :

범위를 벗어난 배열 오류를 발생시킵니다. 줄에.

내가 이해하는 이 오류는 존재하지 않는 배열 셀에 액세스하여 발생합니다.

그러나 나는 박쥐에서 바로 오류를 찾을 수 없었습니다. 내가 망친 부분을 알려주십시오. 아니면 더 우아한 정렬이있을 수 있습니다.

index 의 값을 array 의 차원 과 비교하십시오. 배열 요소 는 0부터 번호가 매겨지고 마지막 숫자는 차원보다 1이 작습니다. 그리고 NumCand는 무엇과 같습니까?
사유: