Cómo protegerse contra la copia de operaciones largas del probador - página 3

 
George Merts:
Sí, lo entiendo. Pero de nuevo, en el probador de estrategias - se obtienen ticks secuencialmente, y no se sabe cuándo se tendrá el último tick.
Puedes saber la hora de la primera barra (inicio), y el número de barras en la historia del símbolo, eso es suficiente.
 

dll no es necesario

Inite hay algo que puedes hacer para sacar la primera barra y el número de barras por carácter(cualquiera). Pero esto es para la construcción antigua. Y no sé si funcionará en el probador. Pero tengo acceso al historial en MT4 sin dll

int init()
{
        int    _GetLastError = 0, cnt_ticks = 0, cnt_bars = 0, temp[13];
        // запоминаем символ графика, обнуляем хэндл окна off-line графика
        _Symbol = Symbol();
   hwnd = 0;

        // открываем файл, в который будем записывать историю
        string file_name = StringConcatenate( "!Eqv", _Symbol, TicksInBar, ".hst" );
        int sd_=iBars("!Eqv"+ _Symbol,TicksInBar)-1;
   double Open_[],
          Close_[],
          High_[],
          Low_[];
   int Time_[];
   ArrayResize(Open_,sd_+1);
   ArrayResize(High_,sd_+1);
   ArrayResize(Low_,sd_+1);
   ArrayResize(Close_,sd_+1);
   ArrayResize(Time_,sd_+1);
        for(int sd=iBars("!Eqv"+ _Symbol,TicksInBar)-1;sd>=0;sd--)
        {
           Time_[sd]=iTime("!Eqv"+ _Symbol,TicksInBar,sd);
           Open_[sd]=iOpen("!Eqv"+ _Symbol,TicksInBar,sd);
           Close_[sd]=iClose("!Eqv"+ _Symbol,TicksInBar,sd);
           High_[sd]=iHigh("!Eqv"+ _Symbol,TicksInBar,sd);
           Low_[sd]=iLow("!Eqv"+ _Symbol,TicksInBar,sd);
           //Print(sd," ",GetLastError()," ",Time_[sd]," ",Low_[sd]," ",High_[sd]," ",Close_[sd]," ",Open_[sd]);
        }

        return(0);
}
 
Alexandr Bryzgalov:
Puede averiguar la hora de la primera barra (inicio), y el número de barras en el historial de símbolos, eso es suficiente.

En el probador de estrategias, la hora de la primera barra es la hora del tick entrante. Y aumentará constantemente con la llegada de ticks en el probador de estrategias.

Un ejemplo concreto:

-----------------------------------------------

La fecha actual es el 1.05.2015, comenzamos el probador de estrategias para el último año. En el primer tick en el probador de estrategias obtendremos el tiempo de la barra cero del 1.1.2015. Aunque, el tiempo real en el ordenador es 1.5.2015. A medida que los ticks entran en el probador de estrategias - la fecha se desplazará, y la barra cero también.

Usando la operación de archivo, podemos obtener que aunque nuestra última (barra cero) tiene una fecha de 1.1.2015, la hora real es 1.05.2015. Por lo tanto, en el probador procesamos las garrapatas sólo hasta el 1.04.2015.

A medida que lleguen nuevos días reales - en el probador obtendremos más y más tarde la fecha, y, en consecuencia, las garrapatas de proceso más y más, pero no más cerca de un mes a la fecha real.

Ahora bien, el usuario ha decidido engañarnos y poner la fecha en el ordenador con seis meses de antelación. Ahora, en el probador, junto con la fecha 1.05.2015 obtendremos la fecha 1.11.2015, y los ticks se procesarán hasta el 1.10.2015, a pesar de que la fecha real - todavía 1.05.2015, y en el terminal realmente los datos sólo hasta esta fecha. Sin embargo, no hay forma de obtener este valor del probador al comienzo de la prueba.

Este es el problema.

Es decir, si pudiéramos obtener la última fecha real de la serie de tiempo registrada en el probador, el problema estaría resuelto. Pero el problema es que no está claro cómo hacerlo.

 
Alexandr Bryzgalov:

dll no es necesario

Inite hay algo que puedes hacer para sacar la primera barra y el número de barras por carácter(cualquiera). Pero esto es para la construcción antigua. Y no sé si funcionará en el probador. Pero tengo acceso al historial en MT4 sin dll

Inite la fecha será el 1.01.2015 y por lo tanto todas las barras serán retiradas sólo a partir de esta fecha. Aunque, la fecha real es el 1.05.2015
 
George Merts:

En el probador de estrategias, la hora de la primera barra es la hora del tick entrante. Y aumentará constantemente con la llegada de ticks en el probador de estrategias.

Un ejemplo concreto:

-----------------------------------------------

La fecha actual es el 1.05.2015, comenzamos el probador de estrategias para el último año. En el primer tick en el probador de estrategias obtendremos el tiempo de la barra cero del 1.1.2015. Aunque, el tiempo real en el ordenador es 1.5.2015. A medida que los ticks entran en el probador de estrategias - la fecha se desplazará, y la barra cero también.

Usando la operación de archivo, podemos obtener que aunque nuestra última (barra cero) tiene una fecha de 1.1.2015, la hora real es 1.05.2015. Por lo tanto, en el probador procesamos las garrapatas sólo hasta el 1.04.2015.

A medida que llegan nuevos días reales - en el probador obtendremos más y más tarde la fecha, y, en consecuencia, las garrapatas de proceso más y más, pero no más cerca de un mes a la fecha real.

Ahora bien, el usuario ha decidido engañarnos y poner la fecha en el ordenador con seis meses de antelación. Ahora, en el probador, junto con la fecha 1.05.2015 obtendremos la fecha 1.11.2015, y los ticks se procesarán hasta el 1.10.2015, a pesar de que la fecha real - todavía 1.05.2015, y en el terminal realmente los datos sólo hasta esta fecha. Sin embargo, no hay forma de obtener este valor del probador al comienzo de la prueba.

Este es el problema.

Es decir, si pudiéramos obtener la última fecha real de la serie de tiempo registrada en el probador, el problema estaría resuelto. Pero el problema es que no está claro cómo hacerlo.

Hay un archivo de historia, debemos abrirlo (FileOpenHistory), leerlo, encontrar la primera (LA ÚLTIMA BARRA de la historia), leer su tiempo y contar el número total de barras.

Esto será suficiente para manipular la detención del Asesor Experto en el momento adecuado en el probador.

 
No obtenga la última fecha, obtenga la primera fecha en el archivo histórico y el número total de barras en el archivo histórico leyéndolo desde el init
 
Alexandr Bryzgalov:

Hay un archivo de historia, tienes que abrirlo, leerlo, encontrar la primera (la BARRA MÁS IZQUIERDA de la historia), leer su tiempo, contar el número total de barras.

Esto será suficiente para manipular la detención del EA en el momento adecuado en el probador.

Muy bien, pero ¿cómo podemos acceder a ella desde el Probador de Estrategias? La variante sugerida anteriormente obtiene las barras utilizando funciones estándar, que en Inite en el probador de estrategias nos devolverá el 1.01.2015 (Si ejecutamos la prueba desde esa fecha)
 
Alexandr Bryzgalov:
No necesitas obtener la última fecha, necesitas obtener la primera fecha en el archivo histórico y el número total de compases en el archivo histórico leyéndolo desde el init

¡А ! Eso sí que es interesante.

Tendré que probarlo.

 
George Merts:
Así es, ¿pero cómo se accede desde el probador de estrategias?

Entonces, ¿se trata de una operación de archivo normal, o el probador no puede acceder al historial?

Yo no lo he probado, pero no hay ninguna prohibición en la ayuda

 
Puede que esté fuera del bucle, pero en OnTesterInit() si comprueba TimeLocal y TimeGMT, encuentra la diferencia de días, ¿qué hora mostrará, la real o la del probador?