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

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

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

Непрочитанное сообщение evgen000 » 12 окт 2017, 11:17

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

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

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

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

Вопрос уже 2 года поднимается :)

В последних релизах не было информации о том что это уже реализовано :(

Сегодня вебинар по роботам. Можно в очередной раз спросить у Дмитрия (ox, oxi) :)
никогда такого не было и вот опять

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

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

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

На мой взгляд это такая базовая и необходимая вещь, не понимаю почему ее не реализовывают.

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

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

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

Возможно, какие-то сложности имеются в реализации.

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

Зачаток этого есть в стратегиях. Обратите внимание на табличку источников для стратегии в конструкторе. Там можно (было ранее) задать более одного источника, но это не работало.

Да и в коде по умолчанию источник Input1... предполагалось Input2 и так далее...
никогда такого не было и вот опять

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

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

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

Сейчас костылём, но можно сделать общение двух индикаторов\стратегий между собой на разных ТФ и разных инструментах.

Общение можно сделать через файлы.

Каждый из скриптов пишет свой файл, и каждый из них читает чужой файл для анализа.
никогда такого не было и вот опять

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

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

Непрочитанное сообщение evgen000 » 12 окт 2017, 15:20

Спасибо, буду ждать когда наконец реализуют эту возможность

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

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

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

Чуть попозже покажу пример на файлах. Спортивный интерес проснулся. Решил попробовать. :) уже почти готов пример
никогда такого не было и вот опять

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

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

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

Демо скриншот :)

На график GAZP накладываем поверх график SBER

ReadWriteData-01.png
ReadWriteData-01.png (40.79 КБ) 10341 просмотр
никогда такого не было и вот опять

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

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

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

Идея в следующем!

0. Создать на диске C:\temp\AD\ папку data1 и data2
1. Необходимо открыть 2 окна графика разных инструментов с одинаковым таймфреймом.
2. На каждом графике открыть по одному индикатору (разному!!!) пишущему данные графика в файлы. Это два индикатора WriteData1 и WriteData2
3. На первом графике добавить ещё один индикатор-пример ReadDataIndicator для демонстрации чтения данных из файлов и рисования ShadowSerie свечек, поверх текущего графика.

В примере читаются обе папки данных, но выводится только данные от второго индикатора. Ничего не мешает делать любые расчеты с массивом Bar1 и Bar2, где хранятся данные в формате
индекс в массиве - описание
0 - Open
1 - High
2 - Low
3 - Close
4 - Volume
5 - VolumeBid
6 - VolumeAsk
7 - OpenInterest

В данном примере вообще запись и чтение Data1 в Bar1[] избыточное, т.е. можно обойтись просто данными от серии Input текущего графика и его инструмента + запись данных в файлы от второго графика индикатором WriteData2 для их последующего чтения в первом графике. Но если вдруг надо писать от разных графиков данные в папки, а обработку проводить в третьем графике, то такая возможность уже требуется \ пригодится. Тут главное идея и пример реализации чтения этих данных. Либо придумать самостоятельно собственный формат хранения и их считывания.

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

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

function Initialize()
{
IndicatorName = "WriteData1";   
PriceStudy = true;   
AddInput("I", Inputs.Candle);   
AddSeries("A");
}

function Evaluate()
{

string Path = "C:\\temp\\AD\\data1\\";
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;
ClearFile(URL);
WriteLine(URL, String.Format("{0};{1};{2};{3};{4};{5};{6};{7}",  I.Open[0], I.High[0], I.Low[0], I.Close[0], I.Volume[0], I.VolumeBid[0], I.VolumeAsk[0], I.OpenInterest[0]));

}


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

function Initialize()
{
IndicatorName = "WriteData2";   
PriceStudy = true;   
AddInput("I", Inputs.Candle);   
AddSeries("A");   
}

function Evaluate()
{

string Path = "C:\\temp\\AD\\data2\\";
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;
ClearFile(URL);
WriteLine(URL, String.Format("{0};{1};{2};{3};{4};{5};{6};{7}",  I.Open[0], I.High[0], I.Low[0], I.Close[0], I.Volume[0], I.VolumeBid[0], I.VolumeAsk[0], I.OpenInterest[0]));

}


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

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

AddShadowSeries("Open", DrawAs.Custom, Color.Green, 100);   
AddShadowSeries("High", DrawAs.Custom, Color.Black, 100);   
AddShadowSeries("Low", DrawAs.Custom, Color.Black, 100);   
AddShadowSeries("Close", DrawAs.Custom, Color.Red, 100);

}

function Evaluate()
{

var Path1 = "C:\\temp\\AD\\data1\\";
var Path2 = "C:\\temp\\AD\\data2\\";

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

var URL1 = Path1 + FileName;
var URL2 = Path2 + FileName;

string S1 = "";
if (System.IO.File.Exists(URL1))
{
System.IO.StreamReader output1 = new System.IO.StreamReader(URL1);
while (!output1.EndOfStream)
{
 S1 += output1.ReadLine();
}
output1.Close();
}

string S2 = "";
if (System.IO.File.Exists(URL2))
{
System.IO.StreamReader output2 = new System.IO.StreamReader(URL2);
while (!output2.EndOfStream)
{
 S2 += output2.ReadLine();
}
output2.Close();
}

string[] Bar1 = S1.Split(';');
string[] Bar2 = S2.Split(';');

if (Bar1.Count() > 3 && Bar2.Count() > 3)
{
Open = double.Parse(Bar2[0]);
High = double.Parse(Bar2[1]);
Low = double.Parse(Bar2[2]);
Close = double.Parse(Bar2[3]);

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
Администратор
Сообщения: 1652
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 64 раза
Поблагодарили: 303 раза
Контактная информация:

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

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

Пример на 5 минутках.

Если переключать индикатор сначала первый, а затем второй на пятиминутках, видно как сначала данные искажены, т.к. файлы ещё не сформировались, но при этом часть файлов подошли под описание считались и отобразились в виде свечек, но от другого таймфрейма. Это быстро исправляется как только второй индикатор запишет данные нового ТФ в файлы. В связи с чем правильнее конечно сначала переключать на другой ТФ второй индикатор-донор, что бы он успел записать новые данные, а уже затем первый индикатор где отображаем в т.ч. и анализ.

ReadWriteData-02.png
никогда такого не было и вот опять


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

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

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