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

 
그런 다음 서비스 데스크에 작성하고 코드를 첨부하십시오.
 
sergeev :

그런 다음 서비스 데스크에 작성하고 코드를 첨부하십시오.

네, 전문가의 코드를 첨부하여 서비스 데스크에 가는 것이 좋습니다.

코드에 대해 걱정하지 마십시오. 테스트 후에 모든 것을 지웁니다. 우리의 주요 임무는 오류를 찾는 것 입니다.

 

다른 질문. CopyTime 기능을 사용하고 있습니다 . 부르다:

 CopyTime ( "EURUSD" , PERIOD_MN1 , D'2011.06.30' , D'2011.08.01' , Array)

어떤 이유로 값이 D'2011.08.01'인 요소 하나만 반환합니다. 그리고 D'2011.07.01'은 어디에 있습니까? 캐치가 뭐에요?

PS 배열 Array[]는 동적입니다.

 
marketeer :

다른 질문. CopyTime 기능을 사용하고 있습니다 . 부르다:

어떤 이유로 값이 D'2011.08.01'인 요소 하나만 반환합니다. 그리고 D'2011.07.01'은 어디에 있습니까? 캐치가 뭐에요?

PS Array[] 배열은 동적입니다.

예, 어떤 이유로 첫 번째 요소를 건너뛰었습니다. 서비스 데스크에 글을 쓰십시오.

 datetime Array[];
   CopyTime ( "EURUSD" , PERIOD_MN1 , D'2011.06.01' , D'2011.08.01' , Array); 
   for ( int i= 0 ;i< ArraySize (Array);i++)
     {
       Print (i, " " ,Array[i]);
     }

1 2011.08.01 00:00:00

0 2011.07.01 00:00:00

 

이미 유사한 요청이 있습니다.

우리는 이해한다.

 

여기에 또 다른 미스터리가 있습니다. 나는 어떤 식 으로든 버그를 잡을 수 없습니다. 내 것인지 터미널인지 모르겠습니다.

전문가가 주문한 수를 세는 간단한 코드가 있습니다. 카운터는 전역 변수에 저장됩니다. 다음과 같이 보입니다.

 int Count;

int OnInit ()
{
  Count = ( int ) GlobalVariableGet ( "Count" );
   return ( 0 );
}

void OnTick ()
{
   // bla-bla-bla
   if (успешно отправлен ордер)
  {
    Count++;
     if (! MQL5InfoInteger ( MQL5_TESTING ))
    {
       if ( GlobalVariableSet ( "Count" , Count) == 0 )
      {
         Print ( "GlobalVariableSet error " , GetLastError ());
      }
    }
  }
}

이 개수는 주문 설명에 사용됩니다. 그 결과, 나는 다음 주문의 수가 이미 시장에 있는 포지션보다 (몇 단위만큼) 적다는 것을 주기적으로 관찰합니다. 로그에 오류가 없습니다.

어떤 아이디어? 예를 들어 특정 조건에서 터미널을 종료할 때 터미널이 저장하지 않기 때문에 누군가 가 전역 변수의 마지막 값 과 유사한 "사라짐"에 직면했을 수 있습니다(예: 연결이 분실 - 단 하나의 버전)?

Документация по MQL5: Глобальные переменные терминала / GlobalVariableGet
Документация по MQL5: Глобальные переменные терминала / GlobalVariableGet
  • www.mql5.com
Глобальные переменные терминала / GlobalVariableGet - Документация по MQL5
 
marketeer :

여기에 또 다른 미스터리가 있습니다. 나는 어떤 식 으로든 버그를 잡을 수 없습니다. 내 것인지 터미널인지 모르겠습니다.

이런 식으로 시도하십시오. 나는 글로벌에서 진실을 추론하지 않았다. 그러나 모든 것이 올바른 것으로 간주됩니다.

     int Amount_Orders = 0 ;

     for (count = 0 ; count < OrdersTotal (); count++)
       {  
         if ( OrderSelect ( OrderGetTicket (count))) 
          {
           int tp_ord = ( ENUM_ORDER_TYPE ) OrderGetInteger ( ORDER_TYPE );  
           if (tp_ord == ORDER_TYPE_BUY_STOP   || tp_ord == ORDER_TYPE_SELL_STOP ||
              tp_ord == ORDER_TYPE_BUY_LIMIT || tp_ord == ORDER_TYPE_SELL_LIMIT )
           Amount_Orders++;  
          }
       }
 
tol64 :

이런 식으로 시도하십시오. 나는 글로벌에서 진실을 추론하지 않았다. 그러나 모든 것이 올바른 것으로 간주됩니다.

내 문제는 정확히 전역 변수 에 기록된 값이 손실되었다는 사실입니다. 완전히는 아니지만(월별 제한 시간으로 삭제할 때와 같이) 이전 항목이 남아 있습니다. 물론 주문을 다시 계산할 수 있지만 내 방법도 작동해야 합니다.
 
papaklass :

개발자:

따라서 지연 이 만료 시간 까지 닫히면 OnTrade 기능에 의해 추적되지 않는 것입니다.

추신: 일반적으로 OnTrade 거래 이벤트 핸들러의 목적은 명확하지 않습니다. 손절매와 테이크를 포착하지 못한다면, 주문 만료 시간까지 폰의 청산을 포착하지 못한다면 말입니다. 우리 모두는 알고리즘을 실행하는 동안 다시 확인해야 합니다. 이 접근 방식은 혼란스럽기 때문에 거래 이벤트 처리기에 의존하지만 다시 확인해야 합니다. 또한 재확인 후 OnTrade()에서 처리하지 않는 이벤트를 포착합니다. 글쎄, 그것은 무엇을위한 것입니까? 그러나 이제 우리는 테트리스를 플레이하고 차트에서 온갖 종류의 넌센스를 그릴 수 있습니다. 개발자 여러분, 플랫폼의 거래 부분을 논리적인 결론으로 가져오십시오.

나는 정리해고에 대해 아무 말도 할 수 없고, 그들과 함께 일하지도 않았고, 아직 필요도 없었지만, 테스터와 실시간 모두에서 OnTrade에서 스톱과 테이크가 완벽하게 처리됩니다.

예를 들어, 로그의 다음 행은 OnTrade 핸들러에 의해 표시됩니다.

2011.08.08 09:03:05 ChTestExp (EURUSD,H1) 손절매를 마감할 EURAUD의 매수 포지션
2011.08.08 09:03:05 ChTestExp (EURUSD,H1) ------------------거래 #5263582 [sl 1.37819]
2011.08.08 09:03:05 ChTestExp (EURUSD,H1) oldDealsTotal=558 newDealsTotal=559
 
papaklass :

OnTrade() 함수에 Print( __FUNCTION__ ) 함수를 넣습니다. 그리고 언제 당신의 로그에있을 것입니다

손절매 발동 매수 0.10 AUDUSD 0.89783 sl: 0.89544 tp: 0.90024 [#15 매도 0.10AUDUSD 0.89544]
거래 #7 0.10 AUDUSD를 0.89544에 판매 완료(주문 #15 기준)
수행된 거래 [#7 0.89544에서 0.10AUDUSD 판매]
수행된 주문은 0.89544에 0.10을 매도 [#15 0.89544에 0.10 AUDUSD 매도]

OnTrade()가 작동하는지 보셨습니까?

OnTrade는 모든 거래, 거래량, 이익을 추적하기 때문에 삽입 없이도 모든 것이 작동합니다. 이 모든 것이 각 기호에 대해 개별적으로 OnDeinite에 요약되어 표시됩니다. 그리고 모든 합산 지표(거래 횟수, 이익)가 테스터의 보고서와 정확히 일치하기 때문에 OnTrade() 함수의 작동을 의심할 이유가 없습니다.

OnTrade에서 처리되지 않는 유일한 것은 테스트 종료 시 포지션 청산('테스트 종료' 주석 포함)과 테스터에서 중단에 의한 청산(주석 'so ...')에 대한 거래입니다. , 그들은 테스트 모드에 있으며 OnDeinit에서 추가 프로세스입니다. 테스터 로그에서 발췌:

2011.08.09 00:06:43 Core 1 로그 파일 "E:\Program Files\MetaTrader 5\Tester\Agent-127.0.0.1-3000\logs\20110809.log" 작성
2011.08.09 00:06:43 코어 1 EURUSD,H1: 13962ms 이내에 생성된 888296틱(275바)(역사의 총 바 6479, 총 시간 16177ms)
2011.08.09 00:06:43 테스트 간격의 8%에서 Core 1 stop out 발생
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 Deinit 종료
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 모든 이익 = -9072.04
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 총 거래수: 17
.....
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 -------------------------------- --------
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 총 이익 EURGBP = -4738.97
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 이번주 수익 EURGBP = 319.68
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 총 이익 GBPUSD = -3775.86
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 이번주 수익 GBPUSD = -1798.83
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 총 이익 EURUSD = -557.21
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 이번주 수익 EURUSD = 65.85
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 잔액=927.96 Equite=927.96 Profit=0.00 MarginLevel=0.00
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 ---------------제보---------------- ---
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 잔액=10000.00 Equite=927.96 Profit=0.00 MarginLevel=0.00
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 오류 열기: 1 닫기 오류: 0 수정 오류: 0 인용: 1
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 런타임: 0분 14초
2011.08.09 00:06:43 핵심 1 2011.01.18 10:11:00 ChTestExp Expert Advisor가 H1 기간 동안 EURUSD 차트에서 2011.01.18 10:11 작업을 완료했습니다.
2011.08.09 00:06:43 Core 1 2011.01.18 10:11:00 Deinit 실행
2011.08.09 00:06:43 코어1 2011.01.18 10:11:00 OnDeinit_UninitReason = 또 다른 이유
2011.08.09 00:06:43 Core 1 OnTester 결과 0
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 주문이 1.59804에 1.65를 매수했습니다 [#69 1.59804에 1.65 GBPUSD를 매수]
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 거래 성사 [#68 1.59804에서 1.65 GBPUSD 구매]
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 거래 #68 1.59804에 1.65 GBPUSD 구매 완료(주문 #69 기준)
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 테스트 종료 기한 1.59804 [판매 1.65 GBPUSD 1.57341182 tp: 1.57247]
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 주문이 0.83931에 0.45를 매수했습니다 [#68 매수 0.45 EURGBP 0.83931]
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 거래 수행 [#67 매수 0.45 EURGBP 0.83931]
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 거래 #67 매수 0.45 EURGBP 0.83931 완료(주문 #68 기준)
2011.08.09 00:06:43 코어 1 2011.01.18 10:11:00 29.09%에서 트리거된 포지션 스탑 아웃 [매도 0.45 EURGBP 0.83930333 tp: 0.80463]
2011.08.09 00:06:43 Core 1 2011.01.17 14:39:39 EURUSD 롱포지션, 손절매 청산
2011.08.09 00:06:43 코어1 2011.01.17 14:39:39 ------------------거래 #66 sl 1.32900

2011.08.09 00:06:43 코어 1 2011.01.17 14:39:39 oldDealsTotal=65 newDealsTotal=66

테스터의 보고서에서:

결과
기록 품질: 100%
바: 275 티키: 888296
순이익: -9 072.04 총 이윤: 1 652.29 총 손실: -10 724.33
수익성: 0.15 우승 기대치: -533.65
회복 계수: -0.92 샤프 비율: -0.35

잔액 감소:
잔액에 의한 절대 손실: 9 072.04 잔액별 최대 인출액: 10 392.34 (91.80%) 잔액별 상대적 하락: 91.80% (10 392.34)
자금 인출:
수단에 의한 절대적 감소: 9 072.04 자기자본으로 인한 최대 손실액: 9 852.02 (91.39%) 자기 자본에 의한 상대적 하락: 91.39% (9 852.02)

총 거래: 17 짧은 거래(% 승): 10 (70.00%) 긴 거래(% 승): 7 (85.71%)
총 거래: 67 수익성 있는 거래(전체의 %): 13 (76.47%) 손실 거래(전체의 %): 4 (23.53%)

가장 큰 수익을 내는 거래: 263.25 가장 큰 손실 거래: -5 036.39

평균 수익성 거래: 127.10 평균 손실 거래: -2 681.08

최대 연속 상금 수(이익): 10 (1 320.30) 최대 연속 손실 수(손실): 2 (-4 084.59)

최대 연속 수익(승리 횟수): 1 320.30 (10) 최대 연속 손실(손실 수): -5 036.39 (1)

평균 연속 승리: 4 평균 연속 손실: 하나


보시다시피, 독립적으로 계산된 최종 수치는 동일하므로 모든 것이 정확합니다. 특히 stop-out을 예로 들었다.