오류, 버그, 질문 - 페이지 1661

 

이것은 버그 또는 질문이지만 이해할 수없는 일이 테스터와 디버그 모두에서 발생합니다 ... EURUSD에서는 모든 것이 정상이지만 USDJPY에는 그런 문제가 있습니다 ...

코드의 일부

 void funArrPositionTicket( ulong & arrBuy[], int & buySize, ulong & arrSell[], int & sellSize)
{
 double bp, sp;
  buyProfit = 0 ; sellProfit = 0 ; buyVolume = 0 ; sellVolume = 0 ;
   int i, total = PositionsTotal ();
     for (i = 0 ; i < total; i++)
     {
       if ( PositionGetTicket (i) > 0 && PositionGetString ( POSITION_SYMBOL ) == _Symbol )
       {
         if ( PositionGetInteger ( POSITION_TYPE ) == POSITION_TYPE_BUY )
         {
          buySize = ArraySize (arrBuy);
           ArrayResize (arrBuy, buySize+ 1 );
            arrBuy[buySize] = ( int ) PositionGetInteger ( POSITION_TICKET );
           buyProfit += PositionGetDouble ( POSITION_PROFIT );
          buyVolume += PositionGetDouble ( POSITION_VOLUME );
         }
         if ( PositionGetInteger ( POSITION_TYPE ) == POSITION_TYPE_SELL )
         {
          sellSize = ArraySize (arrSell);
           ArrayResize (arrSell, sellSize+ 1 );
            arrSell[sellSize] = ( int ) PositionGetInteger ( POSITION_TICKET );
           sp = PositionGetDouble ( POSITION_PROFIT );
           sellProfit += sp;
          sellVolume += PositionGetDouble ( POSITION_VOLUME );
         }
       }
     }
} /*******************************************************************/

코드에서 관심을 끄는 것은 스크린샷에서 분명합니다... 코드에서 강조 표시되어 있습니다.

7.39의 손실을 가진 하나의 판매 주문이 있지만 코드는 0.93의 손실만 제공합니다.


다음 화면의 녹색 화살표는 디버그가 이 줄에서 중지되었음을 나타냅니다...



즉, 변수 sl에는 이미 PositionGetDouble(POSITION_PROFIT) 값이 할당되었습니다.


질문: 왜 이런 일이 발생합니까??? 이것은 버그인가, 규칙성인가, mql5 테스터/디버거의 특별한 속성인가???

sp 변수는 조금 늦게 도입되었으며, 처음에는 SellProfit 변수가 확인되었으며 함수에 들어갈 때 재설정되었습니다.

 
Alexey Viktorov :

이것은 버그 또는 질문이지만 이해할 수없는 일이 테스터와 디버그 모두에서 발생합니다 ... EURUSD에서는 모든 것이 정상이지만 USDJPY에는 그런 문제가 있습니다 ...

현재 빌드보다 12~2개 앞선 빌드에서는 Visualizer가 한 틱에 대한 미래를 보여줄 때 문제가 있었지만 MQL은 잘 작동했습니다. 미래가 보이지 않았습니다.

다음 틱에서 PositionGetDouble( POSITION_PROFIT )을 비교해보세요. 시각화 프로그램이 이전에 보여준 것과 일치한다면 그것이 문제입니다. Slava는 해명을 하고 수정하겠다고 약속했습니다.

그렇지 않은 경우 다른 버그입니다.

 
fxsaber :

현재 빌드보다 12~2개 앞선 빌드에서는 Visualizer가 한 틱에 대한 미래를 보여줄 때 문제가 있었지만 MQL은 잘 작동했습니다. 미래가 보이지 않았습니다.

다음 틱에서 PositionGetDouble( POSITION_PROFIT )을 비교해보세요. 시각화 프로그램이 이전에 보여준 것과 일치한다면 그것이 문제입니다. Slava는 해명을 하고 수정하겠다고 약속했습니다.

그렇지 않은 경우 다른 버그입니다.

아마도 그럴 수도 있지만 코드는 다음 틱에 대한 확인을 제공하지 않습니다. 신규 바 오픈 시 단 한 번. 그리고 이것이 다음 틱의 값이라는 보장은 무엇입니까??? 예, 아니요 ... 다시 시작했는데 손실이 2.55로 나타났고 디버거에서는 여전히 0.93이었습니다.

반면에, 손가락은 활짝 열려 있습니다... 테스터 5는 테스터 4보다 훨씬 낫습니다... 약간의 결함과 부적절한 작업... 어떻게 그런 문제로 어드바이저를 디버깅할 수 있나요??? 사람들은 또 어떻게 최적화합니까? 사실 최적화는 이미 자기기만이고, 그런 고민을 안고 누운 정도의 자기기만 8.

우리는 데모를 확인해야 할 것입니다 ... 일주일이 아니라 ...

 

비주얼라이저가 넌센스를 보여준다고 해서 테스터 자신이 옳지 않다는 것은 아닙니다. 테스터는 단어부터 시각화 문제에 대해 전혀 신경 쓰지 않습니다.

TickValue를 사용하여 이익 크기를 계산하고 POSITION_PROFIT 와 비교합니다. 모든 것이 일치하는지 확인하십시오. 그리고 시각화는 버그인 것 같습니다.

 
fxsaber :

비주얼라이저가 넌센스를 보여준다고 해서 테스터 자신이 옳지 않다는 것은 아닙니다. 테스터는 단어부터 시각화 문제에 대해 전혀 신경 쓰지 않습니다.

TickValue를 사용하여 이익 크기를 계산하고 POSITION_PROFIT 와 비교합니다. 모든 것이 일치하는지 확인하십시오. 그리고 시각화는 버그인 것 같습니다.

예, 질문을 게시하기 전에 계산했습니다. 그것은 진실처럼 보입니다. 스크린 샷을 믿을 수 있습니다. 검사를 시작하지 않았습니다. 손실에서 테이크업이 예상 이익이 될 마감 시 로트의 크기로 간주됩니다. EURUSD에서는 모든 것이 올바른 것으로 간주되었지만 USDJPY에서는 갑자기 손실이 겹치지 않습니다. 공식을 확인하기 시작했는데... 이 버그가 발생했습니다. 시각화 도우미가 전혀 작동하지 않는 것으로 나타났습니다.

 
Alexey Viktorov :

예, 질문을 게시하기 전에 계산했습니다. 그것은 진실처럼 보입니다. 스크린 샷을 믿을 수 있습니다. 검사를 시작하지 않았습니다. 손실에서 테이크업이 예상 이익이 될 마감 시 로트의 크기로 간주됩니다. EURUSD에서는 모든 것이 올바른 것으로 간주되었지만 USDJPY에서는 갑자기 손실이 겹치지 않습니다. 공식을 확인하기 시작했는데... 이 버그가 발생했습니다. 시각화 도우미가 전혀 작동하지 않는 것으로 나타났습니다.

죄송합니다. 하지만 당신의 생각을 이해하지 못했습니다. 누가 버그라고 생각합니까? 테스터 또는 시각화 도우미?
 

Script1.mq5를 컴파일하는 동안 오류가 발생했습니다.

 //Script.mqh
typedef void (*fn)();
#import "Script1.ex5"
         void g();
#import "Script2.ex5"
         void h();
         void h( fn );
#import
class A {
public :
         void f1() { h( g ); } //Error: #1 - no one of the overloads can be applied to the function call
                               //Error: #2 - cannot resolve function address
         void f2() {    g(); } //нормально (*)
         void f3() { Print ( __FUNCTION__ ); }
};
//Script1.mq5
#property library
#include "Script.mqh"
void g() export
{
        A a;
        a.f3();
}

실수 #1. 서명에 의해 h에 대한 호출은 여기에서 명확합니다.

실수 #2. A::f1()에서 g의 의미로 h(g)를 호출하는 것은 모호해 보일 수 있지만 반면 A::f2()에서 컴파일러는 g()에 대해 불필요한 질문을 하지 않습니다. 올바르게 수행합니다 - 적어도 처음에는 모듈에 함수 선언 이 있는 헤더 파일을 포함하는 기존 문제와 구현 및 이 모듈에서의 후속 사용이 오랫동안 해결되었습니다. 게다가 Script.mqh는 공통 헤더 파일이기 때문에 다르게 다시 작성하기가 어렵습니다.

 
fxsaber :
죄송합니다. 하지만 당신의 생각을 이해하지 못했습니다. 누가 버그라고 생각합니까? 테스터 또는 시각화 도우미?

진실에 가까운 값을 보여주지만 잘못된 데이터에 따라 계산하면 바퀴벌레는 테스터나 시각화 장치가 아닌 mql5에 있는 것으로 판명됩니다.

일반적으로 귀하의 참여 덕분에 장기적으로 문제를 해결할 것입니다. 그리고 오늘 나는 통화의 또 다른 유사한 영역을 확인할 것입니다. 아마도 이것은 여기에서 진드기의 문제일 것입니다. xs?

 

왜 갑자기 경고합니까?

 void OnStart ()
{
   uchar Data[];  
   ArrayInitialize (Data, UCHAR_MAX ); // Warning: truncation of constant value
}
 
친애하는 전문가, 무슨 일이 일어나고 있는지 이해하도록 도와주세요. EA는 표시기 신호에 대해 작동하며 기간은 3개 막대에서 최대 10,000개 이상까지 넓은 범위에서 변경할 수 있습니다. 별도로 취한 표시기 자체는 지정된 제한 내에서 기간 변화에 적절하게 응답하여 적절하게 작동합니다. 그리고 테스터의 Expert Advisor는 "Zero Divide"에 따라 1002개 이상의 막대 설정을 허용하지 않습니다. 무엇이 문제가 될 수 있습니까? 어드바이저 코드에서 제한 사항을 찾지 못했습니다.