Общие вопросы по разработке > Тестирование только в определенные даты

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
evgen000
Сообщения: 15
Зарегистрирован: 04 май 2016, 11:32
Благодарил (а): 2 раза

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

Непрочитанное сообщение evgen000 » 12 май 2018, 11:21

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

Аватара пользователя
Simonov
Сообщения: 89
Зарегистрирован: 20 сен 2017, 11:36
Благодарил (а): 83 раза
Поблагодарили: 20 раз

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

Непрочитанное сообщение Simonov » 12 май 2018, 14:19

Как вариант. Если определённых дат не очень много, то можно вручную их прогнать по очереди, выставляя интервал в параметрах мастера тестирования стратегии.
Вложения
Настройки мастера тестирования стратегии.PNG
Настройки мастера тестирования стратегии.PNG (25.16 КБ) 16366 просмотров

evgen000
Сообщения: 15
Зарегистрирован: 04 май 2016, 11:32
Благодарил (а): 2 раза

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

Непрочитанное сообщение evgen000 » 14 май 2018, 16:31

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

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

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

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


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

oxi
Сообщения: 160
Зарегистрирован: 20 сен 2016, 23:20
Благодарил (а): 12 раз
Поблагодарили: 67 раз

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

Непрочитанное сообщение oxi » 14 май 2018, 17:16

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

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

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

evgen000
Сообщения: 15
Зарегистрирован: 04 май 2016, 11:32
Благодарил (а): 2 раза

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

Непрочитанное сообщение evgen000 » 15 май 2018, 00:51

oxi писал(а):

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

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

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

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

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 366 раз
Контактная информация:

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

Непрочитанное сообщение evge » 15 май 2018, 07:52

Если массивом, то например так:

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

/**
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 КБ) 16288 просмотров


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

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


Вернуться в «Общие вопросы по разработке»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей