Librerías: SingleTesterCache - página 7

fxsaber #:

Yo registraría el valor máximo. El tiempo de creación del siguiente TesterTradeState-record probablemente depende de la frecuencia elegida por los desarrolladores y algunas otras condiciones.

Si tuviera una tarea para crear un archivo tst muy similar al original, no conseguiría TesterTradeState[] idénticos .

Entendido

Tras ejecutar el script SingleTesterCache_Example.ex5, no se abre el resultado de Test.tst en el probador de estrategias al hacer clic en el botón «Resultados anteriores».

Adjunto el archivo con el resultado del script y el historial de la cuenta en la que lo he ejecutado.

He actualizado la biblioteca hoy.

Versión de MT5: 6230.

Archivos adjuntos:
Files.zip  315 kb
Ivan Titov el probador de estrategias al hacer clic en el botón «Resultados anteriores».

No utilizo el método «Save» desde que creé la biblioteca (hace ya casi siete años). Es muy probable que, durante este tiempo, MQ haya introducido modificaciones.


Hay que coger el archivo tst original, leerlo y luego guardarlo. Después, hay que ver en qué se diferencian.

Por ahora, no estoy preparado para ocuparme de esto. No utilizo esta funcionalidad.

Es decir, en lo que respecta a«escribir archivos tst» , es mejor no utilizaresta biblioteca. Solo para «leer». ¿Lo he entendido bien?
Ivan Titov #:
Es decir, en lo que respecta a«escribir archivos tst» , es mejor no utilizaresta biblioteca. Solo para «leer». ¿Lo he entendido bien?
Si se escribe para que el Tester lo lea, se requiere una adaptación explícita. Habría que ver de qué tipo.
fxsaber #:
Si se escribe para que lo lea el Tester, hay que retocarlo claramente. Habría que ver cómo.
Sustituir este número
      this.Header.version = ::MathMax(this.Header.version, 502);

por 505.


Si necesitas comentar los resultados de una prueba retrospectiva sin publicidad (por ejemplo, un asesor del Market), puedes anonimizar el archivo tst y publicarlo sin problemas en el foro.

Se hace de la siguiente manera.

#include <fxsaber\SingleTesterCache\SingleTesterCache.mqh> // https://www.mql5.com/es/code/27611
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/es/code/26132

template <typename T>
void ChangeComments( T &Array[], const string NewComment = NULL )
{
  for (uint i = ArraySize(Array); (bool)i--;)
    Array[i].comment = NewComment;
    
  return;
}

void ChangeName( SINGLETESTERCACHE &SingleTesterCache, const string Name = "Deleted", const bool Comments = false )
{
  SingleTesterCache.Header.expert_name = Name;            // nombre del experto
  SingleTesterCache.Header.expert_path = Name;            // nombre del experto con la ruta desde MQL5

  if (!Comments)
  {  
    ChangeComments(SingleTesterCache.Deals);
    
    ChangeComments(SingleTesterCache.Orders);
  }
  
  return;
}

void OnStart()
{  
  uchar Bytes2[];
  
  if (MTTESTER::GetLastTstCache(Bytes2) != -1) // Si se ha podido leer la última entrada de la caché de una ejecución única
  {
    SINGLETESTERCACHE SingleTesterCache(Bytes2); // La asignamos al objeto correspondiente.

    ChangeName(SingleTesterCache);
    
    SingleTesterCache.Save("ForumBacktest.tst");
  }
}


Primero realiza el backtest y, a continuación, ejecuta este script en el Terminal. El resultado será tu backtest sin datos identificativos. De este modo, se conservarán todas las estadísticas del backtest, que podrás publicar en el foro sin ningún temor.

Aquí, en el código fuente, se puede ver cómo organizar el funcionamiento simultáneo con cualquier número de cachés de una sola pasada.


En concreto, así es como se extraen las transacciones.

struct DEAL_SIGN2 : public DEAL_SIGN
{
  bool operator =( const TradeDeal &Deal )
  {
    const bool Res = (Deal.action <= DEAL_TYPE_SELL);

    if (Res)
    {
      const double ContactSize = Deal.contract_size ? Deal.contract_size * 1000 : 1e8;

      this.Volume = (1.0 - (Deal.action << 1)) * Deal.volume / ContactSize;
      this.Time = Deal.time_create;
    }

    return(Res);
  }
};

int GetDeals( const string FileName, DEAL_SIGN &Deals[] )
{
  const SINGLETESTERCACHE SingleTesterCache(FileName);

  int Amount = 0;
  DEAL_SIGN2 Deal;

  for (int i = 0, const Size = ArrayResize(Deals, ArraySize(SingleTesterCache.Deals)); i < Size; i++)
    if (Deal = SingleTesterCache.Deals[i])
      Deals[Amount++] = Deal;

  return(ArrayResize(Deals, Amount));
}
Коэффициент НЕкорреляции.
Коэффициент НЕкорреляции.
  • www.mql5.com
При составлении портфеля ТС стараются опираться на статистику. Например, пробуют составлять таблицу корреляции на основе вычислений соответствующих коэффициента (КК). Основная причина такого подхода -