오류, 버그, 질문 - 페이지 742

 
TheXpert :
그래서 공장을 만드십시오. 문제가 해결됩니다.

예, 지금 모든 것이 매우 간단하게 작동합니다. 물체는 다소 단단하게 구성되어 있습니다. 각 구성원의 가상 Load 메서드를 호출하고 차례로 동일한 작업을 수행합니다. 파일의 각 데이터 블록(객체) 시작 부분에 유형 식별자가 기록됩니다(로딩 중 제어용). 솝노와 모든 것. 일종의 공장처럼.

미리 알 수 없는 유형이 파일에 있을 수 있으면 팩토리를 수행하는 것이 좋습니다. 그런 다음 공장 및 유형 등록 테이블이 모두 필요합니다. 작업이 그렇게 일어나지 않는 동안 나는 종이 클립과 접착 테이프로 관리했습니다. :)

 

팬 건.

두 번째 앵커 포인트 가 미래에 있을 경우 각도가 변경됩니다.

또한 이 개체는 Ctrl 키를 누른 상태에서 복사하는 데 몇 가지 문제가 있습니다. 매우 자주 복사하지 않지만 원본을 끌어서 세 번째 또는 다섯 번째 시도에서 복사할 수 있습니다.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов - Документация по MQL5
 
MetaDriver :

큰 확인.

감사합니다. (일반 개발을 위해) 생성자의 시작 부분(선조 초기화 후)에서 가상 메서드 테이블을 초기화할 수 없는 이유를 물어볼 수 있습니다.

나는 이미 말했다. 생성자는 계층 구조에서 작동합니다. 조상이 생성되는 동안에는 자손에 대한 정보가 없습니다.
 
stringo :
나는 이미 말했다. 생성자는 계층 구조에서 작동합니다. 조상이 생성되는 동안에는 자손에 대한 정보가 없습니다.

나는 읽었다. 그리고 완벽하게 이해했습니다. 그리고 독해력을 바탕으로 질문을 던졌다. 사진으로 좀 더 명확하게 하도록 노력하겠습니다.

 class MySecond: MyFirst
{
   void   MySecond(MyArg arg): 
    MyFirst(arg)
   { // Можно код инициализации VMT добавлять здесь. Тогда не будет проблем с виртуальными вызовами.
     ...............
     MyVirtualFunc();
      ...........
     return;
   } // Сейчас код инициализации VMT добавляется здесь.

};

나는 모든 것을 이해 합니다. 이런 식으로 하는 것이 더 어렵습니다. 모든 종류의 미묘함이 있습니다. 마지막에 모든 암시적 초기화를 규정하는 것이 훨씬 더 쉽고 다재다능합니다(당신을 위해). 그리고 "아무도 이것을 하지 않는다", "예를 들어 C++에서는 이것이 받아들여지지 않는다" 등을 미리 믿고 있습니다.

그러나 우리(사용자)에게는 MySecond() 생성자를 MyFirst가 아닌 MySecond 클래스의 영역으로 간주하는 것이 훨씬 쉽고 보편적이며 합리적이고 논리적입니다. 무엇이 더 쉬운지 생각해 보십시오: 가상 함수 를 생성자에서 작동 가능하게 하거나 여러 곳에서 문서에 생성자 코드에 대한 중요하고 심각한 제한을 반영하고 그럼에도 불구하고 "가상 문제에 대한" 중요하고 심각한 초보자 메시지를 정기적으로 수신합니다. 서비스 데스크 및 생성자의 포럼에서. 이것은 또한 심각한 요소입니다. 곧 많은 신규 이민자가 예상됩니다..

 
struct SDaylyRange { double min, max, open, close;};
void OnStart ()
  {
//---
   SDaylyRange tmp, tmp2;
   tmp = 2 + 3 ? tmp : tmp2;
   if ( 2 + 3 ) tmp = tmp; else tmp = tmp2;
  }

구조가 있는 Tenar 연산자는 코드 생성 오류로 이어집니다(if로 교체하면 모든 것이 작동하지만).

 

정기적으로 오류 4401이 발생합니다.

ERR_HISTORY_NOT_FOUND

다음 표시기 코드

 datetime prevTime[ 22 ];
MqlRates _Rates[];

bool IsNewBar( ENUM_TIMEFRAMES period) {
   datetime currentTime[ 1 ];
   CopyTime ( Symbol (), period, 0 , 1 , currentTime);
   int _;
   switch (period) {
       case PERIOD_M1   : _= 1 ;
         break ;
       case PERIOD_M2   : _= 2 ;
         break ;
       case PERIOD_M3   : _= 3 ;
         break ;
       case PERIOD_M4   : _= 4 ;
         break ;
       case PERIOD_M5   : _= 5 ;
         break ;
       case PERIOD_M6   : _= 6 ;
         break ;
       case PERIOD_M10 : _= 7 ;
         break ;
       case PERIOD_M12 : _= 8 ;
         break ;
       case PERIOD_M15 : _= 9 ;
         break ;
       case PERIOD_M20 : _= 10 ;
         break ;
       case PERIOD_M30 : _= 11 ;
         break ;
       case PERIOD_H1   : _= 12 ;
         break ;
       case PERIOD_H2   : _= 13 ;
         break ;
       case PERIOD_H3   : _= 14 ;
         break ;
       case PERIOD_H4   : _= 15 ;
         break ;
       case PERIOD_H6   : _= 16 ;
         break ;
       case PERIOD_H8   : _= 17 ;
         break ;
       case PERIOD_H12 : _= 18 ;
         break ;
       case PERIOD_D1   : _= 19 ;
         break ;
       case PERIOD_W1   : _= 20 ;
         break ;
       case PERIOD_MN1 : _= 21 ;
         break ;  
       default          : _= 0 ;    
   } 
   if (currentTime[ 0 ]== prevTime[_]) return ( false );
   else {
      prevTime[_] = currentTime[ 0 ];
       return ( true );
   }
}

int OnInit ()
  {
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| 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[]) 
if (IsNewBar( _Period )) {
    int err = CopyRates ( Symbol (), PERIOD_D1 , 0 , 2 , _Rates);
    Print ( "Count:" , err);
    if (err < 1 ) {
       Print ( "ERROR:" , GetLastError ());
       Print ( "__Symbol:" , Symbol ());
       return (rates_total);
   }

}
return (rates_total); 
}

시작 시 즉시 오류가 발생합니다(D1에서 throw되지 않은 경우). 또는 터미널을 실행 하고 차트를 연 후 표시기를 켜면 오류가 발생합니다. 터미널이 닫혀 있지 않으면 시작 시 이러한 오류가 발생하지 않습니다.

그러나 잠시 후(2시간 ~ 2시간이면 충분) 오랫동안 열려 있던 차트에서도 오류가 발생하는 것을 볼 수 있습니다. (m30에서 시작)

 

안녕하세요 개발자 여러분!

최소한 경고가 발행되도록 MQL5 컴파일러를 변경할 수 있습니까?

코드의 그러한 잼에.

if(Flag_Exitl=true) {break;}


비교 조건이 여기에 올바르게 작성되지 않았으므로(==여야 함) 따라서 break가 항상 실행됩니다.

코드를 작성할 때 충돌을 줄이기 위해 컴파일러에서 이러한 상황을 어떻게 지정합니까(가능한 경우)?

(나는 그것이 작동하지 않을 것이라고 생각했고, 할당과 비교를 분리하는 것처럼 보입니다. 그러면 질문이 제거됩니다.)

 
Fia :

안녕하세요 개발자 여러분!

최소한 경고가 발행되도록 MQL5 컴파일러를 변경할 수 있습니까?

코드의 그러한 잼에.

if(Flag_Exitl=true) {break;}


비교 조건이 여기에 올바르게 작성되지 않았으므로(==여야 함) 따라서 break가 항상 실행됩니다.

코드를 작성할 때 충돌을 줄이기 위해 컴파일러에서 이러한 상황을 어떻게 지정합니까(가능한 경우)?

(나는 그것이 작동하지 않을 것이라고 생각했고, 할당과 비교를 분리하는 것처럼 보입니다. 그러면 질문이 제거됩니다.)

조건이 잘못 작성될 수 있지만 MQL5 구성에서는 허용됩니다.

코딩한 내용을 번역하고 Flag_Exitl 변수를 true로 설정한 다음 Flag_Exitl이 true인지 확인한 다음 중단합니다.

동작 순서는 정확히 동일합니다.

 

화면에 표시할 필요가 없는 버퍼로 작업하는 방법을 잘 모르겠습니다.

어떤 이유로 아래 코드는

1) 아무것도 그리지 않는다

2) 두 버퍼 모두 Label1이라고 합니다.

그 안에 있는 데이터는 "거짓말"이 필요하지만

 #property indicator_separate_window
#property indicator_buffers 6
#property indicator_plots   2

//--- plot Label1
#property indicator_label1   "Label1"
#property indicator_color1  clrRed, clrWhite
#property indicator_type1   DRAW_COLOR_LINE

//--- plot Label2
#property indicator_label2   "Label2"
#property indicator_color2  clrRed, clrGreen
#property indicator_type2   DRAW_COLOR_LINE

//--- indicator buffers
double          L1_1[];
double          L2_1[];
double          Colors_1[];

//--- indicator buffers
double          L1_2[];
double          L2_2[];
double          Colors_2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
{
   SetIndexBuffer ( 0 ,L1_1, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,L1_2, INDICATOR_DATA );
   SetIndexBuffer ( 2 , Colors_1, INDICATOR_COLOR_INDEX );
   SetIndexBuffer ( 3 , Colors_2, INDICATOR_COLOR_INDEX );
   SetIndexBuffer ( 4 , L2_1, INDICATOR_CALCULATIONS );
   SetIndexBuffer ( 5 , L2_2, INDICATOR_CALCULATIONS );
   return ( 0 );
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total, const int prev_calculated, const int begin, const double &price[])
{
   for ( int i = 0 ; i < rates_total; i++)
   {
      L1_1[i] = i;
      L1_2[i] = i + 1 ;
   }
   return (rates_total);
}
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования - Документация по MQL5
 

안녕하세요. 잘못된 곳에 게시할 수 있지만 올바른 방향으로 안내해 주시길 바랍니다. MT5용 Web API에 대한 질문은 어디로 가야 하나요? )

만일을 위해, 나는 상황을 설명하려고 노력할 것입니다. MT 매니저가 있고 php가 있는 WEB API... 러시아어로 계정이 생성되고 데이터가 전송되고 MT 매니저에도 표시되지만 문제가 지적되었습니다. MT 매니저의 데이터가 유니코드로 표시됩니다. ("04440430043c0438043b0438044f" - 이것은 사용자 이름의 모양입니다). 데이터를 보낼 때 아무 것도 인코딩되거나 디코딩되지 않고 모든 것이 MT 클라이언트에서 정상적으로 생성됩니다 ... 적어도 어느 방향으로 봐야합니까? (