Как защититься от копирования длительных сделок из тестера - страница 3

 
George Merts:
Да, я понял. Но опять же, в тестере стратегий - вы получаете тики последовательно, и не знаете, когда у вас будет последний тик.
Вы можете узнать время первого бара(начало), и количество баров в истории символа, этого достаточно.
 

dll не нужны

в ините вот примерно там можно сделать что бы вытащить первый бар и количество баров по символу(любому). Но это под старый билд. И не знаю прокатит ли в тестере. Но доступ к истории в МТ4 есть без 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:
Вы можете узнать время первого бара(начало), и количество баров в истории символа, этого достаточно.

В тестере стратегий время первого бара - это время пришедшего тика. И оно постоянно будет увеличиваться, с приходом тиков в тестере стратегий.

Конкретный пример:

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

Текущая дата 1.05.2015, запускаем тестер стратегий за последний год. На первом тике в тестере стратегий мы получим время нулевого бара 1.1.2015 года. Хотя, реальное время на компьютере - 1.5.2015. По мере прихода тиков в тестере стратегий - дата будет смещаться, и нулевой бар также.

С помощью файловой операции мы можем получить, что, несмотря на то, что у нас последний (нулевой бар) имеет дату 1.1.2015, реальное время - 1.05.2015. Соответственно, обрабатываем в тестере тики только до 1.04.2015.

По мере прихода новых реальных дней - в тестере мы будем получать все более позднюю дату, и, соответственно, обрабатывать тики все дальше и дальше, но не ближе, чем месяц до реальной даты.

Теперь - юзер решил нас обмануть, и выставил дату на компьютере на полгода вперед. Теперь, в тестере мы вместе даты 1.05.2015 будем получать дату 1.11.2015, и тики будем обрабатывать до 1.10.2015, несмотря на то, что реальная дата - по прежнему 1.05.2015, и в терминале реально данные только до этой даты. Однако, из тестера вначале тестирования мы никак не можем получить это значение.

Вот в том и проблема.

То есть, если бы из тестера можно было бы получить реальную последнюю дату таймсерий,  записанных в тестере - задача была бы решена. Но проблема в том, что непонятно, как это сделать.

 
Alexandr Bryzgalov:

dll не нужны

в ините вот примерно там можно сделать что бы вытащить первый бар и количество баров по символу(любому). Но это под старый билд. И не знаю прокатит ли в тестере. Но доступ к истории в МТ4 есть без dll

В Ините дата будет равна 1.01.2015, и соответственно, все бары будут вытащены только с этого числа. Хотя, реальная дата 1.05.2015
 
George Merts:

В тестере стратегий время первого бара - это время пришедшего тика. И оно постоянно будет увеличиваться, с приходом тиков в тестере стратегий.

Конкретный пример:

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

Текущая дата 1.05.2015, запускаем тестер стратегий за последний год. На первом тике в тестере стратегий мы получим время нулевого бара 1.1.2015 года. Хотя, реальное время на компьютере - 1.5.2015. По мере прихода тиков в тестере стратегий - дата будет смещаться, и нулевой бар также.

С помощью файловой операции мы можем получить, что, несмотря на то, что у нас последний (нулевой бар) имеет дату 1.1.2015, реальное время - 1.05.2015. Соответственно, обрабатываем в тестере тики только до 1.04.2015.

По мере прихода новых реальных дней - в тестере мы будем получать все более позднюю дату, и, соответственно, обрабатывать тики все дальше и дальше, но не ближе, чем месяц до реальной даты.

Теперь - юзер решил нас обмануть, и выставил дату на компьютере на полгода вперед. Теперь, в тестере мы вместе даты 1.05.2015 будем получать дату 1.11.2015, и тики будем обрабатывать до 1.10.2015, несмотря на то, что реальная дата - по прежнему 1.05.2015, и в терминале реально данные только до этой даты. Однако, из тестера вначале тестирования мы никак не можем получить это значение.

Вот в том и проблема.

То есть, если бы из тестера можно было бы получить реальную последнюю дату таймсерий,  записанных в тестере - задача была бы решена. Но проблема в том, что непонятно, как это сделать.

Есть файл истории, нужно его открыть(FileOpenHistory), прочитать, найти первый(САМЫЙ ЛЕЫВЫЙ БАР в истории), прочитать его время, посчитать общее количество баров.

Этого будет достатчоно что бы манипулировать остановкой работы советника в нужный момент в тестере.

 
Не надо последнюю дату получать, нужно получить первую дату в файле истории и общее количество баров в файле истории прочитав его из инита
 
Alexandr Bryzgalov:

Есть файл истории, нужно его открыть, прочитать, найти первый(САМЫЙ ЛЕЫВЫЙ БАР в истории), прочитать его время, посчитать общее количество баров.

Этого будет достатчоно что бы манипулировать остановкой работы советника в нужный момент в тестере.

Все верно, только как получить к нему доступ из тестера стратегий ? Вариант, предложенный выше, получает бары с помощью стандартных функций, которые в Ините на тестере стратегий вернут нам 1.01.2015 года (Если запускать тест с этой даты)
 
Alexandr Bryzgalov:
Не надо последнюю дату получать, нужно получить первую дату в файле истории и общее количество баров в файле истории прочитав его из инита

А ! Вот это интересно.

Надо попробовать.

 
George Merts:
Все верно, только как получить к нему доступ из тестера стратегий ?

Так это вроде обычная файловая операции, или из тестера к истории не пускают?

сам не пробовал, но запретов в справке на этот счёт нет

 
может я не в теме, но в OnTesterInit() если проверить TimeLocal и TimeGMT, найти разницу в днях, там какое время выудится, реальное, или тестерное? 
Причина обращения: