다중통화 Expert Advisors 테스트 결과 - 페이지 6

 
tol64 :

왜이 두 번째 소스에 집착하는가?)))

내가 장점에 대해 대답하기 시작하면 대답은 " 텍스트와 별도로 취한 문구 "또는 " 나는 모든 것에 대해 항상 옳다고 생각하는 범주의 사람들이 아닙니다 ."와 같은 대답이 될 것입니다. 이것은 이미 분명합니다.

탁구의 경우 - 약간 이상한 위치. 당신은 특정 주제에 관심이 있고, 그들은 당신에게 대답하고 주요 질문을 하고, 당신은 그들에게 도전하거나 시작하기 시작합니다. 주제는 무엇보다도 당신 또는 누구에게 필요합니까? 아무도 당신을 위해 일하지 않을 것입니다. 개인적으로 나는 이러한 결과가 필요하지 않으며 귀하가 선택한 결과는 거의 관심이 없습니다. 주제 자체는 관심을 가질 만한 것 같았지만, 작가의 논쟁적인 열의는 그것을 유지하는 것이 타당한지에 대한 의문을 불러일으킨다.

 
marketeer :

왜 그래? 거기에 OnTimer 세 번째 숫자가 있습니다. 당신은 이미 이것에 대해 인용했습니다: 당신은 올바르게 테스트할 메소드를 구현하기만 하면 됩니다. 그는. 최소 간격의 OnTimer () 함수입니다. 따라서 다른 것을 생각해야 합니다.

그 전에 다음과 같이 썼습니다.

시장 상인:
사실, 타이머 이벤트가 있는 모든 악기에 새 막대의 틱이 도착 하는 순간을 "잡으려고" 하고 있으며 이를 수행하는 가장 좋은 방법은 OnTick 이벤트입니다.


문제는 OnTimer ()의 내가 틱을 "캐치"하려고 하지 않는다는 것입니다. OnTimer ()에서는 각 기호에 대해 개별적으로 새 막대를 확인합니다. 이 확인은 타이머에 설정된 간격(초)으로 수행됩니다.

OnTick() 함수와 Konstantin Gruzdev가 제안한 방식, 즉 OnChartEvent () 함수에서 틱과 같은 이벤트가 수신 되었습니다 . OnChartEvent ()에서 모든 시간 프레임에 새 막대의 형성을 포함하여 모든 이벤트를 추적할 수도 있습니다.

타이머에는 문제가 없습니다. 이제 다음과 같이 다중 통화 Expert Advisor를 테스트하고 있습니다.

1. 각 기호에 대해 매개변수를 개별적으로 최적화하고 Expert Advisor를 매개변수가 최적화되고 있는 기호에 정확히 배치합니다. 최적화 프로세스는 OnTick () 함수를 사용하여 수행됩니다. 하나의 심볼에 대한 매개변수를 최적화할 때 나머지는 모두 비활성화됩니다. 즉, 테스트에 참여하지 않고 매개변수가 최적화되는 심볼에 대해서만 거래가 이루어집니다.

2. 모든 기호에 대한 매개변수를 최적화한 후 모든 기호를 한 번에 테스트해야 합니다. OnTimer () 함수에 코드를 전송하고(지금까지) 예비 테스트용 타이머를 켜고(60초) 결과를 분석합니다. 나에게 적합하다면 자금 관리 시스템 및 기타 하위 시스템을 설정합니다. 그런 다음 최종 테스트(타이머 10초)를 켜고 가장 정확한 결과를 얻을 수 있습니다. 내 의견과 결론은 모든 방법의 테스트 결과와 이러한 결과를 서로 비교한 결과를 기반으로 합니다.

시장 상인:
이것이 당신에게 중요하다면 상위 5개에 있는 4중 fxt 파일의 유사체가 무엇인지 개발자와 함께 확인하는 것이 좋습니다. 나는 이미 다른 테스트에 대해 다른 틱 기반이 생성된다고 썼습니다.

여기 흥미로운 추측이 있습니다. 그럴 가능성도 있습니다. 따라서 개발자의 응답이 편리할 것입니다.

 
MT5에는 fxt 파일이 없습니다. 이제 틱은 파일에 기록 되지 않지만 이동 중에도 분 기록에서 모델링됩니다.

이동 중에 틱을 생성하는 것이 디스크에서 읽는 것보다 빠릅니다.
Документация по MQL5: Файловые операции / FileWrite
Документация по MQL5: Файловые операции / FileWrite
  • www.mql5.com
Файловые операции / FileWrite - Документация по MQL5
 
Renat :
MT5에는 fxt 파일이 없습니다. 이제 틱은 파일에 기록 되지 않지만 이동 중에도 분 기록에서 모델링됩니다.

이동 중에 틱을 생성하는 것이 디스크에서 읽는 것보다 빠릅니다.
안녕하세요 레나트입니다. 답변 해주셔서 감사합니다. 이것은 좋은 소식입니다.
 
tol64 :
안녕하세요 레나트입니다. 답변 해주셔서 감사합니다. 이것은 좋은 소식입니다.
나는 놀라운 것을 보지 못했습니다. mt5에서는 실제 진드기를 테스트하는 것이 불가능합니다.
 
Loky :
나는 놀라운 것을 보지 못했습니다. mt5에서는 실제 진드기를 테스트하는 것이 불가능합니다.
실제 진드기 데이터베이스를 수집하거나 어딘가에 가져와서 테스트하거나 뭔가를 할 수 있기를 원하십니까?
 
Yedelkin :

내가 장점에 대해 대답하기 시작하면 대답은 " 텍스트와 별도로 취한 문구 "또는 " 나는 모든 것에 대해 항상 옳다고 생각하는 범주의 사람들이 아닙니다 ."와 같은 대답이 될 것입니다. 이것은 이미 분명합니다.

아니요. 당신은 여전히 아무 것도 이해하지 못하는 것 같습니다. 이제 네 번째 로 이것을 설명하겠습니다. 대화를 복원합시다.

모든 것은 이 순간 부터 시작되었습니다.

예델킨 :
코드 부분에 주의하십시오.

 int OnInit ()
{
if ( iCustom ( "EURUSD" , PERIOD_D1 , "Spy Control panel MCM" , ChartID (), 0 ,CHARTEVENT_TICK) == INVALID_HANDLE )
   { Print ( "Ошибка установки шпиона на EURUSD" ); return ( true );}
   
if ( iCustom ( "GBPUSD" , PERIOD_D1 , "Spy Control panel MCM" , ChartID (), 1 ,CHARTEVENT_TICK) == INVALID_HANDLE )
   { Print ( "Ошибка установки шпиона на GBPUSD" ); return ( true );}
}

여기에서 두 개의 다른 기호에 특정 표시기 "Spy Control panel MCM"을 "매달"한 것을 볼 수 있습니다. 저것들. 신호 소스가 다른 문자입니다. 그러나 동시에 "거래는 EURUSD에서 수행됩니다"라고 주장합니다. 신호의 소스는 동일한 기호입니다. 결정합시다.

이에 나는 당신에게 이렇게 대답했습니다.

톨64:

오, 점점 가까워지고 있습니다. 내가 착각하는 하나의 옵션이 그려진 것 같습니다.)) 이제 조금 생각하고 즉시 그것에 대해 더 많이 쓸 것입니다 ...

나는 생각했다. 나는 대답한다 :

톨64:

거래는 EURUSD에서만 수행됩니다.

내 테스트에서 Konstantin Gruzdev가 작성한 "MetaTrader 5의 다중 통화 모드 구현" 계획을 고려합니다. ))) 모든 것이 정의됩니다. 기사에 첨부된 파일에는 스파이 제어판 MCM 표시기와 exSpy 제어판 MCM 전문가가 포함되어 있습니다. 차트에 Expert Advisor를 배치하면 어떻게 작동하는지 볼 수 있습니다. 로그는 다른 기호에서 전문가가 수신한 지정된 이벤트를 명확하게 표시합니다. 모든 것이 명확하고 아무것도 섞이지 않습니다.

이제 식별자를 수신한 기호를 OnChartEvent ()에 지정하려고 했지만 결과가 변경되지 않았습니다. 잘못된 이벤트가 발생할 가능성을 없애기 위해 OnInit ()에서 두 번째 문자를 제거했습니다. 이제 이 옵션에 따라 테스트가 수행되었습니다.

...

코드

...

영화

...

결과가 일치하지 않습니다. 두 번째 기호는 더 이상 없으며 신호는 EURUSD에서만 제공됩니다. 그러나 이것은 불행히도 문제를 해결하지 못했습니다.

요점은 "두 번째 기호는 더 이상 존재하지 않으며 신호는 EURUSD에서만 옵니다. 그러나 불행히도 이것은 문제를 해결하지 못했습니다. "


이해했나요? 두 번째 소스를 제거해도 문제가 해결되지 않았습니다. 상황이 단순화되어 두 번째 출처를 남길 수 있었지만 다음 문제를 풀려고 하지 않고 원래 예의 예를 계속 제시하셨습니다. 왜 하나의 심볼(단일 소스)만 가지고 있지만 다른 심볼에서 거래(테스트 모드)하면 동일하지 않은 옵션이 나타납니까?

다음은 귀하가 말한 게시물입니다.

예델킨:
올바른 표현부터 시작하겠습니다. 원래 예에서는 "유로달러 거래"를 원합니다. 실제로 사용자 이벤트는 두 개의 기호에서 수신되었으며 이벤트 처리기에서는 이 두 기호 중 하나에서 이벤트가 수신될 때 TradeSignalCounter()+TradePerformer() 함수가 호출되었습니다. 이벤트 큐는 항상 한계까지 채워졌다고 가정할 수 있습니다.

이제 신호 소스 중 하나를 제거했지만 어떤 이유로 이벤트 핸들러에서 "if(sparam == Symbol_01)" 검사를 입력했습니다. 그러나 또 다른 질문은 다릅니다. 코드로 판단하면 "All ticks" 모드에서 Lizar의 방식을 사용하고 신호 소스(EURUSD)의 각 틱마다 TradeSignalCounter()+TradePerformer() 함수가 호출됩니다. 관심은 이미 이벤트 큐의 오버플로 가능성에 대해 암시했습니다. 이 두 함수의 Symbol_01 매개변수로 어떤 도구를 사용하는지 궁금하며, Lizar의 방식에서 이벤트 빈도를 변경해 보셨습니까?

나는 두 번째로 모든 것을 설명 했습니다.

톨64:

예, 싶었어요. 결국 우리의 모든 행동은 욕망에 의해 유발됩니다. 이 경우 내가 원하는 것을 정확히 얻었습니다. 즉, TradePerformer() 함수가 기호 배열의 각 기호에 대한 거래 권한을 확인하기 때문에 EURUSD에서만 거래가 수행되었습니다. 이 옵션은 외부 변수에 있으며 당시 GBPUSD 기호에 대한 거래가 금지되었습니다. 사용자 이벤트는 두 개의 기호에서 발생했지만 이벤트 처리기에서 반복해서 말씀드리지만 TradePerformer() 함수는 EURUSD 기호에서만 거래를 허용했습니다. TradePerformer() 함수에는 새 막대가 특정 기호(이 경우 EURUSD)에 도착했는지 여부를 결정하는 함수도 포함되어 있습니다. 이벤트 대기열이 항상 가득 찼다는 가정은 정확했지만 이 경우 모든 것이 별도로 처리되었으며 일일 막대에서 테스트할 때 1틱 지연이 중요하지 않습니다.

테스트에 참여하지 말아야 할 신호 소스 하나를 제거하면 이전에 모든 것이 올바르게 수행되었음을 확인할 수 있었습니다. "if(sparam == Symbol_01)" 검사는 테스트해서는 안되지만 통과해야 하는 신호 소스를 삭제하지 않고 결과를 확인할 때부터 남아 있습니다. 이 검사는 실제로 불필요한 것으로 판명되었습니다. 결과는 변경되지 않았습니다. Symbol_01 매개변수는 EURUSD 기호입니다. 이벤트 빈도를 변경하려고 시도했지만 아무 것도 변경되지 않았습니다. 더 정확히 말하면 올티키 모드가 가장 정확하다고 할 수 있다.

요점: " 이 테스트는 실제로 중복되었습니다. 결과는 변경되지 않았습니다. "
당신은 두 번째로 문제가 당신이 지적한 것이 아니라는 것을 두 번째로 “알지 못했어요”라고 말했고, 두 번째로 나는 당신에게 같은 대답을 하지만 훨씬 더 자세하게 대답합니다.

당신은 계속:

예델킨:
"... 그 전에 모든 것이 올바르게 완료되었습니다." - 이것은 안일함의 범주에 속합니다. 처음에는 틀렸습니다. 분명히 당신은 "이벤트 대기열의 오버플로"와 같은 현상을 중요하게 생각하지 않습니다. 특히 틱으로 이벤트를 전송할 때. 이 주제에 대한 도움말 자료와 포럼을 살펴보십시오. 키워드는 "대기열"입니다.

TradeSignalCounter()+TradePerformer() 함수가 하나의 신호 소스에서만 이벤트를 처리했다는 사실은 이벤트 큐의 상태와 가능한 오버플로를 변경하지 않았습니다. 즉, "GBRUSD 기호에 대한 이벤트 처리 금지"는 이벤트 대기열에서 해당 이벤트를 전혀 제거하지 않았습니다. 세 번째로 저는 문제에 주의를 기울였습니다. "관심은 이미 이벤트 대기열의 오버플로 가능성에 대해 암시했습니다." :) 우리가 "한 틱 지연"에 대해 이야기하고 있다고 생각한다면 그러한 결론은 무엇을 기반으로 합니까?

"...이 경우 모든 것을 별도로 처리했습니다." 문제는 원래 버전에서 이벤트 핸들러가 두 신호 소스에서 이벤트를 수신할 때 함수를 호출한 다음 이러한 함수가 "불필요한" 소스에서 신호를 필터링했다는 것입니다. 그러나 함수는 (!) 시간마다 호출되었습니다.

예, 이벤트 핸들러가 테스트되는 기간은 중요하지 않습니다. Lizar의 계획이 틱당 신호를 생성하면 하루에 한 번이 아니라 틱당 이벤트 대기열을 채웁니다.

"이벤트 빈도를 변경해 보았지만 달라지는 것은 없었습니다. 정확히는 올틱 모드가 가장 정확하다고 할 수 있습니다." Lizar의 비틱 모드에 대한 비교 스크린샷을 제공할 수 있습니까?

그리고 세 번째로 가장 정중하게 대답 했습니다. 그리고 조롱거리로 보였던 이모티콘이 실제로는 내 친근함을 표현했다. 너무 모호하기 때문에 다른 곳에 삽입하지 않으려고 합니다.

톨64:

좋은 아침! ))

이 문구 외에도 텍스트와 별도로 찢어진 다음과 같이 썼습니다. "... 나는 어딘가에서 실수 한 것을 배제하지 않으며 항상 모든 것을 확인합니다. 그러나 가장 엄격한 검사 후에도 언뜻보기에 모든 것이 올바르게 보일 때 , 나는 여전히 어딘가에 실수가있을 수 있다는 것을 배제하지 않습니다. 나는 모든 것에 대해 항상 옳다고 생각하는 사람들의 범주에 속하지 않는다고 덧붙일 것입니다. )))

타이머 주제를 살펴보았습니다. 강조 표시된 핵심 사항은 다음과 같습니다.

1. 하나의 이벤트를 처리하는 동안 다른 이벤트를 처리할 수 없습니다.

2. 이벤트 스택이 오버플로되면 오래된 이벤트는 처리 없이 대기열에서 제거됩니다.

순서대로 가자. 이벤트 목록이 있습니다.

...
코드
...
초기화하는 동안 이벤트를 수신할 기호와 수신할 이벤트를 나타냅니다.
...
코드
...

즉, EURUSD 기호에서만 CHARTEVENT_TICK 이벤트를 수락합니다. 다른 캐릭터는 없습니다.

테스트가 시작되었습니다. 이벤트가 발생하면 프로그램은 OnChartEvent() 함수를 입력하고 거래 신호에 대한 변수 배열을 선언하고 이벤트가 무엇인지 확인합니다. 이것이 사용자 정의 이벤트인 경우 프로그램은 TradeSignalCounter()에서 신호를 정의한 다음 TradePerformer() 함수에서 새 막대가 도착했는지 여부를 확인하고 이에 따라 다른 조건을 결정합니다. 함수는 작업을 완료했으며 EURUSD 차트에서 이벤트가 발생한 후에만 시작됩니다. 이 경우 틱입니다.

...

코드
...

이러한 기능의 실행은 매우 빠릅니다. 이벤트 대기열은 오버플로할 시간이 없으며 중요한 이벤트를 놓치지 않습니다. 그리고 대기열이 오버플로되고 이벤트가 건너뛴다면 무엇을 놓치게 될까요? 똑딱, 둘, 셋? 글쎄요? 이것은 일일 바에서 무시할 수 있습니다.

왜이 두 번째 소스에 집착합니까.))) 더 이상 두 번째 소스가 없습니다. EURUSD가 있지만 EA는 GBPUSD에서 EURUSD 차트로 거래합니다. 그리고 결과도 똑같이 틀립니다. 복사. 즉, 두 번째 소스가 있는 것과 동일합니다. )))

-----------

테스트를 직접 해보고, 테스트 결과를 보여주고, 당신이 할 수 있다면 정확한 테스트 결과를 얻기 위해 무엇을 했는지 (간단히) 쓰는 것이 좋습니다. 가장 간단한 Expert Advisor가 이 테스트에 적합합니다. 모든 조건에 의한 진입, 손절매, 이익실현. 지난 10년 동안 매일 바를 보자. 그리고 당신 자신이 직접 보게 될 것입니다. 일부는 일치하고 일부는 일치하지 않습니다. 결과 그래프를 열고 불일치가 있는 위치를 확인합니다.

그리고 그 후에 다음과 같이 씁니다.

예델킨:
탁구의 경우 - 약간 이상한 위치. 당신은 특정 주제에 관심이 있고, 주요 질문에 답하고 질문을 받고, 논쟁을 시작하거나 시작합니다. 주제는 무엇보다도 당신 또는 누구에게 필요합니까? 아무도 당신을 위해 일하지 않을 것입니다. 개인적으로, 나는 이러한 결과가 필요하지 않으며 귀하가 선택한 결과는 거의 관심이 없습니다. 주제 자체는 관심을 기울일 만한 가치가 있어 보였지만 저자의 논쟁적인 열의는 그것을 유지하는 것이 타당한지에 대한 의구심을 불러일으킨다.

그런 다음 질문이 있습니다.

1. 더 이상 관련이 없는 것과 이미 세 번 응답한 것과 같은 동일한 것을 반복하면 어떤 반응을 기대했습니까?

2. 내가 논쟁하고 있다고 생각하는 이유는 무엇입니까? 내 대답을 논증으로 받아들였다면 내가 한 일에 대해 대답하고 설명했기 때문에 착각하는 것입니다. 그러나 당신은 그것을 논쟁으로 받아들였습니다. 왜냐하면 당신 자신이 논쟁했기 때문입니다. )))

3. 나는 내 일을 다른 사람에게 의존하지 않는다.

4. 이 주제는 나뿐만 아니라 이 문제를 겪는 모든 사람들에게도 필요합니다. 필요하지 않다면 왜 대화를 시작했습니까? 내 논쟁적인 열정은 결과일 뿐이고 원인은 당신에게서 왔습니다.

---
심리학적 관점에서 나는 당신의 행동을 분석하지 않을 것입니다. 그렇지 않으면 당신과 나는 대기권 밖으로 날아가야 할 것입니다. 따라서 대화를 짧고 요점으로 유지하는 것이 좋습니다. 그러나 필요하지 않다면 계속하지 않는 것이 좋습니다. 이유: 규칙 을 따르십시오. )))

 

물론, 나는 개인적으로 다른 사람의 세계관의 특징을 분석하는 데 관심이 없습니다. 나는 이미 위에서 당신의 논쟁적 열정에 대한 결론을 설명했습니다. 아무것도 추가하지 마십시오.

 
Yedelkin :

... 아무것도 추가하지 마십시오.

예, 안 하는 것이 좋습니다. 그렇지 않으면 그것은 공허한 이야기가 될 것입니다. 다시 주제로 돌아가자.

---

다른 일련의 테스트를 실행했습니다. 이에 앞서 제시된 테스트 결과는 시가 전용 모드에서 획득했다. 이 모드에서는 OnTimer () 함수만 사용하여 올바른 결과를 얻을 수 있었습니다. 다른 모든 방법은 일치하지 않는 것으로 나타났습니다.

이번에는 2011년 초부터 모든 틱 모드에서 테스트를 실행했습니다. 동시에 이 방법이나 저 방법이 얼마나 걸릴지 보는 것도 흥미로웠습니다. 예를 들어, 챔피언십에 참가하기 위한 Expert Advisors의 자동 테스트 중에 Expert Advisor는 15분 이상 "모든 틱" 모드에서 테스트되어야 합니다. 테스트를 위해 12개의 통화 쌍을 거래하는 간단한 Expert Advisor를 구성했습니다. 조건 중 포지션을 여는 조건, 손절매 , 이익 실현 , 추적 정지 만 포함합니다. 포지션의 증감이 없고, 자금 관리 시스템이 없으며, 거래되는 로트가 고정되어 있습니다(0.1). Expert Advisor는 단일 주기 없이 작성됩니다. 즉, 최대한 단순화합니다. 모든 H8 기호의 작업 기간.

OnTick () 함수를 사용하여 차례로 각 기호에 대한 매개변수를 개별적으로 최적화했습니다. 최적화가 끝날 때까지 기다리지 않았습니다. 100번의 패스 후에 최적화를 중단하고 최선의 옵션이 아닌 가장 위험이 적은 옵션을 선택했습니다.

테스트가 수행된 프로세서의 주파수는 2GHz 입니다. 여기 집중해야 할 사항이 있습니다.

또한 목표가 정확히 일치하는 것이 아니기 때문에 여전히 동일이라는 단어를 거의 동일하게 대체하지만 그래프를 시각적으로 분석할 때 차이점이 명확하지 않아야 합니다.

---

시험 결과:

첫 번째 테스트에서는 지난 번 거의 동일한 결과를 보여 주었기 때문에 OnTimer () 함수를 사용했습니다. 이제 그 결과가 비교를 위한 벤치마크 역할을 할 것입니다.

온타이머 ()

타이머 간격은 60초입니다.

테스트는 27분 동안 진행되었습니다.

---

타이머 간격 300초:

결과는 거의 동일합니다. 시험 시간은 26분입니다.

---

타이머 간격 28800초 - 8시간(사용된 기간).

결과는 거의 동일합니다. 시험 시간은 25분입니다.

또한 1800초와 3600초 간격으로 테스트를 실행했는데 결과도 일관되었습니다.

-----------

차트 이벤트 ()

기간 1분 - CHARTEVENT_NEWBAR_M1 .

결과는 거의 동일합니다. 시험 시간은 37분입니다.

---

기간 1분 - CHARTEVENT_NEWBAR_H1 .

결과는 거의 동일합니다. 시험 시간은 27분입니다.

---

기간 1분 - CHARTEVENT_NEWBAR_H8 .

결과는 거의 동일합니다. 시험 시간은 27분입니다.

----------

온틱 ()

결과는 거의 동일합니다. 시험 시간은 72분입니다.

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

"All ticks" 모드에서는 모든 방법이 거의 동일한 결과를 보였습니다. OnTick ()이 가장 긴 옵션으로 판명되었습니다. OnTimer () 및 OnChartEvent () 테스트 기간은 실질적으로 동일합니다.

보고서:

결국:

제 경우에는 단일 방법으로 매우 긴 기간(H8)에 12개의 통화 쌍을 거래하는 가장 단순한 다중 통화 Expert Advisor도 테스트(15분 동안 시험). "식욕을 줄이거 나" EA 코드를 가능한 한 효율적으로 최적화하는 방법을 찾아야 합니다.

---

12쌍에 대한 빠른 테스트를 완료한 사람이 있는지 궁금합니다. 시험은 얼마나 걸립니까?

 
tol64 :

12쌍에 대한 빠른 테스트를 완료한 사람이 있는지 궁금합니다. 시험은 얼마나 걸립니까?


3. 구성
EURUSD의 capr2011: H1 매 틱 2011.01.01-2011.08.01


4.시작
3분 21초 만에 완료


5. 통계
1233kb 로그 파일
100 거래, 200 거래, 이익 83043.82 USD