MetaTrader 5 전략 테스터: 오류, 버그, 개선 제안 - 페이지 46

 
traveller00 :
빌드 2280이지만 이전 버전에 있었습니다. 디버깅을 위해 스크립트 또는 Expert Advisor를 실행하면 1H 시간대의 Market Watch에서 첫 번째 기호의 새 창이 열립니다. 그리고 첫 번째 문자나 다른 TF가 아닌 디버그해야 하는 경우? 올바른 문자가 첫 번째 문자가 되도록 모든 문자를 제거하는 것과 같이 샤머니즘 없이 이 작업을 수행할 수 있는 방법이 있습니까?
터미널 설정 으로 이동합니다. 디버깅을 위한 기호 선택이 있습니다.
 
Artyom Trishkin :
터미널 설정 으로 이동합니다. 디버깅을 위한 기호 선택이 있습니다.

Artyom, 당신은 약간 착각하고 있습니다. 터미널 설정이 아닌 ME 설정입니다.


일할 필요가 적습니다.

 
Artyom Trishkin :
터미널 설정 으로 이동합니다. 디버깅을 위한 기호 선택이 있습니다.

모두 찾았습니다. 감사합니다. 최근에 MT5로 작업을 하고 있어서 아직 모든 것을 알지는 못합니다.

 
Alexey Viktorov :

Artyom, 당신은 약간 착각하고 있습니다. 터미널 설정이 아닌 ME 설정입니다.


일할 필요가 적습니다.

네 제가 잘못했네요...휴대폰으로 글을 쓰다보면 생기는데 볼곳이 없네요...
 

빌드 2280. 컴퓨터에는 4개의 프로세서가 있습니다. 2 MT5가 출시되었습니다. 첫 번째 스크립트에서는 긴 스크립트가 실행 중이므로 해당 terminal64.exe가 100%에서 1개의 프로세서를 사용하므로 총 로드가 25%입니다. 두 번째 MT5에서 유전자 최적화가 시작되었습니다. 프로세서 수에 따른 표준 에이전트 4개. 첫 번째 작업 배치는 127에 모든 사람에게 제공됩니다. 나머지 작업은 2명의 에이전트가 수신하여 완료하고 나머지 2개는 행인 완료되어 수신조차 하지 않습니다. 비활성화-활성화를 강제하면 작업에 연결됩니다. 최적화의 새로운 시작까지. 첫 번째 MT5가 충돌하더라도 상황은 그대로 유지됩니다. 그 후 두 번째 MT5를 다시 시작하면 문제가 없습니다. 그렇게 까다로운 로드 밸런서입니까 아니면 어딘가에 버그가 있습니까? 전자의 경우 다운로드가 75%(첫 번째 MT5 + 2 에이전트)로 이동하지만 이는 Windows 우선 순위에 따라 구동되어야 하기 때문에 그다지 성공적이지 않습니다.

추신: CPU 사용량과 반드시 관련이 있는 것은 아닌 것 같습니다. 재부팅 직후 나는 유전학만 시작했고 다른 것은 전혀 시작되지 않았고 2개의 에이전트 filonili도 껐다가 켤 때까지 시작되었습니다. 3명의 에이전트만 활성 상태로 유지하면 1개가 모두 비활성화되고 여전히 2개의 필로니가 있고 1개만 작동합니다.

PPS 6개의 프로세서가 있는 경우 이미 3개의 아이들러가 있습니다.
 

빌드 2280. 표시기를 디버깅하고 디버거에서 단계별로 수행했습니다. 라인에서

StartTime = iTime (Symbols[ 0 ], _Period , Pos + PosAddon);

디버깅이 중단되었습니다. 심각한 오류 , 디버깅이 중지되었습니다. 로그에 썼다

           crash -->   000000 B7250C38B1 038424 B8000000    add        eax, [rsp+ 0xb8 ]
                       000000 B7250C38B8 89442460           mov        [rsp+ 0x60 ], eax
                       000000 B7250C38BC 448 B4C2460        mov        r9d, [rsp+ 0x60 ]
                       000000 B7250C38C1 49 B8010000000000  mov        r8, 0x1
                                       0000
                       000000 B7250C38CB 488 B542468        mov        rdx, [rsp+ 0x68 ]
                       000000 B7250C38D0 48 B9E8DD4220B700  mov        rcx, 0xb72042dde8
                                       0000
                       000000 B7250C38DA 49 FF96580F0000    call       qword near [r14+ 0xf58 ]  ; # 11037 (terminal64.exe)
        
         00 : 0x000000B7250C38B1

발생하지만 드물게 발생합니다. 무엇과 관련되어 있는지, 특히 디버깅 간에 변경된 사항은 없습니다.

 

빌드 2280. 거래소, 선물 시장. 전체 이력이 로드되지만 테스트는 오프라인으로 수행됩니다. iBarShift 는 어떻게 든 표시기에서 이상하게 작동합니다. 그리고 동일한 코드가 일반적으로 스크립트에서 작동합니다. 버그 또는 내가 뭔가를 간과하고 있습니까?

#property indicator_separate_window

void OnInit ()
{
   datetime Time[];
   ArraySetAsSeries (Time, true );
   CopyTime ( _Symbol , _Period , 0 , 1 ,Time);

   int Shift= iBarShift ( _Symbol , _Period ,Time[ 0 ]);
   Print (" Symbol ="+ _Symbol +", Shift="+( string )Shift);

   for ( int i= 0 ;i!= SymbolsTotal ( true );++i)
  {
     const string SymbName= SymbolName (i, true );
    Shift= iBarShift (SymbName, _Period ,Time[ 0 ]);
     Print (" Symbol ="+SymbName+", Shift="+( string )Shift);
  }
}

int OnCalculate ( const int rates_total, const int prev_calculated, const datetime & time[], const double & open[], const double & high[],
   const double & low[], const double & close[], const long & tick_volume[], const long & volume[], const int & spread[])
{
   return 0 ;
}

그런 코드가 있습니다. 사실, 그것은 시장 시계의 모든 기호를 살펴보고 iBarShift 를 가져옵니다. 스크립트에서 정확히 동일한 코드가 정상적으로 수행됩니다. 표시기에서 기록이 없다는 오류와 함께 현재 기호(실행된 차트)를 제외한 모든 기호에 대해 -1을 반환합니다. 그리고 두 번째 실행에서 그는 분명히 이야기를로드하고 이미 정상적으로 보여줍니다.

 
traveller00 :

동일한 코드가 스크립트에서 잘 작동합니다. 버그 또는 내가 뭔가를 간과하고 있습니까?

스크립트와 달리 표시기는 비동기식으로 작동하며 기록이 준비될 때까지 기다리지 않습니다.

 
fxsaber :

스크립트와 달리 표시기는 비동기식으로 작동하며 기록이 준비될 때까지 기다리지 않습니다.

그래서 모든 이야기가 거기에 있습니다. 내가 말했듯이 오프라인으로 작동하며 전체 기록이 이미 서버에서 다운로드되었습니다. 아니면 다른 것이 필요합니까?

 
traveller00 :

그래서 모든 이야기가 거기에 있습니다. 내가 말했듯이 오프라인으로 작동하며 전체 기록이 이미 서버에서 다운로드되었습니다. 아니면 다른 것이 필요합니까?

물론 이론상으로는 콜드 스타트에서 모든 것을 선택해야 합니다. 사실 저는 지표를 좋아하지 않아서 장담은 하지 않겠습니다.