1분 OHLC 대 모든 틱 - 반대 결과

 

모든 틱 또는 1분 OHLC에서 테스트할 때 완전히 반대 결과가 나타납니다. EA와 입력 매개변수는 정확히 동일하지만 1min ohlc의 경우 50000의 이익을 얻는 반면 모든 틱에서 -7000의 손실을 얻습니다.

이것은 2년 0811-0813의 기간 동안 많은 쌍 테스트에서 발생합니다.

누군가가 같은 문제를 겪었습니까? 여기서 문제가 무엇인지, 실제 돈을 거래할 때 무엇을 해야 하는지 이해가 되지 않습니다.

아래 두 그래프

1분 OHLC

1분 ohlc

모든 틱

모든 틱

 

귀하의 EA가 구매/판매를 결정하는 방법에 대한 정보가 없으면 답변하기 어렵습니다.

우리는 시장에서 하나의 막대가 매우 큰 경우를 많이 봅니다(예: 중요한 뉴스).

따라서 테스터는 이러한 막대에 대해 최대 11개의 틱을 생성합니다. 논리에 따라 매우 다르게 작동합니다(테스트 단독).

실제 돈으로 EA를 사용한다면 그러한 큰 막대가 1분에 최대 200틱을 가질 수 있기 때문에 훨씬 더 나쁠 것이라고 확신합니다.

귀하의 논리가 현재 막대에서 작동한다고 가정하고 이전 막대의 값으로 논리를 시도해야 합니다.

최고의 소원

우에

 
ugo58 :

귀하의 EA가 구매/판매를 결정하는 방법에 대한 정보가 없으면 답변하기 어렵습니다.

우리는 시장에서 하나의 막대가 매우 큰 경우를 많이 봅니다(예: 중요한 뉴스).

따라서 테스터는 이러한 막대에 대해 최대 11개의 틱을 생성합니다. 논리에 따라 매우 다르게 작동합니다(테스트 단독).

실제 돈으로 EA를 사용한다면 그러한 큰 막대가 1분에 최대 200틱을 가질 수 있기 때문에 훨씬 더 나쁠 것이라고 확신합니다.

귀하의 논리가 현재 막대에서 작동한다고 가정하고 이전 막대의 값으로 논리를 시도해야 합니다.

최고의 소원

우에

나는 이제 하나의 막대에서 "똑딱"에 대한 트릭을 보냅니다. 이 논리를 틱의 시작 부분에 넣으면 됩니다. 막대가 새롭지 않으면 종료됩니다...

어떤 상황에서 이 트릭이 잘 작동할 수 있다고 생각합니까?

   //--- Let's first check if a new bar has come!         
   if ( CopyTime ( _Symbol , _Period , 0 , 1 , m_currentBarTime) > 0 ) 
     {
       if (m_previousBarTime != m_currentBarTime[ 0 ])
        {
         m_isNewBar = true ;
         m_previousBarTime = m_currentBarTime[ 0 ];
        }
     }
   else
     {
       Alert ( "Error copying historical data, error: " , GetLastError ());
       return ;
     }
     
   if (!m_isNewBar) return ;

이러한 추가 틱을 해결하기 위해 무엇을 추천하시겠습니까? 이것을 설명하는 기사 정도가 있습니까? 고맙습니다.

 
laplacianlab :

나는 이제 하나의 막대에서 "똑딱"에 대한 트릭을 보냅니다. 이 논리를 틱의 시작 부분에 넣으면 됩니다. 막대가 새롭지 않으면 종료됩니다...

어떤 상황에서 이 트릭이 잘 작동할 수 있다고 생각합니까?

추가 틱을 해결하기 위해 무엇을 추천하시겠습니까? 이것을 설명하는 기사 정도가 있습니까? 고맙습니다.

"그 여분의 진드기를 해결하기 위해"은(는) 무슨 뜻인가요?
 
ugo58 :

귀하의 EA가 구매/판매를 결정하는 방법에 대한 정보가 없으면 답변하기 어렵습니다.

우리는 시장에서 하나의 막대가 매우 큰 경우를 많이 봅니다(예: 중요한 뉴스).

따라서 테스터는 이러한 막대에 대해 최대 11개의 틱을 생성합니다. 논리에 따라 매우 다르게 작동합니다(테스트 단독).

실제 돈으로 EA를 사용한다면 그러한 큰 막대가 1분에 최대 200틱을 가질 수 있기 때문에 훨씬 더 나쁠 것이라고 확신합니다.

귀하의 논리가 현재 막대에서 작동한다고 가정하고 이전 막대의 값으로 논리를 시도해야 합니다.

최고의 소원

우에

안녕,

이전 막대의 값을 사용한다는 것은 무엇을 의미합니까? maVal[0] 대신 maVal[1](여기서 maVal은 이동 평균 값을 포함하고 배열은 시리즈로 설정됨)을 사용하시겠습니까?

또는 마지막 막대에서 조건이 확인되었는지 확인하여 이 막대를 열 때 입력하시겠습니까?

내 아주 간단한 EA 코드의 일부 아래

 triggerLong=maVal[ 1 ]-diff;
 triggerShort=maVal[ 1 ]+diff; 

......
.......

Buy_Condition_1=(now_ask<triggerLong);
Sell_Condition_1=(now_bid>triggerShort);

Exit_long_Condition=(closeAtCross? now_ask>=maVal[ 1 ]: false ) || Sell_Condition_1;
Exit_short_Condition=(closeAtCross? now_bid<=maVal[ 1 ]: false ) || Buy_Condition_1;

내가 maVal[1]을 사용하든 maVal[0]을 사용하든 상황은 그다지 변하지 않지만 모든 틱 이 그렇지 않은 동안 ohcl은 여전히 수익성이 있습니다.

감사해요

 
ugo58 :

귀하의 EA가 구매/판매를 결정하는 방법에 대한 정보가 없으면 답변하기 어렵습니다.

우리는 시장에서 하나의 막대가 매우 큰 경우를 많이 봅니다(예: 중요한 뉴스).

따라서 테스터는 이러한 막대에 대해 최대 11개의 틱을 생성합니다 . 논리에 따라 매우 다르게 작동합니다(테스트 단독).

실제 돈으로 EA를 사용한다면 그러한 큰 막대가 1분에 최대 200틱을 가질 수 있기 때문에 훨씬 더 나쁠 것이라고 확신합니다.

귀하의 논리가 현재 막대에서 작동한다고 가정하고 이전 막대의 값으로 논리를 시도해야 합니다.

최고의 소원

우에

이것은 사실이 아닙니다. 테스터는 11개 이상의 틱을 생성할 수 있습니다. 이 게시물 을 참조하십시오.
 
angevoyageur :
"그 여분의 진드기를 해결하기 위해"은(는) 무슨 뜻인가요?

나는 ugo58에 절대적으로 동의합니다. 큰 막대는 이벤트 OnTick을 여러 번 트리거할 수 있지만 작은 막대는 훨씬 적게 트리거합니다.

이것은 자동 거래 전략 에 영향을 줄 수 있으므로 개발자는 이벤트 OnTick이 막대당 여러 번 실행될 수 있다는 사실을 완화하는 솔루션을 찾아야 합니다.

제가 전에 보낸 것은 하나의 해결책이라고 생각합니다. ugo50은 또 다른 솔루션을 제안했습니다. 가장 최근의 과거 막대에서 OnTick 로직을 실행하는 것입니다. 어쨌든 현재 표시줄에서 OnTick 논리를 실행하려면 이전에 보낸 것과 비슷한 것을 사용할 수 있습니다.

OnBar 이벤트와 같은 것을 구현하려고 합니다.

이에 대해 어떻게 생각하세요?

 
michelino :

안녕,

이전 막대의 값을 사용한다는 것은 무엇을 의미합니까? maVal[0] 대신 maVal[1](여기서 maVal은 이동 평균 값을 포함하고 배열은 시리즈로 설정됨)을 사용하시겠습니까?

또는 마지막 막대에서 조건이 확인되었는지 확인하여 이 막대를 열 때 입력하시겠습니까?

내 아주 간단한 EA 코드의 일부 아래

내가 maVal[1]을 사용하든 maVal[0]을 사용하든 상황은 그다지 변하지 않지만 모든 틱이 그렇지 않은 동안 ohcl은 여전히 수익성이 있습니다.

감사해요

코드가 maVal[1] 또는 maVal[0]을 사용하거나 일반적으로 닫힌 막대만 또는 열린 막대 또는 막대 내부에서 작업하는 경우 분명히 큰 차이가 있습니다.

마지막 경우에는 모든 틱 모드를 사용해야 하며 다른 모든 모드는 적절하지 않습니다.

 
angevoyageur :
이것은 사실이 아닙니다. 테스터는 11개 이상의 틱을 생성할 수 있습니다. 이 게시물 을 참조하십시오.

고마워. 오, 글쎄. 내가 방금 다시 배워야 했던 것 중 하나. ;)


내가 말했듯이 그것은 당신의 논리에 달려 있습니다.

그것들은 이러한 문제를 해결하는 많은 방법이며, maVal[1]은 이동 평균이 각 막대에서 그렇게 빠르게 변경되지 않을 수 있기 때문에 더 쉬운 솔루션 중 하나입니다(기간 길이 및 평활화 방법에 따라 다름).

예를 들어 막대 범위의 높고 낮음에 의존하는 경우 다를 수 있습니다.

 
공유해주셔서 감사합니다...좋습니다
 
이 링크도 유용할 수 있습니다. https://www.mql5.com/en/articles/159
"New Bar" Event Handler
"New Bar" Event Handler
  • 2010.10.11
  • Konstantin Gruzdev
  • www.mql5.com
MQL5 programming language is capable of solving problems on a brand new level. Even those tasks, that already have such solutions, thanks to object oriented programming can rise to a higher level. In this article we take a specially simple example of checking new bar on a chart, that was transformed into rather powerful and versatile tool. What tool? Find out in this article.