Общие вопросы по разработке > Несколько источников данных для стратегии

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

Re: Несколько источников данных для стратегии

Непрочитанное сообщение evge » 13 окт 2017, 08:31

Упростил пример.

Теперь нет необходимости создавать папки вручную и для простоты понимания всего 2 простых индикатора.

Один индикатор для записи данных с графика в файлы, а второй как пример-чтения этих данных.

Индикатор WriteData - производит запись данных. Здесь в коде, скорее всего, менять ничего не потребуется. Если только не появится желание улучшить что-то в процедуре сохранения данных.

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

В индикаторах появился параметр DataSlot - номер слота данных.
Он влияет на создание или чтение папки с данными. Это номер папки DataSlot, которая будет создана автоматически если её нет в каталоге установки АД.

например тут

C:\Program Files (x86)\Alfa-Direct Pro

Можно использовать 1 график для двух и более инструментов и на этом же графике делать и запись и чтение данных.

Как это сделать покажу в этом видео

phpBB [media]


Код индикаторов из видео

ReadWriteData.zip
(108.42 КБ) 1309 скачиваний
никогда такого не было и вот опять

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

Re: Несколько источников данных для стратегии

Непрочитанное сообщение evgen000 » 13 окт 2017, 10:40

Ох, спасибо большое. У вас столько примеров на этом форуме, вы сами используете AD для алготорговли ?

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

Re: Несколько источников данных для стратегии

Непрочитанное сообщение Simonov » 13 окт 2017, 11:08

Евгений! Спасибо большое! Очень важная и полезная разработка!

Такой вопрос, данную конструкцию можно использовать для алгоритмической торговли? Самый простой пример - если цена на одном инструменте растёт, то открываем позицию Шорт на другом инструменте? Или, можно ли считывать данные индикатора с одного инструмента и транслировать результат в алгоритм, торгующий другим инструментом, для принятия решения? Такое уже можно сделать с помощью данного изобретения?

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

Re: Несколько источников данных для стратегии

Непрочитанное сообщение evge » 13 окт 2017, 11:18

evgen000 писал(а):Ох, спасибо большое. У вас столько примеров на этом форуме, вы сами используете AD для алготорговли ?


Скорее я экспериментирую чем реально торгую. Счет у меня в АД минимальный.
Но эти эксперименты нацелены на автоматизацию в будущем с нормальным счетом и с максимальным использованием возможностей АД4.

Simonov писал(а):Такой вопрос, данную конструкцию можно использовать для алгоритмической торговли? Самый простой пример - если цена на одном инструменте растёт, то открываем позицию Шорт на другом инструменте? Или, можно ли считывать данные индикатора с одного инструмента и транслировать результат в алгоритм, торгующий другим инструментом, для принятия решения? Такое уже можно сделать с помощью данного изобретения?


Можно.

В стратегию встраиваем код из ReadData или пишем индикатор подобный ReadData с сигналами или нужными нам данными для стратегии.
Индикатор WriteData для "инструмента-донора" данных придётся держать в открытом графике, что бы данные писались в файлы для их анализа.

Нужно ещё опыты провести как себя АД4 ведет если, например, окно графика находится на другой вкладке. Работают ли при этом индикаторы, реагируют ли на изменения цены, пишется ли в файлы WriteData. Но думаю что всё должно работать.

Тогда делаем отдельную вкладку в АД4, где размещаем графики с индикаторами WriteData и нужными слотами данных.

Пишем индикаторы \ стратегии читающие эти данные и запускаем роботов.
никогда такого не было и вот опять

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

Re: Несколько источников данных для стратегии

Непрочитанное сообщение Simonov » 13 окт 2017, 11:32

evge писал(а):
Simonov писал(а):Такой вопрос, данную конструкцию можно использовать для алгоритмической торговли? Самый простой пример - если цена на одном инструменте растёт, то открываем позицию Шорт на другом инструменте? Или, можно ли считывать данные индикатора с одного инструмента и транслировать результат в алгоритм, торгующий другим инструментом, для принятия решения? Такое уже можно сделать с помощью данного изобретения?


Можно.

В стратегию встраиваем код из ReadData или пишем индикатор подобный ReadData с сигналами или нужными нам данными для стратегии.
Индикатор WriteData для "инструмента-донора" данных придётся держать в открытом графике, что бы данные писались в файлы для их анализа.

Нужно ещё опыты провести как себя АД4 ведет если, например, окно графика находится на другой вкладке. Работают ли при этом индикаторы, реагируют ли на изменения цены, пишется ли в файлы WriteData. Но думаю что всё должно работать.

Тогда делаем отдельную вкладку в АД4, где размещаем графики с индикаторами WriteData и нужными слотами данных.

Пишем индикаторы \ стратегии читающие эти данные и запускаем роботов.


Круто, это реальный прорыв! Вас надо брать в команду разработчиков нового терминала, глядишь, уже давно бы всё летало и жужжало. А то официалы рожают своё чудо как-то медленно и с надрывом, видимо в команде светлых голов и прямых рук (таких, как у Вас) не хватает. 8-)

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

Re: Несколько источников данных для стратегии

Непрочитанное сообщение evge » 13 окт 2017, 11:38

Можно ускорить работу индикатора WriteData.

Перед строкой

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

ClearFile(URL);


Добавить строку

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

if (System.IO.File.Exists(URL) && CurrentIndex != MaxIndex) return;


Это условие исключит повторную запись для закрытых баров.

Есть минус, плата за ускорение

Нужно учитывать, что если вдруг будет изменен инструмент или таймфрейм, то необходимо предварительно (или в процессе) удалить папку DataSlot с нужным номером слота из папки

C:\Program Files (x86)\Alfa-Direct Pro
никогда такого не было и вот опять

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

Re: Несколько источников данных для стратегии

Непрочитанное сообщение evge » 13 окт 2017, 12:32

WriteData по идее можно модифицировать чтобы в файлы он сохранял и значения каких то индикаторов для инструмента-донора. Например, хранить в файлах ещё значения индикатора SMA, помимо OHLC и Volume.

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

Сейчас набросаю пример и запишу на видео как я это делал. Простой пример передачи значения SMA от источника и вывод его на приемнике.
никогда такого не было и вот опять

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

Re: Несколько источников данных для стратегии

Непрочитанное сообщение evge » 13 окт 2017, 13:04

phpBB [media]
никогда такого не было и вот опять

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

Re: Несколько источников данных для стратегии

Непрочитанное сообщение evge » 13 окт 2017, 13:11

В видео за кадром осталось исправление кода в индикаторе ReadData в строке

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

MA = double.Parse(Bar[7]);


исправлен индекс на 8

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

MA = double.Parse(Bar[8]);


Приведу полный код примеров

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

function Initialize()
{
IndicatorName = "WriteData";   
PriceStudy = true;   
AddInput("I", Inputs.Candle);   
AddParameter("DataSlot", 0);

AddParameter("PeriodMA", 50, 1); // период для формирования средней скользящей

AddSeries("A");   
}

function Evaluate()
{

// evge 13.10.2017 http://alfadirect4.ru

// получаем данные из индикатора

var S = SMA(I, PeriodMA);

if (DataSlot == 0) return;

string Path = @"DataSlot" + (int)DataSlot + "\\";
System.IO.DirectoryInfo dirInfo = new System.IO.DirectoryInfo(Path);
if (!dirInfo.Exists) dirInfo.Create();

string FileName = String.Format("{0}-{1}-{2}-{3}-{4}-{5}",
BarDate().Year, BarDate().Month, BarDate().Day, BarTime().Hours, BarTime().Minutes, BarTime().Seconds);

string URL = Path + FileName;

if (System.IO.File.Exists(URL) && CurrentIndex != MaxIndex) return;

ClearFile(URL);
WriteLine(URL, String.Format("{0};{1};{2};{3};{4};{5};{6};{7};{8}",  I.Open[0], I.High[0], I.Low[0], I.Close[0], I.Volume[0], I.VolumeBid[0], I.VolumeAsk[0], I.OpenInterest[0], S[0]));

}


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

function Initialize()
{
IndicatorName = "ReadData";
PriceStudy = true;   
AddInput("I", Inputs.Candle);   

AddParameter("DataSlot", 0);

AddShadowSeries("Open", DrawAs.Custom, Color.MediumSeaGreen, 100);   
AddShadowSeries("High", DrawAs.Custom, Color.Silver, 100);   
AddShadowSeries("Low", DrawAs.Custom, Color.Silver, 100);   
AddShadowSeries("Close", DrawAs.Custom, Color.Coral, 100);

AddShadowSeries("MA", DrawAs.Line, Color.Blue, 100);

}

function Evaluate()
{

// evge 13.10.2017 http://alfadirect4.ru

if (DataSlot == 0) return;

string Path = @"DataSlot" + (int)DataSlot + "\\";
System.IO.DirectoryInfo dirInfo = new System.IO.DirectoryInfo(Path);
if (!dirInfo.Exists) dirInfo.Create();

var FileName = String.Format("{0}-{1}-{2}-{3}-{4}-{5}",
BarDate().Year, BarDate().Month, BarDate().Day, BarTime().Hours, BarTime().Minutes, BarTime().Seconds);

var URL = Path + FileName;

string S = "";
if (System.IO.File.Exists(URL))
{
System.IO.StreamReader output = new System.IO.StreamReader(URL);
while (!output.EndOfStream) S += output.ReadLine();
output.Close();
}

string[] Bar = S.Split(';');

// бар найден
if (Bar.Count() > 3)
{
Open = double.Parse(Bar[0]);
High = double.Parse(Bar[1]);
Low = double.Parse(Bar[2]);
Close = double.Parse(Bar[3]);

MA = double.Parse(Bar[8]);

if (Close > Open)
{
   Open.DrawHistogram(Close);
   High.DrawVertical(Close);
   Low.DrawVertical(Open);
}
else
{
   if (Close[0] == Open[0]) Close.DrawDash(Colors["High"], LineStyles.Solid, 1,0);
   else Close.DrawHistogram(Open);
   High.DrawVertical(Open);
   Low.DrawVertical(Close);
}

} // count > 3

}
никогда такого не было и вот опять

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

Re: Несколько источников данных для стратегии

Непрочитанное сообщение evge » 14 окт 2017, 11:04

Есть вариант, вместо графиков и индикаторов WriteData, использовать роботов для записи исторических данных инструментов.

Т.е. код из индикатора WriteData перенести в код стратегии и создавать фиктивных роботов, задача которых не торговать, а записывать исторические данные таймфрейма (+значения индикаторов) инструмента на диск.

Торгующие роботы будут использовать информацию, которую пишут эти фиктивные роботы. Т.е. никаких графиков открытых с индикаторами WriteData не потребуется.

Только роботы.
никогда такого не было и вот опять


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

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

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