기고글 토론 "MQL4에서 MQL5로 이전하기" - 페이지 10

 
-Aleks-:

함수 사용 방법을 이해할 수 없습니다.

컴파일러가 경고합니다.

'OBJPROP_TIME1' - 선언되지 않은 식별자 TZ_Sky_and_Ground_V_04.mq5 2891 12
'OBJPROP_TIME1' - 상수 표현식 필요 TZ_Sky_and_Ground_V_04.mq5 2891 12
'OBJPROP_PRICE1' - 선언되지 않은 식별자 TZ_Sky_and_Ground_V_04.mq5 2893 12
'OBJPROP_PRICE1' - 상수 표현식 필요 TZ_Sky_and_Ground_V_04.mq5 2893 12
'OBJPROP_TIME2' - 선언되지 않은 식별자 TZ_Sky_and_Ground_V_04.mq5 2895 12
'OBJPROP_TIME2' - 상수 표현 필요 TZ_Sky_and_Ground_V_04.mq5 2895 12
'OBJPROP_PRICE2' - 선언되지 않은 식별자 TZ_Sky_and_Ground_V_04.mq5 2897 12
'OBJPROP_PRICE2' - 상수 표현식 필요 TZ_Sky_and_Ground_V_04.mq5 2897 12
'OBJPROP_TIME3' - 선언되지 않은 식별자 TZ_Sky_and_Ground_V_04.mq5 2899 12
'OBJPROP_TIME3' - 상수 표현식 필요 TZ_Sky_and_Ground_V_04.mq5 2899 12
'OBJPROP_PRICE3' - 선언되지 않은 식별자 TZ_Sky_and_Ground_V_04.mq5 2901 12
'OBJPROP_PRICE3' - 상수 표현식 필요 TZ_Sky_and_Ground_V_04.mq5 2901 12

오류가 발생한 줄에서 ObjectSetInteger(...)를 ObjectSetMQL4(...) 로 변경합니다.

일반적으로 다시 작성하는 것이 더 쉽고 문자 그대로 2 분의 시간으로 변경하는 것이 매우 빠릅니다.

 
Vitaly Muzichenko:

오류가 발생하는 줄에서 ObjectSetInteger(...)를 ObjectSetMQL4(...) 로 변경하세요.

일반적으로 다시 작성하는 것이 더 쉽고, 거기에서 변경하는 것이 매우 빠르며, 말 그대로 2분 정도 걸립니다.

이해가 안 되거나 작동하지 않습니다.

나는 그런 기능이 있었다


//+------------------------------------------------------------------+
//|화면에 정보를 표시하는 기능|
//+------------------------------------------------------------------+
void Label(string _name,int _window,int _x,int _y,string _text,int _font,color _color,int corner)
  {
   ObjectDelete(0,_name);
   ObjectCreate(0,_name,OBJ_LABEL,_window,0,0);
   ObjectSet(_name,OBJPROP_CORNER,corner);
   ObjectSet(_name,OBJPROP_XDISTANCE,_x);
   ObjectSet(_name,OBJPROP_YDISTANCE,_y);
   ObjectSetText(_name,_text,_font,"Arial",_color);
  }

MQL5에서 작동하도록 하기 위해 다음 문서에서 추가했습니다.


  bool ObjectSetText(string name, string text, int font_size,string font="", color text_color=CLR_NONE)
  {
   int tmpObjType=(int)ObjectGetInteger(0,name,OBJPROP_TYPE);
   if(tmpObjType!=OBJ_LABEL && tmpObjType!=OBJ_TEXT) return(false);
   if(StringLen(text)>0 && font_size>0)
     {
      if(ObjectSetString(0,name,OBJPROP_TEXT,text)==true
         && ObjectSetInteger(0,name,OBJPROP_FONTSIZE,font_size)==true)
        {
         if((StringLen(font)>0)
            && ObjectSetString(0,name,OBJPROP_FONT,font)==false)
            return(false);
         if(text_color>-1
            && ObjectSetInteger(0,name,OBJPROP_COLOR,text_color)==false)
            return(false);
         return(true);
        }
      return(false);
     }
   return(false);
  }
  
bool ObjectSet(string name, int index, double value)
  {
   switch(index)
     {
      case OBJPROP_TIME1:
         ObjectSetInteger(0,name,OBJPROP_TIME,(int)value);return(true);
      case OBJPROP_PRICE1:
         ObjectSetDouble(0,name,OBJPROP_PRICE,value);return(true);
      case OBJPROP_TIME2:
         ObjectSetInteger(0,name,OBJPROP_TIME,1,(int)value);return(true);
      case OBJPROP_PRICE2:
         ObjectSetDouble(0,name,OBJPROP_PRICE,1,value);return(true);
      case OBJPROP_TIME3:
         ObjectSetInteger(0,name,OBJPROP_TIME,2,(int)value);return(true);
      case OBJPROP_PRICE3:
         ObjectSetDouble(0,name,OBJPROP_PRICE,2,value);return(true);
      case OBJPROP_COLOR:
         ObjectSetInteger(0,name,OBJPROP_COLOR,(int)value);return(true);
      case OBJPROP_STYLE:
         ObjectSetInteger(0,name,OBJPROP_STYLE,(int)value);return(true);
      case OBJPROP_WIDTH:
         ObjectSetInteger(0,name,OBJPROP_WIDTH,(int)value);return(true);
      case OBJPROP_BACK:
         ObjectSetInteger(0,name,OBJPROP_BACK,(int)value);return(true);
      case OBJPROP_RAY:
         ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,(int)value);return(true);
      case OBJPROP_ELLIPSE:
         ObjectSetInteger(0,name,OBJPROP_ELLIPSE,(int)value);return(true);
      case OBJPROP_SCALE:
         ObjectSetDouble(0,name,OBJPROP_SCALE,value);return(true);
      case OBJPROP_ANGLE:
         ObjectSetDouble(0,name,OBJPROP_ANGLE,value);return(true);
      case OBJPROP_ARROWCODE:
         ObjectSetInteger(0,name,OBJPROP_ARROWCODE,(int)value);return(true);
      case OBJPROP_TIMEFRAMES:
         ObjectSetInteger(0,name,OBJPROP_TIMEFRAMES,(int)value);return(true);
      case OBJPROP_DEVIATION:
         ObjectSetDouble(0,name,OBJPROP_DEVIATION,value);return(true);
      case OBJPROP_FONTSIZE:
         ObjectSetInteger(0,name,OBJPROP_FONTSIZE,(int)value);return(true);
      case OBJPROP_CORNER:
         ObjectSetInteger(0,name,OBJPROP_CORNER,(int)value);return(true);
      case OBJPROP_XDISTANCE:
         ObjectSetInteger(0,name,OBJPROP_XDISTANCE,(int)value);return(true);
      case OBJPROP_YDISTANCE:
         ObjectSetInteger(0,name,OBJPROP_YDISTANCE,(int)value);return(true);
      case OBJPROP_FIBOLEVELS:
         ObjectSetInteger(0,name,OBJPROP_LEVELS,(int)value);return(true);
      case OBJPROP_LEVELCOLOR:
         ObjectSetInteger(0,name,OBJPROP_LEVELCOLOR,(int)value);return(true);
      case OBJPROP_LEVELSTYLE:
         ObjectSetInteger(0,name,OBJPROP_LEVELSTYLE,(int)value);return(true);
      case OBJPROP_LEVELWIDTH:
         ObjectSetInteger(0,name,OBJPROP_LEVELWIDTH,(int)value);return(true);

      default: return(false);
     }
   return(false);
  }
위에서 설명한 오류가 발생했습니다.
 
-Aleks-:

이해가 안 되거나 작동하지 않습니다.

이 기능이 있었습니다.


MQL5에서 작동하기 위해 문서에서 추가했습니다.


그리고 위에서 설명한 오류가 발생했습니다.

이러한 구조는 2013 년에 변기에 버려 졌어야했습니다.

   ObjectSet(_name,OBJPROP_CORNER,corner);
   ObjectSet(_name,OBJPROP_XDISTANCE,_x);
   ObjectSet(_name,OBJPROP_YDISTANCE,_y);
   ObjectSetText(_name,_text,_font,"Arial",_color);


사용:

ObjectSetDouble(...)
ObjectSetInteger(...)
 
Vitaly Muzichenko:

2013년에 변기에 버려졌어야 할 디자인입니다.

사용하세요:

고마워요. 제 경우에는 ObjectSetInteger 모든 곳에 넣어야 한다는 것을 이해했습니다.

 
-Aleks-:

감사합니다. 제 경우에는 모든 곳에 ObjectSetInteger 를 넣어야 한다는 것을 이해합니다.

물론입니다.

도움말은 Integer가 필요한 곳과 Dooble이 필요한 곳에 모든 것을 완벽하게 잘 설명합니다.

 
Vitaly Muzichenko:

당연하죠.

도움말은 정수가 필요한 부분과 두블이 필요한 부분을 모두 완벽하게 잘 설명해줍니다.

저는 이전에 객체 작업에 대해 잘 몰랐기 때문에 도움말과 약간 혼란스러웠고 함수....

 
-Aleks-:

저는 이전에 객체 작업에 대해 잘 몰랐기 때문에 도움을 받는 것이 어리석었지만, 기능을 빌려왔습니다....

새로운 지점과 고문으로부터 빌리십시오. 2007년의 지점에서 빌리지 마세요)

 
Vitaly Muzichenko:

신규 지점 및 어드바이저로부터 빌리세요. 2007년 지점에서 빌리지 마세요.)

이 차입은 2013년에 한 지점에서 다른 지점으로 이동한 것입니다...

 

iFractalsMQL4로 작업하는 방법을 알려주세요.

   for (int i=0; i<np; i++) //문자 주기
   {
     m_symbols[i].Refresh();
   
               for (int ii=2;ii<=3;ii++)   //첫 번째 프랙탈로 순환
               {
                  double dF=0;
                  int TMODE=1;
                  dF = iFractalsMQL4(Pairs[i],PERIOD_D1,TMODE,ii);
                  Print("i  ",i,"  ii  ",ii,"  Pairs[i] ",Pairs[i],"  TMODE  ",TMODE," dF ",dF);
               }
   }

결과

2017.08.10 17:28:23.458 TwoFingersSymbolsExp_v1.03_my_pa (_DJI,M5) i 0 ii 2 Pairs[i] AUDCAD_i TMODE 1 dF 1.00731
2017.08.10 17:28:23.458 TwoFingersSymbolsExp_v1.03_my_pa (_DJI,M5) i 0 ii 3 Pairs[i] AUDCAD_i TMODE 1 dF 1.797693134862316e+308
2017.08.10 17:28:23.458 TwoFingersSymbolsExp_v1.03_my_pa (_DJI,M5) i 1 ii 2 Pairs[i] AUDCHF_i TMODE 1 dF 1.797693134862316e+308 ...

즉, iFractalsMQL4는 첫 번째 호출에서는 작동하지만 그 이후에는 작동하지 않습니다.

CSymbolInfo m_symbols[]; // 심볼 정보 객체

m_symbols[i].Refresh();
가 올바르지 않습니다. 어떻게 해야 하나요?

 

감사합니다,

이 글에 대한 여러분의 노고가 큰 도움이 되었습니다 :)