MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1011

 
Sergey Likho :

알고리즘을 작성하는 가장 좋은 방법은 무엇입니까?


일:

하나의 Expert Advisor는 다른 차트에서 시작됩니다.

잔고, 자기자본 등에 대한 계정에 대한 정보 는 분 단위로 별도의 파일로 작성해야 합니다.

이제 모든 조언자가 모든 정보를 하나의 파일에 쓰는 것으로 나타났습니다. 결과적으로 많은 중복 레코드가 나타납니다.

하나의 봇만 레코드 파일을 만들 수 있도록 어떤 독창적인 솔루션을 생각해 낼 수 있습니까? (예를 들어 삭제된 경우 다른 봇이 항목을 만들기 시작했습니다.)

전문가 이름 또는 다른 이름으로 OnInit()에서 그래픽 개체를 만듭니다. 아마도 전문가가 이미 개체를 만들고 있을 수 있습니다. 그런 다음 사용할 수 있습니다. "MyEA": ObjectCreate (0, "MyEA" , OBJ_... ,...))

파일이 기록되는 OnTick()에서 바로 이 레이블이 있는 첫 번째 ID 차트를 확인하십시오. = 이것은 이것이 터미널에 설치된 첫 번째 Expert Advisor임을 의미하므로 더 이상 관심이 없습니다.

우리는 반복을 사용합니다:

 string ChartGetSymb()
  {
   string symb= "" ;
   long chartID= ChartFirst ();
   while (chartID!=- 1 ) 
    {
       if ( ObjectGetString (chartID, "MyEA" , OBJPROP_NAME )== "MyEA" )
       {
        symb= ChartSymbol (chartID);
         break ;
       }
      chartID= ChartNext (chartID);
     }
   return (symb);
  }

Expert Advisor가 설치된 첫 번째 사용 가능한 차트/기호를 받았습니다.

또한 파일에 쓰기 전에 이것이 첫 번째 Expert Advisor인지 비교합니다.

 if (ChartGetSymb() == Symbol ()) {
  записываем в файл, если соответствует символу, иначе не записываем
}


디자인이 쉽지는 않지만 전역변수에 써서 디스크를 뽑는 것보다 낫다

 
Artyom Trishkin :

표준 MA 가져오기, 버퍼 데이터 유형 변경, 컴파일 및 터미널 데이터 창에서 확인(Ctrl+D)

터미널에 표시되지 않기 때문에 도움이 되지 않습니다. 그러나 INDICATOR_CALCULATIONS로 선언된 High 및 Low에 대한 두 개의 추가 버퍼가 있는 ZigZag 표시기를 확인했습니다. 터미널에 표시되지는 않지만 프로그램에서도 가져옵니다. 암튼 조언 감사합니다.
 
Sergey Likho :

ChartID()가 에러와 함께 터미널의 전역 변수에 쓰여집니다. 무슨 말도 안되는 소리?


다음 코드를 시도해 보세요.


이 코드를 실행한 결과

 2019.11 . 29 15 : 22 : 07.453 Script 00 EURUSD,H1: removed
2019.11 . 29 15 : 22 : 07.453 00 EURUSD,H1: uninit reason 0
2019.11 . 29 15 : 22 : 07.453 00 EURUSD,H1: GVAR id: 131992895281608496 GV_id: 131992895281608496
2019.11 . 29 15 : 22 : 07.453 00 EURUSD,H1: initialized
2019.11 . 29 15 : 22 : 07.433 Script Test\ 00 EURUSD,H1: loaded successfully
 
Vitaly Muzichenko :

전문가 이름 또는 다른 이름으로 OnInit()에서 그래픽 개체를 만듭니다. 아마도 전문가가 이미 개체를 만들고 있을 수 있습니다. 그런 다음 사용할 수 있습니다. "MyEA": ObjectCreate (0, "MyEA" , OBJ_... ,...))

파일이 기록되는 OnTick()에서 바로 이 레이블이 있는 첫 번째 ID 차트를 확인하십시오. = 이것은 이것이 터미널에 설치된 첫 번째 Expert Advisor임을 의미하므로 더 이상 관심이 없습니다.

우리는 반복을 사용합니다:


Expert Advisor가 설치된 첫 번째 사용 가능한 차트/기호를 받았습니다.

또한 파일에 쓰기 전에 이것이 첫 번째 Expert Advisor인지 비교합니다.


디자인이 쉽지는 않지만 전역변수에 써서 디스크를 뽑는 것보다 낫다

네 좋은 생각입니다.

덕분에.


그렇다면 질문은 다음과 같습니다. 어드바이저가 삭제되고(예: 오류로 인해) 개체가 남아 있으면 어떻게 될까요? 차트가 완전히 닫힌 경우 "주" Expert Advisor를 어떻게든 다시 할당해야 합니까?

 
Sergey Likho :

네 좋은 생각입니다.

덕분에.


그렇다면 질문은 다음과 같습니다. 어드바이저가 삭제되고(예: 오류로 인해) 개체가 남아 있으면 어떻게 될까요? 차트가 완전히 닫힌 경우 "주" Expert Advisor를 어떻게든 다시 할당해야 합니까?

단일 사례의 오류 - Expert Advisor가 긴급 상황에서 개체를 떠났지만 내 기억에 MT4에서는 그런 것이 기억나지 않습니다. 다른 모든 경우에는 주 전문가가 재배정되고 OnTik에서 확인이 진행되며 항상 현재 차트에 대한 검색이 있습니다.


추신: Expert Advisor에서 오류가 발생하고 차트에서 자체 제거되는 경우 OnDeInit()가 제공하는 내용을 확인하십시오. 간단히 확인할 수 있고 변수를 만들고 눈금을 세고 11번째 눈금에서 10/0을 나눌 수 있습니다.

OnDeInit()에서 Print를 넣고 초기화 해제 이유가 무엇인지 확인합니다. 그렇다면 이 이유/숫자로 차트에서 "MyEA" 개체를 삭제합니다.

t++;
if (t > 10 ) {
 int e = 10 ;
 e /= 0 ;
}

결과를 직접 확인할 시간이 없으므로 구독을 취소할 수 있습니다.

 
Vitaly Muzichenko :

전문가 이름 또는 다른 이름으로 OnInit()에서 그래픽 개체를 만듭니다. 아마도 전문가가 이미 개체를 만들고 있을 수 있습니다. 그런 다음 사용할 수 있습니다. "MyEA": ObjectCreate (0, "MyEA" , OBJ_... ,...))

파일이 기록되는 OnTick()에서 바로 이 레이블이 있는 첫 번째 ID 차트를 확인하십시오. = 이것은 이것이 터미널에 설치된 첫 번째 Expert Advisor임을 의미하므로 더 이상 관심이 없습니다.

우리는 반복을 사용합니다:


Expert Advisor가 설치된 첫 번째 사용 가능한 차트/기호를 받았습니다.

또한 파일에 쓰기 전에 이것이 첫 번째 Expert Advisor인지 비교합니다.


디자인이 쉽지는 않지만 전역변수에 써서 디스크를 뽑는 것보다 낫다

나는 당신이 틀렸다고 생각합니다. GV는 매번 디스크에 기록되지 않습니다. 그렇지 않으면 GV를 디스크에 강제로 쓰는 기능이 필요하지 않습니다.

 void    GlobalVariablesFlush ();
예, 모든 것 외에도 고문과 개체를 찾기 위해 모든 차트를 정렬하여 ... Vitaliy, 이것은 주석입니다 ...
 
Alexey Viktorov :

나는 당신이 틀렸다고 생각합니다. GV는 매번 디스크에 기록되지 않습니다 . 그렇지 않으면 GV를 디스크에 강제로 쓰는 기능이 필요하지 않습니다.

예, 모든 것 외에도 고문과 개체를 찾기 위해 모든 차트를 정렬하여 ... Vitaliy, 이것은 주석입니다 ...

작성하는 또 다른 방법: GlobalVariableSet ("GV",ID);

프로필 -> gvariables.dat


 
Vitaly Muzichenko :

작성하는 또 다른 방법: GlobalVariableSet ("GV",ID);

프로필 -> gvariables.dat


생성할 때는 예일 수 있지만 덮어쓸 때는 거기에 쓰는 애플리케이션을 비활성화하기 전에 확인해야 합니다. 그리고 나는 게으르다. 그래도 순전히 이론적으로 디스크에 기록될 때마다 위의 기능은 덜컥 거리는 소리에 불과합니다.

 
Sergey Likho :

이 방법으로는 할 수 없습니다.

폴더의 데이터를 동기화 하는 Windows용 프로그램을 찾으십시오. 그리고 새로운 단말에 어드바이저가 자동으로 복사되도록 설정합니다.

제가 알기로는 그런 프로그램이 있는데 파일로만 작동하는데 텍스트 문서라면 내용이 복사되지 않고 파일을 교체하지도 않고, 아마 정상적인 프로그램을 찾지 못했을 수도 있습니다. 개발자들이 로봇이나 전문가의 파일을 그릴 곳부터 경로를 지정하는 기능을 고려하지 않은 것이 아쉽고, 경로 지정은 평소대로 하면 되는 줄 알았는데 그게 전부였는데, 위에서 말씀하신 것처럼, 이건 불가능 해.

 
Seric29 :

제가 알기로는 그런 프로그램이 있는데 파일로만 작동하는데 텍스트 문서라면 내용이 복사되지 않고 파일을 교체하지도 않고, 아마 정상적인 프로그램을 찾지 못했을 수도 있습니다. 개발자들이 로봇이나 전문가의 파일을 받을 경로를 지정하는 기능을 고려하지 않은게 아쉽고, 경로 지정은 평소대로 하면 되는 줄 알았는데 그게 전부였는데, 위에서 말씀하신 것처럼, 이건 불가능 해.

이 메시지에서 "모든 터미널에는 공유 폴더가 있습니다."라는 문구에 주의하십시오.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

그렇다면 시장의 제품은 무엇에 붙어 있습니까?

세르게이 타볼린 , 2019.11.23 08:17

내가 설치 방법과 위치를 모른다고 진지하게 생각하십니까? )))

모든 터미널에는 공유 폴더가 있습니다.

시장에서 무료 지표를 다운로드했습니다. 그는 철에 붙어 있습니다.

그렇다면 왜 한 하드웨어에서는 한 터미널에서는 작동하지만 다른 터미널에서는 작동하지 않는 이유는 무엇입니까?

명백한 결론은 적어도 철뿐만 아니라 ...


완료 방법에 대한 정보를 찾아 이동하십시오. 폴더 연결이라고 합니다.