라이브러리: 전문가 - 페이지 12

 
전문가 어드바이저에 DLL 로딩이 필요한 경우 이 확인란 자체가 선택되지 않나요? 전문가 모드와 관련된 것 같습니다. 인터페이스가 보이지 않습니다. 코드나 템플릿을 직접 편집해야 하나요?
 
traveller00:
전문가 어드바이저에 DLL 로딩이 필요한 경우 이 확인란 자체가 선택되지 않나요? 전문가 모드와 관련된 것 같습니다. 인터페이스가 보이지 않습니다. 코드나 템플릿을 직접 편집해야 하나요?

위에 DLL을 사용한 예가 있습니다.

 

Parameters 메서드 반환 코드의 의미를 명확히 하고 싶습니다. 현재 템플릿이 포함된 문자열을 수신하는 데 오류가 발생하면 메서드는 0을 반환합니다. 이는 0이 오류를 의미한다고 가정합니다.

다른 모든 경우에는 반환값이 문자열입니다:

Res = (int)EXPERT::StringBetween(Str, EXPERT_FLAGS, STRING_END);

즉, 템플릿에서 전문가 모드의 값이 반환되며, 이는 법적으로 0과 같을 수 있습니다. EXPERT는 다른 프로젝트, 특히 Tester에서 이러한 방식으로 사용됩니다:

void OnTimerReal()
{
  ...
  if ((this.Symb += BeginTick) && EXPERT::Parameters(0, Params, Names))
  {
    ... открытие рабочего чарта
  }
}

결과적으로 메서드가 0을 반환하면 Tester가 작동하지 않습니다. 왜 그럴까요? 실제 거래 플래그가 재설정되었다고 해서 테스트를 금지해야 한다는 의미는 아닙니다. 게다가 이 경우 Tester는 조용히 아무것도 하지 않습니다.

 
Stanislav Korotky:

Parameters 메서드 반환 코드의 의미를 명확히 하고 싶습니다. 현재 템플릿이 포함된 문자열을 수신하는 데 오류가 발생하면 메서드는 0을 반환합니다. 이는 0이 오류를 의미한다고 가정합니다.

처음 게시된 이후 반환 값이 변경되었습니다. 따라서 지금까지 반환 값은 오류가 있는지 여부에 대해 아무 것도 알려주지 않는 것으로 밝혀졌습니다.

다른 모든 경우의 반환 값은 문자열입니다:

즉, 템플릿의 전문가 모드 값이 반환되며, 법적으로 0과 같을 수 있습니다. 다른 프로젝트, 특히 테스터에서는 EXPERT가 이런 식으로 사용됩니다:

결과적으로 메서드가 0을 반환하면 Tester가 작동하지 않습니다. 왜 그럴까요? 실제 거래 플래그가 재설정되었다고 해서 테스트를 금지해야 한다는 의미는 아닙니다. 특히 이 경우 테스터는 조용히 아무것도 하지 않습니다.

인용 한 코드에 따르면 실제로 자동 거래가 비활성화되면 작동하지 않습니다. 실수인지 고의로 한 것인지 기억이 나지 않습니다. 아마도 DLL을 연결할 수 있도록 의도적으로 수행되었을 가능성이 높습니다.


ZЫ 성경을 업데이트해야 할 것 같습니다. 시퀀스와의 공유에 대한 강력한 트위스트가 있습니다. 이 기능은 저에게만 필요하기 때문에 업데이트 우선 순위가 아닙니다.

 

무한 루프 감지 구조가 작동한 유일한 경우입니다.

ME      3       15:22:12.123    Message Endless loop:
KS      3       15:22:12.123    Message Expert.mqh
IP      3       15:22:12.123    Message 169
DG      3       15:22:12.123    Message bool EXPERT::TemplateApply(const long,const string&,const bool)
FQ      3       15:22:12.123    Message Condition: !::IsStopped()&&::ChartGetInteger(Chart_ID,CHART_COLOR_STOP_LEVEL,0,Value)&&(!(bool)((int)Value>>24))


이 시점에서 Expert.mqh에서 발생했습니다.

      while (_CS(!::IsStopped() && ::ChartGetInteger(Chart_ID, CHART_COLOR_STOP_LEVEL, 0, Value) && (!(bool)((int)Value >> 24))))
        ::Sleep(1); // https://www.mql5.com/ru/forum/170952/page190#comment_18830346


Expert.mqh를 매일 적극적으로 사용하지만 이런 문제는 처음 겪었습니다. 분명 매우 드문 상황인 것 같습니다. 명심하세요.

 
좋은 작업이지만 지금은 기본 프리셋으로 전문가를 로드할 것 같은데요? 선택한 전문가에 대한 SET 파일을 로드할 수 있다면 좋을 것 같습니다.
 

안녕하세요, EXPER.mqh는 훌륭합니다.

1. EXPERT::Run(....)으로 개설한 EA의 "Algo trading"을 활성화하려면 어떻게 해야 하나요?

2. 2019 버전을 사용하고 있습니다. 더 최신 버전이 있나요?

 
upinsa #:

1. EXPERT::Run(....)으로 개설한 EA의 "Algo 거래"를 활성화하려면 어떻게 해야 하나요?

이 글을 읽어보세요.

2. 2019 버전을 사용하고 있습니다. 더 최신 버전이 있나요?

최신 버전입니다.


 
static bool GetInputNames( MqlParam &Parameters[], string &InputNames[] )
  {
    const int Size = ::ArraySize(Parameters);
    bool Res = (Size > 1);

    if (Res)
    {
      ::ArrayResize(InputNames, Size - 1);

      for (int i = 1; (i < Size) && Res; i++)
      {
        InputNames[i - 1] = EXPERT::GetInputName(Parameters[i]);
        Res &= (InputNames[i - 1] != NULL);
      }
    }

    return(Res);
  }

입력 그룹 "【라벨1】";

이 상황은 고려되지 않은 것 같습니다. 매개 변수가 그룹인 경우 특정 값이 없으며 수신된 값은 null이 되므로 그룹 뒤의 매개 변수는 수신되지 않습니다.

 
hini #:

입력 그룹 "【라벨1】";

이 상황은 고려되지 않은 것 같습니다. 매개 변수가 그룹인 경우 특정 값이 없으며 수신된 값은 null이 되므로 그룹 뒤의 매개 변수는 수신되지 않습니다.

문제가 있는 경우 재현할 수 있는 mq5 파일을 준비해 주세요.