[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 5. - 페이지 301

 
laveosa :

나는 모든 것을 정확히 이렇게 했고 한 번 이상 모든 것이 정확히 이 구멍입니다.
그런 다음 집에서 Cheburashka를 찾으십시오! 확실히 그의 장난! ;)
 
laveosa., 따옴표로 묶은 가져오기 를 통해 어제 eurusdm1 다운로드까지의 기록을 유지합니다.
파일:
eurusd1.zip  548 kb
 
여기 흥미로운 상황이 있습니다. .시간 프레임을 변경하면 값이 변경되지만 되돌릴 가치가 있고 숫자는 동일합니다. 이 문제를 해결할 수 있는 방법을 알려주세요.
파일:
 

전문가를 위한 질문!

나는 종종 내 전문가에게 자동차를 가지고 있습니다. 다음과 같이 반복되는 순간으로 코드를 "막히지" 않기 위해:

 double maFast = iMA ( NULL , 0 , i_maFastPeriod, 0 , i_maMethod, i_maPrice, index);
double maSlow = iMA ( NULL , 0 , i_maSlowPeriod, 0 , i_maMethod, i_maPrice, index);

따라서 반복이 순서대로 될 수 있습니다. 별도의 함수를 작성하여 이것을 없애고자 생각했습니다.

시작은 이렇습니다.

 //+-------------------------------------------------------------------------------------+
//| Получаем машку с заданными параметрами                                              |
//+-------------------------------------------------------------------------------------+
double GetMA( double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index)
{
   switch (typeOfMA)
   {
       case 1 :       return ( iMA ( NULL , i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex));
       case 2 :       return ( iMA ( NULL , i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex));
       case 3 :       return ( iMA ( NULL , i_filtrMATF, i_filtrMAPeriod, i_filtrMAShift, i_filtrMAMethod, i_filtrMAApplied, i_filtrMAIndex));
   }
}
//+-------------------------------------------------------------------------------------+
//| Получаем сигнал от скользящих средних                                               |
//+-------------------------------------------------------------------------------------+
int GetStateOfMA()
{
   if (GetMA( 1 , i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex) > 
      GetMA( 2 , i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex))
       return (CROSS_UP);
}

예를 들어 fastMAslowMA 와 같이 전역 수준에서 자동차에 대한 변수를 선언하고 함수를 통해 참조로 반환할 수 있습니다.

GetMA( double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index)

다음과 같이 나옵니다.

 //+-------------------------------------------------------------------------------------+
//| Получаем машку с заданными параметрами                                              |
//+-------------------------------------------------------------------------------------+
double GetMA( double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index, double & fastMA, double & slowMA)
{
   switch (typeOfMA)
   {
       case 1 :       return ( iMA ( NULL , i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex));
       case 2 :       return ( iMA ( NULL , i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex));
       case 3 :       return ( iMA ( NULL , i_filtrMATF, i_filtrMAPeriod, i_filtrMAShift, i_filtrMAMethod, i_filtrMAApplied, i_filtrMAIndex));
   }
}
//+-------------------------------------------------------------------------------------+
//| Получаем сигнал от скользящих средних                                               |
//+-------------------------------------------------------------------------------------+
int GetStateOfMA()
{
   GetMA( double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index, double & fastMA, double & slowMA);
   if (fastMA > slowMA)
       return (CROSS_UP);
   if (fastMA < slowMA)
       return (CROSS_DN);
   return (CROSS_NO);
}

질문은 ~이야:

나는 switch 문이 느리다는 것을 어디선가 들었거나 읽었습니다. 이 경우 EA 전체의 성능에 영향을 미치지 않습니까? 그리고 일반적으로 얼마나 느립니까?

또한 여기에는 몇 가지 매개 변수가 있습니다. 이것이 전문가에게 브레이크가 되지 않을까요?

글을 쓰면서 동시에 성능에 대해 생각하다 보니 나 자신이 교육을 받은 프로그래머가 아니라서 스스로 이해하기가 쉽지가 않더군요...

 

Victor, 함수를 호출하는 것은 switch 보다 훨씬 더 큰 드래그입니다. 속도를 직접 확인할 수 있습니다. 루프를 사용하여 테스트 코드를 작성합니다. 어디에서 코드를 확인합니까? 입구에서 시간을 확인하십시오. 그런 다음 출력 시간과 비교합니다.

switch 문 은 가장 빠른 문 중 하나입니다. 조건을 반복하는 것보다 빠릅니다.

스위치 는 예외 시 기본값과 함께 사용해야 합니다. 따라서 잘못된 조건의 경우 코드가 작동하지 않는 이유를 알 수 있습니다.

 

흠. 그리고 내가 알기로는 설명서에 따르면 case 상수를 변수로 사용할 수 없습니다. 그것은 어떤 대상 상수, 기호 상수 또는 기호 표현식을 작성합니다.

문자가 문자열 유형 ess-그러나 즉. 1자(컴파일러가 1자 이상을 맹세하는 경우) 또는 숫자.

다른 건 없습니다.
그리고 일부 대상 상수, 기호 표현식 및 기호 상수가 작성됩니다.

 

실제 예제와 함께 터미널 전역 변수 사용에 대해 어디에서 읽을 수 있습니까? 보다 구체적으로 말하자면, 각 Expert Advisor가 예금의 자신의 몫만 거래하고 그 이익/인출이 다른 Expert Advisor의 MM에 영향을 미치지 않도록 하고 싶습니다.

 
Ekburg :

여보세요

터미널에서 Expert Advisor를 시작할 때 "시간 초과에 의한 종료" 오류의 원인과 이 문제를 해결하는 방법을 알려주십시오.

 
[quote=Roman.]주방을 바꾸세요.[/quote]사실상 부엌은 부엌과 아무 관련이 없는 것 같습니다. EA의 로그에 판매 주문이 있습니다. 물론 브로커가 다운로드한 MT4 배포판의 코드를 변경 하고 트랜잭션 방향을 수정했다고 가정할 수 있지만 너무 뻔뻔합니다. kmk.
 
여기에 전체 코드를 복사하지 않고 프로그램 코드를 첨부할 수 있습니까? 관리자는 어디를 보고 있나요?