Errores, fallos, preguntas - página 1960

 
Caso en el que DEAL_TIME_MSC devuelve cero
// Время в миллисекундах первой балансовой сделки (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);
}
 

Si pulsa Stop durante la optimización y luego reinicia la optimización, no irá, ya que esta será la entrada

Core 1  occupied by another terminal
Core 2  occupied by another terminal
 
El comprobador no llama a ParameterSetRange para los parámetros de entrada que no se comprueban para la optimización. Por esta razón, ParametersGetRange devuelve ceros para los valores correspondientes de Inicio, Paso y Parada. Esto no es correcto en absoluto. Así, por ejemplo, es imposible generar un archivo SET completo del propio comprobador o corregir el rango de optimización de un parámetro de entrada si el usuario lo ha configurado incorrectamente.
 
ParameterGetRange no funciona en 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:
Cómo sumar rápidamente muchas cadenas (por ejemplo, generar un informe comercial en cadena)

Resultado

Hay un hecho marcado en rojo que no se puede explicar de ninguna manera.

La peculiaridad del pool de memoria, la primera llamada SumString2 en el pool de memoria está "saturada" de memoria del sistema, la segunda vez, la memoria ya no se solicita al sistema.

Recomiendo corregir 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:

En el editor.

  • Si escribes la siguiente línea en el Metaeditor, el tooltip (¿o cuál es el nombre correcto para un tooltip con opciones?) GetMicrosecondCount no aparece.
    DoubleToString(GetMicro

El resaltado es inteligente, el argumento DoubleToString debería ser double yGetMicrosecondCount debería ser ulong.

Funcionaría así:

DoubleToString( (double)GetMicro
 
fxsaber:

¿Alguna idea de cómo obtener el nombre de un parámetro de entrada arbitrario como una cadena?

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:

¿Alguna idea de cómo obtener el nombre de un parámetro de entrada arbitrario como una cadena?

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

#define  TOSTRING(A) (#A)

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

Genial, ¡gracias!

¿Y para obtener una lista de instancias de EA cuando se ejecuta una sola prueba? Sin leer el archivo de configuración mediante dll.
Realizada una cómoda visualización de los parámetros utilizados en la prueba después de la optimización (a través del archivo y de las variables principales), queda un inconveniente: todos los parámetros tienen que ser listados manualmente.

 
Andrey Khatimlianskii:

¿Obtengo una lista de instancias de EA cuando ejecuto una sola prueba?

No se puede, sólo en el modo de optimización.

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

fxsaber, 2017.07.25 11:27

¿Cómo conocer los parámetros de entrada de un EA al menos en modo de ejecución simple?

Para los indicadores existe IndicatorParameters.

Para las optimizaciones existe FrameInputs.

Pero para la ejecución individual del EA o la ejecución normal - nada.