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

 
DEAL_TIME_MSC 가 0을 반환하는 경우
 // Время в миллисекундах первой балансовой сделки (DEAL_TIME_MSC) в тестере равно нулю
int OnInit ()
{
   if ( HistorySelect ( 0 , TimeCurrent ()) && HistoryDealsTotal ())
  {
     Print (( datetime ) HistoryDealGetInteger ( HistoryDealGetTicket ( 0 ), DEAL_TIME )); // Время балансовой сделки
     Print ( HistoryDealGetInteger ( HistoryDealGetTicket ( 0 ), DEAL_TIME_MSC ));       // Это же время в мс равно нулю
  }

   return ( INIT_FAILED );
}
 

최적화 중에 중지를 누른 다음 최적화를 다시 시작하면 작동하지 않습니다. 기록이 있을 것이다

Core 1   occupied by another terminal
Core 2   occupied by another terminal
 
테스터는 최적화 확인란이 선택되지 않은 입력 매개변수에 대해 ParameterSetRange를 호출 하지 않습니다. 이러한 이유로 ParametersGetRange는 해당 시작, 단계 및 중지 값에 대해 0을 반환합니다. 이것은 완전히 잘못된 것입니다. 예를 들어 이 때문에 테스터의 본격적인 SET 파일을 스스로 생성하거나 사용자가 잘못 설정한 경우 입력 매개변수의 최적화 범위를 조정할 수 없습니다.
 
ParameterGetRange 는 OnTesterInit에서 작동하지 않습니다.
 sinput int Range = 5 ;

#define PRINT(A) Print ( #A + " = " + ( string )(A));

void PrintParameter( const string Name, const string From )
{
  PRINT(From)
  
   bool Enable;
   long Value, Start, Step, Stop;
  
   if ( ParameterGetRange (Name, Enable, Value, Start, Step, Stop))
  {
    PRINT(Start)
    PRINT(Step)
    PRINT(Stop)
    PRINT(Value)
    PRINT(Enable)
  }   
}

void OnTesterInit ()
{
   ParameterSetRange ( "Range" , true , 5 , 1 , 2 , 3 ); // Задали ненулевыми все значения
  
  PrintParameter( "Range" , __FUNCTION__ ); // Возвращает одни нули
}

void OnTesterDeinit ()
{
  PrintParameter( "Range" , __FUNCTION__ ); // Работает нормально
  
   ChartClose ();
}

void OnTesterPass ()
{
  PrintParameter( "Range" , __FUNCTION__ ); // Работает нормально
}

int OnInit ()
{
   uchar Data[];
  
   FrameAdd ( NULL , 0 , 0 , Data);
  
   return ( INIT_FAILED );
}
 
fxsaber :
많은 문자열을 빠르게 추가하는 방법(예: 문자열로 거래 보고서 생성)

결과

빨간색은 어떤 식으로든 설명할 수 없는 사실을 표시합니다.

메모리 풀의 기능은 처음 SumString2가 메모리 풀로 호출될 때 시스템의 메모리로 "포화"되고 다음에 시스템에서 메모리가 더 이상 요청되지 않을 때입니다.

SumString1을 수정하는 것이 좋습니다.

 ulong SumString1( string TmpStr, const int Amount )
{
   const ulong StartTime = GetMicrosecondCount ();

   string Str;
   StringInit (Str,Amount * StringLen (TmpStr) + 1 );            << обеспечим строке приёмный буфер

   for ( int i = 0 ; i < Amount; i++)
    Str += TmpStr;

   return ( GetMicrosecondCount () - StartTime);
}
 
fxsaber :

편집자별

  • Metaeditor에 다음 줄을 입력하면 툴팁(또는 옵션이 있는 툴팁의 정확한 이름은 무엇입니까?) GetMicrosecondCount가 나타나지 않습니다.
    DoubleToString(GetMicro

강조 표시는 스마트하고 DoubleToString 인수는 double이어야 하고 GetMicrosecondCount 는 ulong이어야 합니다.

다음과 같이 작동합니다.

 DoubleToString ( ( double )GetMicro
 
fxsaber :

임의의 입력 매개변수의 이름을 문자열로 가져오는 방법에 대한 생각이 있습니까?

 input double dParam1 = 1.0 ; // Double
input int iParam2 = 2 ;      // Integer

Print ( InputToString( dParam1 ) ); // "dParam1"
Print ( InputToString( iParam2 ) ); // "iParam2"

template < typename T>
string InputToString(T param)
{
   ???
}
 
Andrey Khatimlianskii :

임의의 입력 매개변수의 이름을 문자열로 가져오는 방법에 대한 생각이 있습니까?

 input double dParam1 = 1.0 ; // Double
input int iParam2 = 2 ;       // Integer

#define TOSTRING(A) ( #A)

Print ( TOSTRING( dParam1 ) ); // "dParam1"
Print ( TOSTRING( iParam2 ) ); // "iParam2"
 
fxsaber :

좋아요, 감사합니다!

단일 테스터 실행을 시작할 때 EA 입력 목록을 가져오는 것은 어떻습니까? dll을 사용하여 설정 파일을 읽지 않고.
최적화 후 테스트에 사용된 매개변수를 편리하게 표시했습니다(파일 및 주요 변수를 통해). 한 가지 불편한 점이 남아 있습니다. 모든 매개변수를 수동으로 나열해야 합니다.

 
Andrey Khatimlianskii :

단일 테스터 실행을 시작할 때 EA 입력 목록을 가져오는 것은 어떻습니까?

안 돼요, 최적화 모드에서만요.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

fxsaber , 2017.07.25 11:27

최소한 단일 실행 모드에서 Expert Advisor의 입력 매개변수 를 찾는 방법은 무엇입니까?

지표의 경우 IndicatorParameters가 있습니다.

최적화 - FrameInputs.

그리고 어드바이저의 단일 실행 또는 정상 실행의 경우 - 아무 것도 없습니다.