Общие вопросы по разработке > Несколько источников данных для стратегии
Несколько источников данных для стратегии
Возможно ли использовать несколько источников данных для стратегии, к примеру для реализации арбитража ?. Если нет, планируется ли такая возможность кто-нибудь в курсе ?
- evge
- Администратор
- Сообщения: 1807
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 360 раз
- Контактная информация:
Re: Несколько источников данных для стратегии
Вопрос уже 2 года поднимается 
В последних релизах не было информации о том что это уже реализовано
Сегодня вебинар по роботам. Можно в очередной раз спросить у Дмитрия (ox, oxi)

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

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

никогда такого не было и вот опять
Re: Несколько источников данных для стратегии
На мой взгляд это такая базовая и необходимая вещь, не понимаю почему ее не реализовывают.
- evge
- Администратор
- Сообщения: 1807
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 360 раз
- Контактная информация:
Re: Несколько источников данных для стратегии
Возможно, какие-то сложности имеются в реализации.
Согласен, огромные возможности откроются если появится возможность получать данные от других инструментов и таймфреймов.
Зачаток этого есть в стратегиях. Обратите внимание на табличку источников для стратегии в конструкторе. Там можно (было ранее) задать более одного источника, но это не работало.
Да и в коде по умолчанию источник Input1... предполагалось Input2 и так далее...
Согласен, огромные возможности откроются если появится возможность получать данные от других инструментов и таймфреймов.
Зачаток этого есть в стратегиях. Обратите внимание на табличку источников для стратегии в конструкторе. Там можно (было ранее) задать более одного источника, но это не работало.
Да и в коде по умолчанию источник Input1... предполагалось Input2 и так далее...
никогда такого не было и вот опять
- evge
- Администратор
- Сообщения: 1807
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 360 раз
- Контактная информация:
Re: Несколько источников данных для стратегии
Сейчас костылём, но можно сделать общение двух индикаторов\стратегий между собой на разных ТФ и разных инструментах.
Общение можно сделать через файлы.
Каждый из скриптов пишет свой файл, и каждый из них читает чужой файл для анализа.
Общение можно сделать через файлы.
Каждый из скриптов пишет свой файл, и каждый из них читает чужой файл для анализа.
никогда такого не было и вот опять
Re: Несколько источников данных для стратегии
Спасибо, буду ждать когда наконец реализуют эту возможность
- evge
- Администратор
- Сообщения: 1807
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 360 раз
- Контактная информация:
Re: Несколько источников данных для стратегии
Чуть попозже покажу пример на файлах. Спортивный интерес проснулся. Решил попробовать.
уже почти готов пример

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

На график GAZP накладываем поверх график SBER
никогда такого не было и вот опять
- evge
- Администратор
- Сообщения: 1807
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 360 раз
- Контактная информация:
Re: Несколько источников данных для стратегии
Идея в следующем!
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 для их последующего чтения в первом графике. Но если вдруг надо писать от разных графиков данные в папки, а обработку проводить в третьем графике, то такая возможность уже требуется \ пригодится. Тут главное идея и пример реализации чтения этих данных. Либо придумать самостоятельно собственный формат хранения и их считывания.
Код индикаторов
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
- Администратор
- Сообщения: 1807
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 360 раз
- Контактная информация:
Re: Несколько источников данных для стратегии
Пример на 5 минутках.
Если переключать индикатор сначала первый, а затем второй на пятиминутках, видно как сначала данные искажены, т.к. файлы ещё не сформировались, но при этом часть файлов подошли под описание считались и отобразились в виде свечек, но от другого таймфрейма. Это быстро исправляется как только второй индикатор запишет данные нового ТФ в файлы. В связи с чем правильнее конечно сначала переключать на другой ТФ второй индикатор-донор, что бы он успел записать новые данные, а уже затем первый индикатор где отображаем в т.ч. и анализ.
Если переключать индикатор сначала первый, а затем второй на пятиминутках, видно как сначала данные искажены, т.к. файлы ещё не сформировались, но при этом часть файлов подошли под описание считались и отобразились в виде свечек, но от другого таймфрейма. Это быстро исправляется как только второй индикатор запишет данные нового ТФ в файлы. В связи с чем правильнее конечно сначала переключать на другой ТФ второй индикатор-донор, что бы он успел записать новые данные, а уже затем первый индикатор где отображаем в т.ч. и анализ.
никогда такого не было и вот опять
Вернуться в «Общие вопросы по разработке»
Кто сейчас на конференции
Сейчас этот форум просматривают: Asp и 6 гостей