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

 
안녕하세요! 문제를 처리하는 데 도움이 됩니다. 한 명의 Expert Advisor에서 다양한 기호/TF에 대한 데이터를 가져와야 합니다. 도움말은 다음과 같이 말합니다. " 데이터를 위해 서버에 액세스하는 메커니즘은 요청이 시작된 방법에 따라 달라지지 않습니다. 사용자가 차트를 탐색할 때 또는 MQL4 언어로 프로그래밍 방식으로. " 그러나 실제로는 예를 들어 실시간으로 , EA가 실행 중인 심볼과 다른 심볼/TF에 대한 막대 수 를 모니터링하기 위해 결과는 다음과 같습니다.첫 번째 호출(M1의 경우 약 1000)에서 새 심볼에 대해 적은 수의 막대가 로드되고 이 숫자는 변경되지 않습니다. 다른 시계열 액세스 기능을 시도하고, 현재 로드된 것보다 더 깊은 히스토리에서 막대 및 시간의 이동을 설정하려고 시도하고, ChartNavigate(_ID, CHART_BEGIN) 차트를 이동하려고 시도했습니다. - 새 데이터가 로드되지 않고 막대의 수 변하지 않는다. 그러나 동일한 Expert Advisor에서 프로그래밍 방식으로 창을 열고(ChartNavigate() 함수를 위해 더 일찍 열었음) 화살표/Home/PgUp 버튼을 사용하여 차트를 왼쪽으로 이동하면 시계열 배열이 증가합니다. 실시간으로 막대 수가 증가합니다. 데이터를 로드 중입니다. 키보드의 물리적 키를 누르지 않고 프로그래밍 방식으로 기록을 로드하려면 어떻게 해야 합니까? 고맙습니다)
 
Ihor Herasko :

그렇게 하세요. 코드는 거의 정확합니다. 한 단어만 빠졌습니다.

덕분에!
 
Alexandr Mordashov :
안녕하세요! 문제를 처리하는 데 도움이 됩니다. 한 명의 Expert Advisor에서 다양한 기호/TF에 대한 데이터를 가져와야 합니다. 도움말은 다음과 같이 말합니다. " 데이터를 위해 서버에 액세스하는 메커니즘은 요청이 시작된 방법에 따라 달라지지 않습니다. 사용자가 차트를 탐색할 때 또는 MQL4 언어로 프로그래밍 방식으로. " 그러나 실제로는 예를 들어 실시간으로 , EA가 실행 중인 심볼과 다른 심볼/TF에 대한 막대 수 를 모니터링하기 위해 결과는 다음과 같습니다.첫 번째 호출(M1의 경우 약 1000)에서 새 심볼에 대해 적은 수의 막대가 로드되고 이 숫자는 변경되지 않습니다. 다른 시계열 액세스 기능을 시도하고, 현재 로드된 것보다 더 깊은 히스토리에서 막대 및 시간의 이동을 설정하려고 시도하고, ChartNavigate(_ID, CHART_BEGIN) 차트를 이동하려고 시도했습니다. - 새 데이터가 로드되지 않고 막대의 수 변하지 않는다. 그러나 동일한 Expert Advisor에서 프로그래밍 방식으로 창을 열고(ChartNavigate() 함수를 위해 더 일찍 열었음) 화살표/Home/PgUp 버튼을 사용하여 차트를 왼쪽으로 이동하면 시계열 배열이 증가합니다. 실시간으로 막대의 수가 증가합니다. 데이터를 로드 중입니다. 키보드의 물리적 키를 누르지 않고 프로그래밍 방식으로 기록을 로드하려면 어떻게 해야 합니까? 고맙습니다)

우리는 질문을 더 명확하게 공식화해야 합니다. 작업이 설정되지 않으면 해결할 수 없습니다.

 
Galim_V :
올빼미가 매달린 시간과 다른 시간 프레임에서 바닥 지표를 얻는 방법을 알려주실 수 있습니까?
 double iRev()
{
 static int wtf;
 static int tf;  
 int xtf = Period ();       // таймфрейм текущего графика 
 
                           //PERIOD_CURRENT;
 if (xtf != PERIOD_CURRENT )
 {
 Print ( "xtf  " ,xtf);
   switch (xtf)
   {
     case 1 : tf = PERIOD_H1 ;
     break ;
     case 5 : tf = PERIOD_H4 ; wtf = PERIOD_H1 ;
     break ;
     case 15 : tf = PERIOD_D1 ;
     break ;
   }
     
 }
Print ( "tf == " ,tf, "wtf ==" ,wtf);
 double   iRa =   NormalizeDouble ( iCustom ( NULL ,tf, "iRevers" ,InpSARStep,InpSARMaximum, 0 ), Digits );
 double   wRa =   NormalizeDouble ( iCustom ( NULL ,wtf, "iRevers" ,InpSARStep,InpSARMaximum, 0 ), Digits );
   if (iRa != 0 ) ObjectCreate ( "Ra" , OBJ_HLINE , 0 , Time [ 0 ],iRa, 0 , 0 );
     
     ObjectSet ( "Ra" , OBJPROP_TIME1 , Time [ 0 ]);
     ObjectSet ( "Ra" , OBJPROP_PRICE1 ,iRa);
   
   if (wRa != 0 ) ObjectCreate ( "weRa" , OBJ_HLINE , 0 , Time [ 0 ],wRa, 0 , 0 ); 
     ObjectSet ( "weRa" , OBJPROP_TIME1 , Time [ 0 ]);
     ObjectSet ( "weRa" , OBJPROP_PRICE1 ,wRa); 
    
     
   Print ( "iRa   " ,iRa,wRa);
 return (iRa);
}  
작동하지만 항상 올바른 것은 아닙니다. 시각적 평가를 위해 나사를 조인 물체. 나에게 또는 어디를 봐야하는지 알려주세요.
 
Galim_V :
작동하지만 항상 올바른 것은 아닙니다. 시각적 평가를 위해 나사를 조인 물체. 나에게 또는 어디를 봐야하는지 알려주세요.

DRAW_LINE이 여기에 있는 이유

 double   iRa =   NormalizeDouble ( iCustom ( NULL ,tf, "iRevers" ,InpSARStep,InpSARMaximum, DRAW_LINE , 0 ), Digits );
 double   wRa =   NormalizeDouble ( iCustom ( NULL ,wtf, "iRevers" ,InpSARStep,InpSARMaximum, DRAW_LINE , 0 ), Digits );
 
Alexey Viktorov :

DRAW_LINE이 여기에 있는 이유

코드를 수정했습니다. 그러나 코드의 오류 때문이 아니라 제대로 작동하지 않았습니다. 나는 내 브로커가 아닌 터미널에서 테스트를 수행하고 항상 서버와의 연결을 따르지는 않습니다. 그리고 이 경우 중요합니다. 고맙습니다.
 

안녕하세요. 고문이 H1 차트에 있는 경우 M30 의 종가 를 찾는 방법은 무엇입니까?

Close_M30= iClose ( Symbol (), PERIOD_M30 , 1 );
 
bij :

안녕하세요. 어드바이저가 H1 차트에 있는 경우 M30 의 종가 를 찾는 방법은 무엇입니까?

나는 사람들이 스스로 질문하고 대답하는 것을 좋아한다.))

대체로 모든 것이 정확합니다. 단 한 가지 주의 사항이 있습니다. 다른 TF에서 받은 데이터를 사용하기 전에 이 데이터가 전혀 존재하는지 확인해야 합니다.

따라서 완전한 올바른 코드는 다음과 같습니다.

 ResetLastError ();
Close_M30= iClose ( Symbol (), PERIOD_M30 , 1 );
if ( GetLastError () != ERR_NO_ERROR )
{
   // Значение Close_M30 использовать нельзя
}
 
Ihor Herasko :

나는 사람들이 스스로 질문하고 대답하는 것을 좋아한다.))

대체로 모든 것이 정확합니다. 단 한 가지 주의 사항이 있습니다. 다른 TF에서 받은 데이터를 사용하기 전에 이 데이터가 전혀 존재하는지 확인해야 합니다.

따라서 완전한 올바른 코드는 다음과 같습니다.

감사합니다. 작업은 H1이 종료된 후에만 수행되지만 H1이 종료되기 30분 전에 조건이 충족됩니다.

 ResetLastError ();
   niz_= NormalizeDouble ( iCustom ( NULL , PERIOD_M30 , "mand v.1" , 2 , 1 ), Digits );
   Close_M30= iClose ( Symbol (), PERIOD_M30 , 1 );
   if ( GetLastError () != ERR_NO_ERROR ) return ;
   if (Close_M30>niz_) //условие
     {
       //действие
     }
 
bij :

감사합니다. 작업은 H1이 종료된 후에만 수행되지만 H1이 종료되기 30분 전에 조건이 충족됩니다.

마지막으로 닫힌 H1 촛대와 함께 닫힌 M30 촛대를 가져와야한다면 1뿐만 아니라 2의 지수를 가진 촛대가 될 수 있습니다. 또 다른 것은 종가 가 왜 그런지 명확하지 않다는 것입니다. 이전 양초 H1 종가와 동일한 경우 M30의 값을 취합니다. 즉, 이 경우 다른 시간대의 종가가 현재 시간대의 종가와 일치하기 때문에 다른 시간대의 종가를 폴링하는 것은 의미가 없습니다.