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

 
Igor Zakharov :

이것은 교체가 아닙니다. - MB 는 표시기에서 작동하지 않습니다 . 버튼을 누를 때까지 실을 멈춥니다!

나는 무심코 충고했지만 메모에는 완전히 다른 내용이 나와 있습니다.

메모

MessageBox()를 호출하면 사용자의 응답을 기다리는 동안 표시기의 실행 스레드가 일시 중단되므로 사용자 지정 표시기에서는 이 함수를 사용 하지 않는 것이 좋습니다 . 그리고 각 심볼에 대한 모든 지표가 단일 스레드에서 실행되기 때문에 이 심볼에 대한 모든 시간대의 모든 차트가 중지됩니다.

전략 테스터에서 작업할 때 MessageBox() 함수가 실행되지 않습니다.

 
MakarFX :

나는 프로그래머가 아니며 편의를 위해 표시기를 편집합니다. 테스터가 아닌 실시간으로 확인했습니다.

그건 그렇고, 텔레파시는 존재하지 않습니다 .

여기에서 사용할 수 있는 표시기 중 이 기능을 사용하는 표시기를 알고 있다면 알려주세요. 그러면 제가 직접 알아낼 수 있습니다.

감사해요

우리는 모든 것을 가지고 있습니다.

Клуб Телепатов
Клуб Телепатов
  • 2011.05.08
  • www.mql5.com
Клуб телепатов Вас послали сюда? Тогда давайте знакомиться! Как же такое могло случиться со мной...
 
Artyom Trishkin :

지역 범위 에서 구조 유형으로 변수를 선언하고 이를 함수로 보냅니다. 같은 지역에서.

사실 필드의 구조에 대한 변수를 생성할 때 해당 범위는 로컬 범위가 아니라 전체 함수에 대한 것입니다. 다음은 예입니다.

 int OnInit ()
  {
{int In=8;
 MyPoint qr;}
qr - видна здесь
In - здесь не видна
   return ( INIT_SUCCEEDED );
  }

void OnDeinit ( const int reason){}

struct MyPoint
{
     int x[ 5 ];
     int y;
};

더 이상 로컬에서 작업할 수 없는 것으로 나타났습니다.

 

스크립트의 csv 파일에서 데이터를 읽으려고 합니다. 작동하지 않았고 이유를 이해하지 못합니다.

읽기를 위해 가장 간단한 절차를 사용합니다.

 bool GetBiFromFile( string InFNam, int & alBars, double & xClose[], datetime & xTime[])
{   int   InHndl,nBars;
   bool fset;
   double aval;
   
   InHndl = FileOpen (InFNam+ ".csv" , FILE_READ | FILE_CSV , "," );
   if (InHndl== INVALID_HANDLE ) {
       Print ( "File " +InFNam+ " does not open. Error: " , GetLastError ()); 
       return ( false ); 
   } else {
      fset = FileSeek (InHndl, 0 , SEEK_SET );
       ArrayResize (xClose,alBars);      
       ArrayInitialize (xClose, 0.0 );  
       ArrayResize (xTime,alBars);       
       ArrayInitialize (xTime, 0 );  
      nBars = 0 ;
       while (! FileIsEnding (InHndl)) {
         nBars++;
         xTime[nBars- 1 ]  = FileReadDatetime (InHndl);;
         xClose[nBars- 1 ] = FileReadDouble (InHndl);
         aval = FileReadDouble (InHndl);
         if (nBars>=alBars) break ;
      }
   }
   Print ( "nBars = " ,nBars, "   allBars = " ,alBars);
   Print ( "Start: " ,xClose[ 0 ], "   " + TimeToString (xTime[ 0 ], TIME_DATE | TIME_SECONDS ));
   Print ( "End: " ,xClose[nBars- 1 ], "   " + TimeToString (xTime[nBars- 1 ], TIME_DATE | TIME_SECONDS ));
   return ( true );
}

데이터 파일은 다음과 같습니다.

2012.01.02 02:00:02,1.293240,1.293410

2012.01.02 02:00:52,1.293330,1.293500

2012.01.02 02:00:55,1.293810,1.293980

....

그리고 프로시저의 Print() 문의 결과는 다음과 같습니다.

nBars = 1000 alBars = 1000

시작: 0.0 2020.01.29 01:00:00

종료: 0.0 2020.01.29 01:00:00

즉, 읽기 루프에서 모든 행이 처리되지만 아무 것도 읽지 않습니다. 그리고 오류 메시지가 없습니다.

누군가 나에게 이것을 설명할 수 있습니까?


 
Yurixx :

누군가 나에게 이것을 설명할 수 있습니까?

이진 함수는 텍스트 파일을 읽습니다.

 
Alexey Viktorov :

우리는 모든 것을 가지고 있습니다.

사악해!

 
MakarFX :

사악해!

척하다

프로그래밍을 이해하고 싶다면 먼저 이해하려고 노력하십시오. 필요한 경우 무료로 작성하도록 제안하는 주제에 연락하고 표시기를 거기에 놓고 요청을 설명하십시오.


ps. 다 확인했습니다. 어떤 이유로 Alert()는 PlaySound() 이전의 경우에도 선택한 사운드를 재생하지 못하게 합니다. 내 기억이 나빠졌을 수도 있지만 그게 요점이 아닙니다.

적십자가 나타나도록 두 번 찔러 경고음을 끌 수 있습니다.


이 경우 Alert() 또는 PlaySound()보다 앞서 작성된 내용은 중요하지 않습니다.

 
Alexey Viktorov :

척하다


이 경우 Alert() 또는 PlaySound()보다 앞서 작성된 내용은 중요하지 않습니다.

이 경우 경고창이 열리지 않습니다.(

 
fxsaber :

이진 함수는 텍스트 파일을 읽습니다.

FileReadDouble() 함수는 실제로 바이너리 파일에서 읽는다고 합니다.

그러나 FileReadDatetime() 에 대해서는 "CSV 파일에서 "YYYY.MM.DD HH:MI:SS", "YYYY.MM.DD" 또는 "HH:MI:SS" 형식 중 하나의 문자열을 읽습니다. - 그리고 그것을 datetime형 값으로 변환합니다."

또한 FileReadString() 을 사용했을 때와 같은 그림이고 문자열을 원하는 형식 으로 직접 변환했습니다.

어떻게 해야 한다고 생각하십니까?


 
Yurixx :

어떻게 해야 한다고 생각하십니까?

 void OnStart ()
{
   datetime time;
  
   double PriceBid;
   double PriceAsk;
  
   string Str = "2012.01.02 02:00:02,1.293240,1.293410" ;
   string StrArray[];
  
   if ( StringSplit (Str, ',' , StrArray) > 2 )
  {
    time = ( datetime )StrArray[ 0 ];
    
    PriceBid = ( double )StrArray[ 1 ];
    PriceAsk = ( double )StrArray[ 2 ];
  }
}