Como se proteger contra a cópia de longas negociações do testador - página 3

 
George Merts:
Sim, eu entendo isso. Mas novamente, no testador de estratégia - você recebe carrapatos sequencialmente, e não sabe quando terá o último carrapato.
Você pode saber a hora da primeira barra (início), e o número de barras na história do símbolo, isso é suficiente.
 

dll não é necessário

Inicia-se algo que você pode fazer para puxar a primeira barra e o número de barras por caráter(qualquer). Mas isto é para construções antigas. E eu não sei se funcionará no testador. Mas eu tenho acesso à história no MT4 sem 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:
Você pode descobrir a hora da primeira barra (início), e o número de barras na história do símbolo, isso é suficiente.

No testador de estratégia, a hora da primeira barra é a hora do tique de entrada. E aumentará constantemente com a chegada de carrapatos no testador de estratégia.

Um exemplo concreto:

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

A data atual é 1.05.2015, iniciamos o testador de estratégia para o último ano. No primeiro tick do testador de estratégia, teremos o tempo de barra zero de 1.1.2015. Embora, o tempo real no computador seja 1.5.2015. Quando os carrapatos vierem no testador de estratégia - a data será alterada, e a barra zero também.

Usando a operação de arquivo, podemos conseguir que mesmo que nossa última (barra zero) tenha uma data de 1.1.2015, o tempo real é 1.05.2015. Assim, processamos carrapatos no testador apenas até 1.04.2015.

À medida que novos dias reais chegam - no testador, teremos cada vez mais data posterior, e, conseqüentemente, o processo vai se prolongando cada vez mais, mas não mais perto de um mês da data real.

Agora - o usuário decidiu nos enganar, e definir a data no computador com seis meses de antecedência. Agora, no testador, juntamente com a data 1.05.2015, teremos a data 1.11.2015, e os carrapatos serão processados até 1.10.2015, apesar de a data real - ainda 1.05.2015, e no terminal realmente dados somente até esta data. No entanto, não há como obter este valor do testador no início do teste.

Este é o problema.

Isto é, se pudéssemos obter do testador a data real da última série cronológica registrada no testador - o problema seria resolvido. Mas o problema é que não está claro como fazer isso.

 
Alexandr Bryzgalov:

dll não é necessário

Inicia-se algo que você pode fazer para puxar a primeira barra e o número de barras por caráter(qualquer). Mas isto é para construções antigas. E eu não sei se funcionará no testador. Mas eu tenho acesso à história no MT4 sem dll

Em Inite, a data será 1.01.2015 e, portanto, todas as barras serão puxadas somente a partir desta data. Embora, a data real seja 1.05.2015
 
George Merts:

No testador de estratégia, a hora da primeira barra é a hora do tique de entrada. E aumentará constantemente com a chegada de carrapatos no testador de estratégia.

Um exemplo concreto:

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

A data atual é 1.05.2015, iniciamos o testador de estratégia para o último ano. No primeiro tick do testador de estratégia, teremos o tempo de barra zero de 1.1.2015. Embora, o tempo real no computador seja 1.5.2015. Quando os carrapatos vierem no testador de estratégia - a data mudará, e a barra zero também.

Com a operação de arquivo podemos conseguir que mesmo que nossa última (barra zero) tenha uma data de 1.1.2015, o tempo real é 1.05.2015. Assim, processamos carrapatos no testador apenas até 1.04.2015.

À medida que novos dias reais vierem - no testador, teremos cada vez mais data posterior e, portanto, processaremos carrapatos cada vez mais distantes, mas não mais perto de um mês da data real.

Agora - o usuário decidiu nos enganar, e definir a data no computador com seis meses de antecedência. Agora, no testador, juntamente com a data 1.05.2015, teremos a data 1.11.2015, e os carrapatos serão processados até 1.10.2015, apesar de a data real - ainda 1.05.2015, e no terminal realmente dados somente até esta data. No entanto, não há como obter este valor do testador no início do teste.

Este é o problema.

Isto é, se pudéssemos obter do testador a data real da última série cronológica registrada no testador - o problema seria resolvido. Mas o problema é que não está claro como fazer isso.

Existe um arquivo de história, devemos abri-lo (FileOpenHistory), lê-lo, encontrar o primeiro (a BARRA ESQUERDA na história), ler seu tempo e contar o número total de barras.

Isto será suficiente para manipular a parada do Expert Advisor no momento certo no testador.

 
Não obtenha a última data, obtenha a primeira data no arquivo de histórico e o número total de barras no arquivo de histórico, lendo-o do init
 
Alexandr Bryzgalov:

Há um arquivo de história, você precisa abri-lo, lê-lo, encontrar o primeiro (a BARRA ESQUERDA da história), ler seu tempo, contar o número total de barras.

Isto será suficiente para manipular a parada do Expert Advisor no momento certo no testador.

Tudo bem, mas como podemos acessá-lo a partir do Testador de Estratégia? A variante sugerida acima obtém as barras usando funções padrão, que em Inite no testador de estratégia nos retornará 1.01.2015 (Se executarmos o teste a partir dessa data)
 
Alexandr Bryzgalov:
Você não precisa obter a última data, você precisa obter a primeira data no arquivo de histórico e o número total de barras no arquivo de histórico, lendo-o do init

А ! Isso é interessante.

Vou ter que tentar.

 
George Merts:
Isso mesmo, mas como você tem acesso a ele através do testador de estratégia?

Então esta é uma operação normal de arquivo, ou o testador não tem permissão para acessar o histórico?

Eu mesmo ainda não tentei, mas não há proibições na ajuda.

 
Posso estar fora do loop, mas no OnTesterInit() se você verificar o TimeLocal e o TimeGMT, descobre a diferença em dias, que tempo ele mostrará, o tempo real ou o tempo do testador?
Razão: