Страница 1 из 1

Тестирование только в определенные даты

Добавлено: 12 май 2018, 11:21
evgen000
Добрый день. Подскажите пожалуйста, как возможно протестировать алгоритм только в определенные дни. К примеру у меня есть несколько дат, скажем "2018-04-05", "2018-05-01" итд и я хочу протестировать стратегию которая будет торговать только в эти дни. Спасибо!

Re: Тестирование только в определенные даты

Добавлено: 12 май 2018, 14:19
Simonov
Как вариант. Если определённых дат не очень много, то можно вручную их прогнать по очереди, выставляя интервал в параметрах мастера тестирования стратегии.

Re: Тестирование только в определенные даты

Добавлено: 14 май 2018, 16:31
evgen000
Simonov писал(а):Как вариант. Если определённых дат не очень много, то можно вручную их прогнать по очереди, выставляя интервал в параметрах мастера тестирования стратегии.

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

Код: Выделить всё

if CurrentDay in ["2018-02-01", "2018-02-05"]


Но вот как конкретно сделать, не знаю.

Re: Тестирование только в определенные даты

Добавлено: 14 май 2018, 17:16
oxi

Код: Выделить всё

Index++;
DateTime date1 = new DateTime(2018, 5, 11, 0, 0, 0);

if ( Index%2 == 0 && BarDate() == date1 )
{
   EnterLong();   
}
else
{
   CloseLong();
}

Re: Тестирование только в определенные даты

Добавлено: 15 май 2018, 00:51
evgen000
oxi писал(а):

Код: Выделить всё

Index++;
DateTime date1 = new DateTime(2018, 5, 11, 0, 0, 0);

if ( Index%2 == 0 && BarDate() == date1 )
{
   EnterLong();   
}
else
{
   CloseLong();
}

В вашем примере, насколько я понял, конкретно для одной даты, а если их скажем 20 ? Что-то подобное можно сделать ? К примеру задать массив дат, и проверять вхождение текущей даты в этот массив, такое возможно ?

Re: Тестирование только в определенные даты

Добавлено: 15 май 2018, 07:52
evge
Если массивом, то например так:

Код: Выделить всё

/**
DatesTest
**/

function Initialize()
{
   StrategyName = "DatesTest";
   AddParameter("P1", 0, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 1;
   ShortLimit = -1;   
}

function OnUpdate()
{
   // объявляем массив из 4 элементов DateTime
   var Dates = new DateTime[4];

   // заполняем каждый элемент по индексу в массиве
   Dates[0] = new DateTime(2018, 5, 7);
   Dates[1] = new DateTime(2018, 5, 9);
   Dates[2] = new DateTime(2018, 5, 11);   
   Dates[3] = new DateTime(2018, 5, 14);   
      
   // дата бара в массиве? Если нет, завершаем работу функции через return.
   if (!Array.Exists(Dates, e => e == BarDate())) return;
           
   // в 10:XX  открываем позицию long, если не открыта позиция
   if (CurrentPosition() == 0 && BarTime().Hours == 10) EnterLong();
   // в 15:XX закрываем позицию long, если открыта позиция
   if (CurrentPosition() != 0 && BarTime().Hours == 15) CloseLong();
}


DatesTest-01.png
DatesTest-01.png (34.43 КБ) 14807 просмотров


9 мая - праздничный день. Добавлен для примера, биржа не работала :)

В самом тестировании стратегии надо задать период или кол-во баров захватывающее все эти даты.