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

 

안녕하세요 여러분,

MQL5에서 객체 집합(객체명,OBJPROP_FIRSTLEVEL+레벨,값)을 사용하는 방법을 알고 계십니까? OBJPROP_FIRSTLEVEL을 검색하려고 했지만 MQL5에서 찾을 수 없습니다.

mql4:

void _SetFibLevel(문자열 objname, int level, double value, 문자열 description)

//+------------------------------------------------------------------+

{

오브젝트셋(오브젝트명,OBJPROP_FIRSTLEVEL+레벨,값);

ObjectSetFiboDescription(objname,level,description);

}

-----------------------------------

 
vietlh216:

MQL5에서 객체 집합(객체 이름,OBJPROP_FIRSTLEVEL+레벨,값)을 사용하는 방법을 알고 계십니까? OBJPROP_FIRSTLEVEL을 검색하려고 했지만 MQL5에서 찾을 수 없습니다.

mql4:

void _SetFibLevel(문자열 objname, int level, double value, 문자열 description)

//+------------------------------------------------------------------+

{

오브젝트셋(오브젝트명,OBJPROP_FIRSTLEVEL+레벨,값);

ObjectSetFiboDescription(objname,level,description);

}

-----------------------------------


이미 만들어진 솔루션은 제 블로그 포스팅을 참조하세요.

 
Stanislav Korotky:

이미 만들어진 솔루션은 제 블로그 포스팅을 참조하세요.


매우 유용합니다, 감사합니다 :)

 
Stanislav Korotky:

기성품 솔루션에 대한 내 블로그 게시물을 읽을 수 있습니다.


귀하의 솔루션에 대해 Stanislav Korotky에게 감사하지만 MQL5에 능숙하지 않으며 MQL5에서 사용하기 위해 OBJPROP_FIRSTLEVEL을 변환하는 방법을 여전히 모릅니다. 변환 할 동일한 개체 속성을 찾지 못했습니다.

동일한 객체 속성을 찾을 수 없습니다:

OBJPROP_FIRSTLEVEL+n

210+n

int

인덱스 n으로 피보나치 개체 레벨의 값을 설정/조회하는 정수 값. 인덱스 n은 0(레벨 수 -1)부터 가능하지만 31보다 크지 않아야 합니다.

하지만 MQL5에서는 찾을 수 없습니다.

예: MQL4 : ObjectSetFiboDescription(objname,level,description);->MQL5: ObjectSetString(0,objname,OBJPROP_LEVELTEXT,level,description);

MQL4: ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value); -> MQL5: ???

 
vietlh216:

당신의 해결책에 대한 Stanislav Korotky에게 감사하지만, 나는 MQL5에별로 좋지 않고 여전히 MQL5에서 사용하기 위해 OBJPROP_FIRSTLEVEL을 변환하는 방법을 모릅니다. 나는 그것을 변환 할 동일한 객체 속성을 찾지 못합니다.

동일한 객체 속성을 찾을 수 없습니다:

OBJPROP_FIRSTLEVEL+n

210+n

int

인덱스 n으로 피보나치 개체 레벨의 값을 설정/조회하는 정수 값. 인덱스 n은 0(레벨 수 -1)부터 가능하지만 31보다 크지 않아야 합니다.

하지만 MQL5에서는 찾을 수 없습니다.

예: MQL4 : ObjectSetFiboDescription(objname,level,description);->MQL5: ObjectSetString(0,objname,OBJPROP_LEVELTEXT,level,description);

MQL4: ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value); -> MQL5: ???


아, 찾았어요

ObjectSetDouble(0,objname,OBJPROP_LEVELVALUE,level,value);

^^

 
vietlh216:

아, 찾았어요

오브젝트셋더블(0,오브젝트명,오브젝트팝_레벨값,레벨,값);

^^


내 포함에 다음 부록을 추가해 볼 수 있습니다:

class OBJPROP_DOUBLE_BROKER_EXTENDED: public OBJPROP_DOUBLE_BROKER
{
  public:
    OBJPROP_DOUBLE_BROKER_EXTENDED(const ENUM_OBJECT_PROPERTY_DOUBLE property, const int modifier): OBJPROP_DOUBLE_BROKER(property, modifier)
    {
    }
    
    OBJPROP_DOUBLE_BROKER_EXTENDED *operator+(const int add)
    {
      i = add;
      return &this;
    }
};

OBJPROP_DOUBLE_BROKER_EXTENDED OBJPROP_FIRSTLEVEL(OBJPROP_LEVELVALUE, 0);

이 후에는 초기 MQL4 코드가 그대로 작동합니다.

 
Stanislav Korotky:

내 포함에 다음 부록을 추가해 보세요:

이 후에는 초기 MQL4 코드가 그대로 작동합니다.


이제 어떻게 작동하는지 이해했습니다. Stanislav Korotky에게 정말 감사합니다.

 

대체할 것을 제안합니다.

string StringConcatenate(..);

로 대체하는 것이 좋습니다.

string StringFormat("",..);

함수 모두 특정 조건에서 쉽게 바꿀 수 있는 문자열을 반환합니다!

 
Stanislav Korotky:

내 포함에 다음 부록을 추가해 보세요:

이 후에는 초기 MQL4 코드가 그대로 작동합니다.

ind4to5 인클루드에 OBJPROP_DOUBLE_BROKER_EXTENDED 클래스를 추가했는데 최신 메타에디터 빌드 1958에서처럼 작동하지 않는 것 같습니다. ObjectSetDouble(chart_ID,name,OBJPROP_PRICE1,price1)의 호출은 컴파일 오류 'ObjectSetDouble' - 함수 호출에 오버로드 중 하나를 적용할 수 없음 - 을 반환합니다. 어떤 아이디어 있으신가요?

 

오브젝트셋더블이 ind4to5에 포함되어 있지 않다는 것을 직접 알아냈습니다. mqh에 다음 코드를 추가하여 문제를 해결했습니다.

bool ObjectSetDouble(long chart_id, const string name, const OBJPROP_DOUBLE_BROKER &property, const double value)
{
  return ObjectSetDouble(chart_id, name, property.p, property.i, value);
}