MetaTrader 4 Build 529 베타가 새로운 컴파일러와 함께 출시됨 - 페이지 18

 
mr_Johns :
편집기에 있는 MQL4 참조도 그에 따라 업데이트되었습니까?


예, 업데이트 요청이 있습니다. MQL4대한 참고서 는 거의 5에서 찢어져 현재 컴파일러의 현실과 많이 일치하지 않습니다.
 
ALXIMIKS :

내가 잘못 이해했다면 정정하십시오.

표시기에서 라이브러리 함수를 사용합니다. 이 함수에서는 표시기 배열 계산과 관련된 일부 정적 변수가 선언됩니다.

지표 매개변수를 변경하려는 경우 지표가 올바르게 계산되도록 하려면(정적 변수에 대한 의존성을 고려하여),

라이브러리 함수에 재초기화를 담당하는 플래그를 전달해야 합니다(정적 변수가 있는 각 함수의 입력 매개변수를 확장해야 함).

본문에서 정적 변수의 값을 재설정하고 전체 계산을 완료하기 전에 플래그를 제거하는 것을 잊지 마십시오.

정적 변수가 선언될 때 일부 매개변수가 설정되어 있으면 훨씬 더 쉬울 것입니다. 이 매개변수는 재초기화 중에 이러한 변수의 값이 재설정되는지 여부를 담당합니다.

지역 통계 대신 전역 변수 (함수 외부)를 만들고 첫 번째 호출에서 초기화합니다.
 
ALXIMIKS :

정적 변수가 선언될 때 일부 매개변수가 설정되어 있으면 훨씬 더 쉬울 것입니다. 이 매개변수는 재초기화 중에 이러한 변수의 값이 재설정되는지 여부를 담당합니다.

개발자가 ResetStaticVars()와 같은 특수 함수를 만들면 훨씬 더 쉬울 것입니다.

// 그건 그렇고, 그것을 만드는 것이 그렇게 쉽지는 않습니다. 나는하지 않을 것이다. 전체 데이터 세그먼트를 어리석게 재설정하는 것과 모든 사용자 초기 값을 올바르게 할당하는 것은 다른 것입니다. 그러나 보석.

Vapche(패러다임)는 프로그램 수명 동안 값을 보존하는 것이 매우 편리합니다. 다만 하위호환성 문제가 발생했을 뿐인데..

 

나는 이것이 포럼에서 러시아어를 사용하는 부분이라는 것을 알고 있지만 러시아어로 말하는 것이 서툴기 때문에(읽을 수는 있지만) 아무도 이것을 여기에 게시하는 것을 꺼려하지 않습니다(영어 부분은 이러한 문제가 있는 한 완전히 비활성화된 것으로 보이므로) 우려하고 누군가가 이 문제에 대해 게시한 것을 보지 못했기 때문에)

외부 문자열 매개변수와 관련된 새로운 메타트레이더에는 한 가지 심각한 문제가 있습니다. 처음에는 올바른 값을 갖지만 시간 프레임이나 기호 가 변경되는 즉시 문자열 매개변수의 내용이 손실됩니다. 다음은 정확히 무슨 일이 일어나고 있는지 보여주는 간단한 예입니다. 이 문제는 iCustom() 호출을 통해 이러한 표시기를 사용하고 EA 또는 기타 코드에서 해당 표시기를 사용할 수 없게 만드는 경우에도 발생합니다.

 #property indicator_chart_window

extern string TestString = " whatever value that we want initially set " ;

int OnInit () { return ( 0 ); }
int deinit() { return ( 0 ); }
int start()
{
   Comment (TestString);
   return ( 0 );
}
 
ALXIMIKS :

예, 업데이트 요청이 있습니다. MQL4에 대한 참고서
는 거의 5에서 찢어져 현재 컴파일러의 현실과 많이 일치하지 않습니다 .

아마도 그들은 가장 가까운 계획에 있는 것을 남겼습니까? 기대하고 있습니다.
 
mr_Johns :
편집기에 있는 MQL4 참조도 그에 따라 업데이트되었습니까?

네, 오랜 기간 업데이트되어 매일 활발히 보완되고 있습니다.
 

왜 그런 디자인이 필요한지 알 수 없는 것

 #property icon "\\Files\\button.ico"
 
VOLDEMAR :

왜 그런 디자인이 필요한지 알 수 없는 것

Expert Advisor를 실행하면 "일반" 탭에 그림이 표시됩니다.
 
사진 없음
 
mladen :

나는 이것이 포럼에서 러시아어로 말하는 부분이라는 것을 알고 있지만 러시아어로 말하는 것이 서투르므로(읽을 수는 있지만) 아무도 이것을 여기에 게시하는 것을 꺼려하지 않습니다(영어 부분은 이러한 문제가 있는 한 완전히 비활성화된 것으로 보이므로). 우려하고 누군가가 이 문제에 대해 게시한 것을 보지 못했기 때문에)

외부 문자열 매개변수와 관련된 새로운 메타트레이더에는 한 가지 심각한 문제가 있습니다. 처음에는 올바른 값을 갖지만 시간 프레임이나 기호가 변경되는 즉시 문자열 매개변수의 내용이 손실됩니다. 다음은 정확히 무슨 일이 일어나고 있는지 보여주는 간단한 예입니다. 해당 문제는 iCustom() 호출을 통해 이러한 표시기를 사용하고 EA 또는 기타 코드에서 해당 표시기를 사용할 수 없게 만드는 경우에도 발생합니다.

Mladen, 특히 당신이 자유롭게 읽을 수 있기 때문에 러시아어로 대답하는 것이 더 쉽습니다.

다음은 이 문제에 대한 나의 해결책입니다. init() 코드에는 ReInit() 함수가 포함되어 있는데, 이 함수는 타임프레임이나 기호를 변경할 때 값을 복원해야 하는 전역 변수 를 다시 초기화합니다.

 //-----------------------------------------------------------------------------
int init(){
   int Error;
   if ( МинНаклонТренда<Zero ) МинНаклонТренда= 0 ;
   if ( МинНаклонТренда-МаксНаклонТренда>Zero ) МаксНаклонТренда=МинНаклонТренда;
   if ( БарОкончания< 1 ) БарОкончания= 1 ;
   if ( МинБазовыйПериод< 1 ) МинБазовыйПериод= 1 ;
   if ( МаксБазовыйПериод<МинБазовыйПериод ) МаксБазовыйПериод=МинБазовыйПериод;
   if ( БарНачала<МинБазовыйПериод+БарОкончания ) БарНачала=МинБазовыйПериод+БарОкончания;
   if ( БарНачала> Bars - 1 ){
       if ( Bars >МинБазовыйПериод+БарОкончания ) БарНачала= Bars - 1 ;
       else Alert ( "Неразрешимая ошибка: история(" + Bars + ")<=активация(" +МинБазовыйПериод
                + ")+окончание(" +БарОкончания+ ")" );
   }
   if ( ТолщинаТрендовой< 1 ) ТолщинаТрендовой= 1 ;
   if ( ТолщинаТрендовой> 5 ) ТолщинаТрендовой= 5 ;
   if ( РазмерИндикатораТиков< 1 ) РазмерИндикатораТиков= 1 ;
   if ( РазмерИндикатораТиков> 5 ) РазмерИндикатораТиков= 5 ;
   if ( СдвигИндикатораТиков< 3 ) СдвигИндикатораТиков= 3 ;
   if ( СдвигИндикатораТиков> 100 ) СдвигИндикатораТиков= 100 ;
   if ( ПоказыватьВсе ) Visibility= 0 ; else Visibility=EMPTY;
   LastBar     =БарОкончания;
   ЦветЛиний[ 0 ]=ЦветПоддержки;
   ЦветЛиний[ 1 ]=ЦветСопротивления;
   ЦветХорды[ 0 ]=ЦветВосходящейХорды;
   ЦветХорды[ 1 ]=ЦветНисходящейХорды;
   Цвет 123 [ 0 ]  =Цвет 123 ВТ;
   Цвет 123 [ 1 ]  =Цвет 123 НТ;
   NewTime     = 0 ;
   ReInit();                                       // Повторная инициализация
   ClearScreen();                                   // Очистить экран
   Error=fVLine( "StartLine" , "Старт" , 0 ,БарНачала, 0 , 0 , 0 , 0 , 0 ,ЦветВертикалей);
   Error=fVLine( "DeadLine" , "Пуск" , 0 ,БарОкончания, 0 , 0 , 0 , 0 , 0 ,ЦветВертикалей);
   DeadLine= TimeCurrent ();
   if ( СтатическийРежим ){
       if ( РежимОтладки ) РежимРаботы= " Отладка " ; else РежимРаботы= " " ;
      РежимРаботы=РежимРаботы+ "Статический режим Пауза " +ПериодИмитацииТиков+ " мс" ;
      МоделироватьДинамику= false ;
       //РежимОтладки=false;
       while ( true ){                               // Бесконечный цикл
         ReInit();                                 // Повторная инициализация
         start();                                   // Имитация тика
         Sleep (ПериодИмитацииТиков);               // Не работает в индикаторах
   }  }
   else {
       if ( МоделироватьДинамику ){
         РежимРаботы= " Режим имитации динамики Размерность " +DoubleToStr( 0.5 *БарНачала*БарНачала, 0 );
         Print ( "      " +Version+РежимРаботы+ " История: " +(БарНачала)+ " баров с " +TimeToStr(Time[БарНачала]));
         LastBar=БарНачала;
         while ( LastBar>БарОкончания ){             // Перебор всех баров истории
            LastBar--;
            start();                               // Имитация тика
         }
         МоделироватьДинамику= false ;
         Print ( "      Режим имитации динамики отключен!" );
   }  }
   if ( РежимОтладки ) РежимРаботы= " Отладка " ; else РежимРаботы= " " ;
   РежимРаботы=РежимРаботы+ "Динамический режим" ;
   Print ( "      " +Version+РежимРаботы+ " История: " +(БарНачала)+ " баров с " +TimeToStr(Time[БарНачала]));
   if ( !ПечататьПредупреждения ) Print ( "Печать предупреждений запрещена!" );
   if ( РежимОтладки ) start();                     // Имитация тика
   return ( 0 );
}
//-----------------------------------------------------------------------------
// Повторная инициализация глобальных переменных и массивов
void ReInit(){
   StartTime[ 0 ]   =Time[БарНачала];
   StartTime[ 1 ]   =Time[БарНачала];
   Groups[ 0 ]      = 0 ;
   Groups[ 1 ]      = 0 ;
   OldMG[ 0 ]       = 0 ;
   OldMG[ 1 ]       = 0 ;
   MainGroup[ 0 ]   = 0 ;
   MainGroup[ 1 ]   = 0 ;
   QualityMax[ 0 ]  = 0 ;
   QualityMax[ 1 ]  = 0 ;
   OldStopLine    = 0 ;
   return ;
}
//-----------------------------------------------------------------------------