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

 
MakarFX # :

그리고 그렇다면

오랫동안 나는 당신의 솔루션이 무한 루프를 일으키지 않는 이유를 이해할 수 없었습니다. 그러나 자체적으로 1회 실행됩니다. 그러나 위의 솔루션으로 인해 부울 스위치가 생성되었습니다.
 ulong ms= 0 ;
bool msFlag= 0 ;

void OnTimer (){
   if (msFlag!= 0 && GetMicrosecondCount ()-ms > 100000 ){
     ObjectSetInteger ( 0 , "button1" , OBJPROP_STATE , false );
    msFlag= 0 ;
  }
}

void OnChartEvent ( const int id, const long &lparam, const double &dparam, const string &sparam)
  {
     if (id== CHARTEVENT_OBJECT_CLICK && sparam== "button1" ){
      ms= GetMicrosecondCount ();
      msFlag= 1 ;
      } 
  }
이제 코드는 버튼 클릭 시에만 실행됩니다. 그러나 터미널이 며칠 동안 작동하면 어떻게 될까요? 다른 시간 반환 방법에 대한 도움말은 오버플로가 있을 것이라고 말합니다.

 ulong ms= 0 ;
bool msFlag= 0 ;

int OnInit ()
{
     EventSetMillisecondTimer ( 1 );
    ...
}

void OnTimer (){
   if (msFlag!= 0 && Seconds() > 20 ){
     ObjectSetInteger ( 0 , "button1" , OBJPROP_STATE , false );
    msFlag= 0 ;
  }
}

void OnChartEvent ( const int id, const long &lparam, const double &dparam, const string &sparam)
  {
     if (id== CHARTEVENT_OBJECT_CLICK && sparam== "button1" ){
      msFlag= 1 ;
      }
  }
동일한 코드이지만 GetMicrosecondCount 대신 Seconds()를 사용하면 작동하지 않습니다. "Seconds() > 20"이 더 높으면 버튼이 "눌린" 상태에서 멈춥니다. 더 낮으면 작동하지만 너무 빨라서 거의 감지할 수 없습니다(깜박임).
 
Nerd Trader # :
오랫동안 나는 당신의 솔루션이 무한 루프를 일으키지 않는 이유를 이해할 수 없었습니다. 그러나 자체적으로 1회 실행됩니다. 그러나 위의 솔루션으로 인해 부울 스위치가 생성되었습니다.
이제 코드는 버튼 클릭 시에만 실행됩니다. 그러나 터미널이 며칠 동안 작동하면 어떻게 될까요? 다른 시간 반환 방법에 대한 도움말은 오버플로가 있을 것이라고 말합니다.

동일한 코드이지만 GetMicrosecondCount 대신 Seconds()를 사용하면 작동하지 않습니다. "Seconds() > 20"이 더 높으면 버튼이 "눌린" 상태에서 멈춥니다. 더 낮으면 작동하지만 너무 빨라서 거의 감지할 수 없습니다(깜박임).

그럼

 //+------------------------------------------------------------------+
void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
  {
       if (id== CHARTEVENT_OBJECT_CLICK && sparam== "button1" )
         {ms= TimeCurrent ();}
  }
//+------------------------------------------------------------------+
void OnTimer ()
  {
   if (ms!= 0 && TimeCurrent ()>ms)
     {
       ObjectSetInteger ( 0 , "button1" , OBJPROP_STATE , false );
      ms= 0 ;
     }
  }
//+------------------------------------------------------------------+
 
MakarFX # :

그럼

아니요, 그런 식으로 작동하지 않습니다. 몇 초 안에 작동하지 않으면 TimeCurrent()에서는 더욱 그렇습니다. 오버플로의 위협에도 불구하고 밀리초로, 지금까지 유일한 작동 옵션입니다.
 
Nerd Trader # :
아니요, 그런 식으로 작동하지 않습니다. 몇 초 안에 작동하지 않으면 TimeCurrent()에서는 더욱 그렇습니다. 오버플로의 위협에도 불구하고 밀리초로, 지금까지 유일한 작동 옵션입니다.
공장!
 
MakarFX # :
공장!
mmm이 작동하지 않습니다. 버튼이 저절로 해제되지 않습니다.
 
Nerd Trader # :
mmm이 작동하지 않습니다. 버튼이 저절로 해제되지 않습니다.
이제 시장이 닫히고 TimeCurrent()는 변경되지 않습니다. 토굴 확인, 주말에도 작동
 
MakarFX # :
이제 시장이 닫히고 TimeCurrent()는 변경되지 않습니다. 토굴 확인, 주말에도 작동
내 브로커는 주말에 암호화폐를 거래하지 않습니다. 테스터에서 시도 - 작동하지 않습니다.
 
Nerd Trader # :
암호는 주말에 내 브로커에서 거래되지 않습니다. 테스터에서 시도 - 작동하지 않습니다.
데모 A-Markets를 엽니다. 테스터에서 타이머가 작동하지 않습니다.
 

인사말! 나는 배열을 얻는다

 int arr[]={ 6 , 4 , 6 , 7 , 55 , 55 , 7 , 6 , 77 , 66 , 66 , 2 , 2 };

모든 숫자가 있지만 반복되지 않도록 변경하는 방법은 무엇입니까?

 int re[]={ 6 , 4 , 7 , 55 , 77 , 66 , 2 };
 
Galim_V # :

인사말! 배열이 있습니다

모든 숫자가 있지만 반복되지 않도록 변경하는 방법은 무엇입니까?

라이브러리를 사용하지 않고 가능한가요?

 int arr[]= { 6 , 4 , 6 , 7 , 55 , 55 , 7 , 6 , 77 , 66 , 66 , 2 , 2 };
int re[];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{
   int AS= ArraySize (arr);
   int n= 0 ;
   for ( int i= 0 ; i<AS; i++) {
     if (ArraySearch(re, arr[i])==- 1 ) {
      n++;
       ArrayResize (re,n);
      re[n- 1 ]=arr[i];
    }
  }
   ArrayPrint (re);
}
//===============================================================================================
//------------------------------ Функция удаляет копии с массива -------------------------------+
//===============================================================================================
int ArraySearch( int & m[], int e)
{
   for ( int i= 0 ; i< ArraySize (m); i++) {
     if (m[i]==e) return (i);
  }
   return (- 1 );
}
//+------------------------------------------------------------------+