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

 

안녕하세요. 잠시 후 MT4에서 플래그 처리가 중단되었습니다. 그냥 mt가 그것을 무시하기 시작하면 이유를 알 수 있습니다.

 void OnTimer ()
  {
//---
   //-----------------
   int tmeLeftC = PeriodSeconds () - ( TimeCurrent ()- Time [ 0 ]);
   int tmeLeftL = PeriodSeconds () - ( TimeLocal ()- Time [ 0 ]);
   
   
//флаг на вкл отправки   
   if ((sendflag== 0 ) && (tmeLeftC >= 10 )) 
      {
         sendflag= 1 ;
      }
      

//Условия на отправку 
///------BAY 
   if ((sendflag== 1 ) && (fNewBar()) && ( TimeHour ( Time [ 0 ]) >= StartH) && ( TimeHour ( Time [ 0 ]) <= EndH) && ((tmeLeftC <= SecondsPrevToServer) || (tmeLeftL <= SecondsPrevToServer)))
      {
         Print ( "Predict data" );
         sendSig();
         Print ( "Send data" );
         sendflag= 0 ;
      }
 
itslek :

안녕하세요. 잠시 후 MT4에서 플래그 처리가 중단되었습니다. 그냥 mt가 그것을 무시하기 시작하면 이유를 알 수 있습니다.


100-200ms의 타이머 주파수를 시도하고,
500ms는 1초를 잡기에는 너무 많다

음, 결국 촛불은 몇 초 또는 몇 분 동안 나중에 열릴 수 있습니다.

 
Ivan Ivanov :

노력하다 :

... 아니면 정말로 extern이 필요합니까?


고맙습니다. 도움이 된 것 같습니다.

그리고 내가 이해할 수없는 입력과 extern의 차이점은 무엇입니까?

 
Taras Slobodyanik :

100-200ms의 타이머 주파수를 시도하고,
500ms는 1초를 잡기에는 너무 많다

음, 결국 촛불은 몇 초 또는 몇 분 동안 나중에 열릴 수 있습니다.


그래서 문제는 그가 그것을 잡지 않는 것이 아닙니다. 이것으로 모든 것이 훌륭합니다.

사실은 플래그가 작동을 멈추고 플래그의 조건을 무시하고 500ms마다 신호를 보내기 시작한다는 것입니다. 무슨일인지 이해가 안가네요...

 
RichLux : 내가 이해할 수 없는 입력과 extern의 차이점은 무엇입니까?


 

버퍼를 새 모양으로 재설정하되 버퍼에 있는 이전 데이터가 지워지지 않고 차트에 표시되도록 하는 방법을 알려주세요. 어떤 이유로 버퍼를 재설정 할 수 없으며 새로운 막대 의 출현으로 이전에 축적 된 데이터가 새로운 것으로 겹쳐집니다. 코드에서 올바르게 설명하지 않은 것.

 void OnInit ()
{
   IndicatorDigits ( 0 );
   SetIndexBuffer ( 0 ,Buf_1);
   SetIndexBuffer ( 1 ,Buf_2);
   Bid1= Bid ;
  
   
}
 
 
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
{
   datetime Вр= Time [ 0 ];   // Время текущего бара
   if (Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[ 0 ]= 0 ;         // и обнулить последний элемент буфера
      Buf_2[ 0 ]= 0 ;
   }
   
      
   if ( Bid > Bid1) 
   {
   V1 = iVolume ( NULL , 0 , 0 );
   V2 = V1 + V2;
   Buf_1[ 0 ]= V2;
   }                             
   else 
   {
   V3 = iVolume ( NULL , 0 , 0 );
   V4 = V3 + V4;
   Buf_2[ 0 ]= (V4*- 1 );
   }
   Bid1= Bid ;
   
   
   return (rates_total);
}
 
itslek :

그래서 문제는 그가 그것을 잡지 않는 것이 아닙니다. 이것으로 모든 것이 훌륭합니다.

사실은 플래그가 작동을 멈추고 플래그의 조건을 무시하고 500ms마다 신호를 보내기 시작한다는 것입니다. 무슨일인지 이해가 안가네요...


시간이 지남에 따라 로컬과 서버 모두 혼란스러워집니다.
나는 다음과 같은 것을 잡을 것입니다.

 //+------------------------------------------------------------------+
bool NewBar()
{
static bool flag= false ;
static int bar= Bars ;
static datetime lasttime= 0 ;

if (!flag && Bars !=bar)
   {
   bar= Bars ;
   lasttime= TimeLocal ();
   flag= true ;
   }
if (flag && TimeLocal ()-lasttime>=pause) //pause - пауза после начала бара, например 59 сек
   {
   flag= false ;
   return ( true );
   }
return ( false );
}
 

안녕하세요! 인디케이터에서 iData로 작성 하면 차트의 기간을 지정할 수 있는 프로그램이나 막대 데이터에 대한 링크가 중요하지 않은지, 왜 다른 기간의 데이터가 올바르게 반영되지 않는지 알려주십시오. 시간은 다르지만 지정된 시간대의 차트에만 있는 현재 차트? 고맙습니다.

 

안녕하세요, 누군가가 응답하고 도움이 될 수 있습니다. 다시 시도하겠습니다. 다음은 메시지입니다. 페이지 367 , 모든 것이 거기에 그려져 있습니다.

 
Novaja :

안녕하세요, 누군가가 응답하고 도움이 될 수 있습니다. 다시 시도하겠습니다. 다음은 메시지입니다. 페이지 367 , 모든 것이 거기에 그려져 있습니다.


이봐