Mt4 지원 종료. - 페이지 25

 
Artyom Trishkin :

사용자가 "M5에 새 막대 가 나왔습니까?"라고 묻는 함수를 작성하기만 하면 됩니다. 그리고 예/아니오 대답을 얻습니다.

예를 들어:

다음은 IsNewBar() 함수이며 작업의 추가 확장으로 더 개발 및 비틀기/회전할 것입니다.


OOP의 이점을 보여주는 좋은 예는 아닌 것 같습니다.
다음은 하나의 함수만 사용하는 예입니다.

 int OnInit ()
  {
   return ( INIT_SUCCEEDED );
  }
void OnTick ()
  {
   IsNewBar( 0 , false ); // режим сбора информации
   if (IsNewBar()) Print ( "Пришел новый бар текущего ТФ" );   // режим считывания информации
   if (IsNewBar( PERIOD_H4 )) Print ( "Пришел новый бар H4" );   // режим считывания информации
   if (IsNewBar( PERIOD_D1 )) Print ( "Пришел новый бар D1" );   // режим считывания информации
   
  }
bool IsNewBar( ENUM_TIMEFRAMES tf= PERIOD_CURRENT , bool out= true )
  {
   static const ENUM_TIMEFRAMES TF[ 22 ]=
     {
       PERIOD_CURRENT , PERIOD_M1 , PERIOD_M2 , PERIOD_M3 , PERIOD_M4 , PERIOD_M5 , PERIOD_M6 , PERIOD_M10 , PERIOD_M12 , PERIOD_M15 , PERIOD_M20 , PERIOD_M30 ,
       PERIOD_H1 , PERIOD_H2 , PERIOD_H3 , PERIOD_H4 , PERIOD_H6 , PERIOD_H8 , PERIOD_H12 , PERIOD_D1 , PERIOD_W1 , PERIOD_MN1
     };
   static bool newbar[ 22 ];
   static bool FirstTime= true ;
   static int acb[ 22 ]; // array of current bars
   if (FirstTime)
     {
       for ( int i= 0 ;i< 22 ;i++) acb[i]= Bars ( Symbol (),TF[i]);
      FirstTime= false ;
       return ( false );
     }
   int curtf= 0 ;
   while (TF[curtf]!=tf) curtf++;
   if (out) return (newbar[curtf]);
   for ( int i= 0 ;i< 22 ;i++)
     {
       int CurBars= Bars ( Symbol (),TF[i]);
       if (acb[i]<CurBars)
        {
         acb[i]=CurBars;
         newbar[i]= true ;
        }
       else newbar[i]= false ;
     }
   return ( false );
  }

물론 OnTick 에서 제거하고 OnTimer 에 삽입할 수 있습니다.

 
Реter Konow :

이 질문에 관해서는 당신이 틀렸다고 생각합니다. 서비스 데스크에서 확인하십시오. 그들이 질문에 정확하게 답하게 하십시오: 견적의 도착 여부에 관계없이 플랫폼에 새로운 막대 가 형성되는지 여부. 그렇지 않은 경우 새 바가 있을 때 견적이 있는지 확인하십시오. 그렇다면 새로운 막대가 형성되었습니다. 그렇게 될 수 있습니다. 많이 변경할 필요가 없습니다.

Oh mama mia... 글쎄, 이미 정보를 읽으십시오. 나는 당신이 이것을 모른다는 것에 매우 놀랐고 그들이 그것에 대해 말할 때 당신도 그것을 의심했습니다. 나는 그런 유치한 문제에 대해 서비스 데스크의 방향을 쳐다보지도 않을 것입니다. 그들은 나를 비웃을 것입니다. 그런 다음 직접 물어보십시오. 프로필에 서비스 데스크 링크가 있습니다.
 
Nikolai Semko :

OOP의 이점을 보여주는 좋은 예는 아닌 것 같습니다.
다음은 하나의 함수만 사용하는 예입니다.

물론 OnTick 에서 제거하고 OnTimer 에 삽입할 수 있습니다.

나는 논리를 보지 않았습니다. 글쎄, 우리는 모든 것이 올바르게 작동한다고 가정할 것입니다.

임의의 캐릭터는 어떻습니까?

프로그램이 Market Watch 창의 기호 목록을 사용하고 사용자가 언제든지 기호 집합을 변경할 수 있다고 상상해 보십시오.

 
개인적으로 OOP 코드에서 @Nikolai Semko 를 보지 못했습니다.


감사합니다.

 

Artyom은 질문 자체를 약간 공개하지 않았지만 질문은 다음과 같습니다. 올바르게 작동하도록 절차적 스타일로 작성하십시오.

 void OnTick ()
 {
 
   if (IsNewBar( "AUDCAD" , PERIOD_H1 )) {
   // задача №1
  }
 
   if (IsNewBar( "GBPJPY" , PERIOD_M15 )) {
   // задача №2
  }
 
   if (IsNewBar( "EURUSD" , PERIOD_H4 )) {
   // задача №3
  }

 }

// Функция "Новый бар"
bool IsNewBar(....) {
 здесь код, который нужно написать
}
 
Реter Konow :

예, 타이머로. 따옴표 없이도 새 막대가 나타납니다. 우리는 막대 모양 이벤트에 관심이 있으며 OnTick()에서 인용문을 수정할 수 있습니다.

어쨌든 막대가 나타납니다.


여기서는 막대로 설명 합니다 .

바 오픈 시간 시간[i]은 원칙적으로 틱 도착 시간과 일치하지 않습니다. 모든 시간대에 대한 막대 여는 시간은 항상 시간대의 배수입니다. 기간 내에 발생하는 첫 번째 틱 은 막대를 형성하는 틱입니다. 기간 내에 단일 틱이 수신되지 않은 경우 이 기간 내의 막대도 형성되지 않습니다.

 
Vitaly Muzichenko :

Artyom은 질문 자체를 약간 공개하지 않았지만 질문은 다음과 같습니다. 올바르게 작동하도록 절차적 스타일로 작성하십시오.

나는 점차적으로 작업을 추가하여 사람들로부터 작업을 구현하는 빠르고, 편리하고, 쉽고 간단한 방법을 달성하고 싶었습니다. 그런 다음 OOP로 이 작업을 수행하는 것이 얼마나 쉬운지 보여줍니다.

그러나 OOP의 주요 거부자는 문제의 해결을 거부했습니다. :)

 
Artyom Trishkin :

나는 점차적으로 작업을 추가하여 사람들로부터 작업을 구현하는 빠르고, 편리하고, 쉽고 간단한 방법을 달성하고 싶었습니다. OOP를 사용하여 이 작업을 수행하는 것이 얼마나 쉬운지 나중에 보여주기 위해.

그러나 OOP의 주요 거부자는 문제의 해결을 거부했습니다. :)

네, 사실 제가 직접 말한 것은 아닙니다. 다음과 같이 말하겠습니다.

Artyom은 질문 자체를 약간 공개하지 않았지만 질문은 다음과 같습니다. 올바르게 작동 하도록 절차적 스타일로 작성하십시오.

아마도 그는 돌아와서 그것이 매우 쉽고 간단하게 가능하다는 것을 증명할 것입니다.

 
Vitaly Muzichenko :

네, 사실 제가 직접 말한 것은 아닙니다. 다음과 같이 말하겠습니다.

Artyom은 질문 자체를 약간 공개하지 않았지만 질문은 다음과 같습니다. 올바르게 작동 하도록 절차적 스타일로 작성하십시오.

아마도 그는 돌아와서 그것이 매우 쉽고 간단하게 가능하다는 것을 증명할 것입니다.

내 목표는 그의 절차적 스타일 코드가 다음과 같은 루프에서 실행되도록 하는 것이었습니다.

   ENUM_TIMEFRAMES array_timeframes[]=
      {
       PERIOD_M1 , PERIOD_M2 , PERIOD_M3 , PERIOD_M4 , PERIOD_M5 , PERIOD_M6 , PERIOD_M10 , PERIOD_M12 , PERIOD_M15 , PERIOD_M30 ,
       PERIOD_H1 , PERIOD_H2 , PERIOD_H3 , PERIOD_H4 , PERIOD_H6 , PERIOD_H8 , PERIOD_H12 , PERIOD_D1 , PERIOD_W1 , PERIOD_MN1
      };
   int total= SymbolsTotal ( true ), total_tf= ArraySize (array_timeframes);
   for ( int i= 0 ; i<total; i++){
       string symbol_name= SymbolName (i, true );
       for ( int j= 0 ; j<total_tf; j++){
         if (IsNewBar(symbol_name,array_timeframes[j])){
             Print ( "Новый бар на " ,symbol_name, " " , EnumToString (array_timeframes[j]));
            }
         }
      }
 
Artyom Trishkin :

내 목표는 그의 절차적 스타일 코드가 다음과 같은 루프에서 실행되도록 하는 것이었습니다.

기호별 주기, 견적 도착 시 새 막대 열기 확인 등을 내 솔루션에 쉽게 추가할 수 있습니다. 그리고 OOP는 어떻습니까?

잘못된 예를 선택했습니다. 여가 시간에 다른 것을 생각하십시오.