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

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

никогда такого не было и вот опять
						Re: Несколько источников данных для стратегии
На мой взгляд это такая базовая и необходимая вещь, не понимаю почему ее не реализовывают.
			
									
						- evge
- Администратор
- Сообщения: 1817
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 375 раз
- Контактная информация:
Re: Несколько источников данных для стратегии
Возможно, какие-то сложности имеются в реализации.
Согласен, огромные возможности откроются если появится возможность получать данные от других инструментов и таймфреймов.
Зачаток этого есть в стратегиях. Обратите внимание на табличку источников для стратегии в конструкторе. Там можно (было ранее) задать более одного источника, но это не работало.
Да и в коде по умолчанию источник Input1... предполагалось Input2 и так далее...
			
									
						Согласен, огромные возможности откроются если появится возможность получать данные от других инструментов и таймфреймов.
Зачаток этого есть в стратегиях. Обратите внимание на табличку источников для стратегии в конструкторе. Там можно (было ранее) задать более одного источника, но это не работало.
Да и в коде по умолчанию источник Input1... предполагалось Input2 и так далее...
никогда такого не было и вот опять
						- evge
- Администратор
- Сообщения: 1817
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 375 раз
- Контактная информация:
Re: Несколько источников данных для стратегии
Сейчас костылём, но можно сделать общение двух индикаторов\стратегий между собой на разных ТФ и разных инструментах.
Общение можно сделать через файлы.
Каждый из скриптов пишет свой файл, и каждый из них читает чужой файл для анализа.
			
									
						Общение можно сделать через файлы.
Каждый из скриптов пишет свой файл, и каждый из них читает чужой файл для анализа.
никогда такого не было и вот опять
						Re: Несколько источников данных для стратегии
Спасибо, буду ждать когда наконец реализуют эту возможность
			
									
						- evge
- Администратор
- Сообщения: 1817
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 375 раз
- Контактная информация:
Re: Несколько источников данных для стратегии
Чуть попозже покажу пример на файлах. Спортивный интерес проснулся. Решил попробовать.  уже почти готов пример
 уже почти готов пример
			
									
						 уже почти готов пример
 уже почти готов примерникогда такого не было и вот опять
						- evge
- Администратор
- Сообщения: 1817
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 375 раз
- Контактная информация:
Re: Несколько источников данных для стратегии
Демо скриншот 
На график GAZP накладываем поверх график SBER
			
									
						
На график GAZP накладываем поверх график SBER
никогда такого не было и вот опять
						- evge
- Администратор
- Сообщения: 1817
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 375 раз
- Контактная информация:
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
- Администратор
- Сообщения: 1817
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 375 раз
- Контактная информация:
Re: Несколько источников данных для стратегии
Пример на 5 минутках.
Если переключать индикатор сначала первый, а затем второй на пятиминутках, видно как сначала данные искажены, т.к. файлы ещё не сформировались, но при этом часть файлов подошли под описание считались и отобразились в виде свечек, но от другого таймфрейма. Это быстро исправляется как только второй индикатор запишет данные нового ТФ в файлы. В связи с чем правильнее конечно сначала переключать на другой ТФ второй индикатор-донор, что бы он успел записать новые данные, а уже затем первый индикатор где отображаем в т.ч. и анализ.
			
									
						Если переключать индикатор сначала первый, а затем второй на пятиминутках, видно как сначала данные искажены, т.к. файлы ещё не сформировались, но при этом часть файлов подошли под описание считались и отобразились в виде свечек, но от другого таймфрейма. Это быстро исправляется как только второй индикатор запишет данные нового ТФ в файлы. В связи с чем правильнее конечно сначала переключать на другой ТФ второй индикатор-донор, что бы он успел записать новые данные, а уже затем первый индикатор где отображаем в т.ч. и анализ.
никогда такого не было и вот опять
						Вернуться в «Общие вопросы по разработке»
Кто сейчас на конференции
Сейчас этот форум просматривают: Bing [Bot] и 21 гость
