Страница 6 из 12
Re: AdirConnector
Добавлено: 28 апр 2019, 12:30
Marcello
Vit123 писал(а):Можно прикрутить для проверки перед подачи заявки.
Во FrontEndType есть тип FrontEndType.AllTypes, но не проверял ещё как это работает
Я имел ввиду, что в моем "исполнении" заявки и получения IdFI работают нестабильно. Скорее всего я что-то делаю не так в своем проекте, потому что странно, что "статусы" серверов настолько нестабильны во время работы. В терминале подобные "светофоры" видел крайне редко. А тут выходит, что внутри своего метода подачи заявки нужно постоянно проверять коннекты
Re: AdirConnector
Добавлено: 28 апр 2019, 16:59
Marcello
Разобрался с заявками. Проблема была в размере лота, который я получал неправильно. Из-за этого количество в заявке было нулевым, но узнать об этом можно только в лог-файле "error....log". Для получения размера лота и шага цены по IdFI сочинил метод, который может не во всем оптимален, но пока ни разу не подвел.
Код: Выделить всё
private void getTickSize(int xIdFI, out double xTickSize, out int xLotSize)
{
xTickSize = 0;
xLotSize = 0;
if (xIdFI == -1) return;
try
{
Core.SubscriptionManager.Instance.SubscribeStream(Core.SubscribeFilterType.FinInfoExt, xIdFI);
FinInfoExtEntity finInfoExtEntity = null;
bool notFound = true;
int counter = 0;
while (notFound && counter++ < 5) {
notFound = !Core.DataStorageShared.FinInfoExt.TryGetValue(xIdFI, out finInfoExtEntity);
if (notFound) waiting(); // простенький метод, который ждет 1 секунду, прежде чем продолжить
}
if (notFound) return;
if (finInfoExtEntity == null) return;
xTickSize = finInfoExtEntity.PriceStep;
xLotSize = finInfoExtEntity.Lot;
}
finally
{
Core.SubscriptionManager.Instance.UnSubscribeStream(Core.SubscribeFilterType.FinInfoExt, xIdFI);
}
}
Re: AdirConnector
Добавлено: 04 май 2019, 18:31
Marcello
Хочу сделать экспорт котировок в файл. Предполагаю, что для этого нужно использовать ChartHistoryManager, но дальше этого "предположения" сдвинуться не могу. Может кто-то разбирался в этой части?
Re: AdirConnector
Добавлено: 05 май 2019, 17:19
Vit123
Поддерживаю вопрос.
Как подписаться на график ensh привел пример:
Код: Выделить всё
// график
var rq = new ArchiveRequestEntity()
{
IdRequest = 1,
IdFi = 218182,
TimeFrame = BaseTimeFrame.Hour,
CandleType = CandleType.Standard,
DaysCount = -100,
MaximumDate = DateTime.MaxValue,
Created = Core.ConnectionManager.Instance.GetServerTime()
};
А вот как получить и расшифровать данные?
Re: AdirConnector
Добавлено: 06 май 2019, 17:18
piyyy
Marcello, нужны котировки или график?
Vit123, что значит "расшифровать данные?". В каком виде они приходят? В ChartHistoryManager есть несколько событий. Подписывайся на них и смотри какое тебе нужно.
PS Если такие проблемы, то лучше не эксперементировать, а использовать ADClientSDK.dll. Там новичкам легче разобраться.
Если нужны маркет трэйды, то скорее всего это будет так
Код: Выделить всё
ConnectionManager.Instance.OnMarketTrade += NewMarketTrade;
SubscriptionManager.Instance.SubscribeStream(SubscribeFilterType.MarketTrades, /*IdFi*/);
Re: AdirConnector
Добавлено: 06 май 2019, 22:28
Marcello
Экспорт работает, НО...
Событие обрабатываю так:
Код: Выделить всё
Core.ChartHistoryManager.Instance.DataRecieved += Instance_DataRecieved;
private void Instance_DataRecieved(Core.ChartData data, int where)
{
SortedList<DateTime, ICollection<DataPoint>> thisList = data.GetList();
var Export = new StringBuilder();
foreach (var OneDay in thisList.Values)
{
foreach (var dataPoint in OneDay.OfType<OhlcvDataPointEntity>())
{
String Text = string.Format(
"{0:yyyyMMdd};{1:HHmmss};{2:0.0000000};{3:0.0000000};{4:0.0000000};{5:0.0000000};{6}",
dataPoint.DateTime, dataPoint.DateTime, dataPoint.Open, dataPoint.High, dataPoint.Low, dataPoint.Close, dataPoint.Volume);
Export.AppendLine(Text.Replace(',','.'));
}
}
if (InvokeRequired) { Invoke(new MethodInvoker(delegate { memoLog.AppendText(Export + Environment.NewLine); })); }
}
Запрос делаю так:
Код: Выделить всё
Core.ChartHistoryManager.Instance.ChartRequestByDays( CandleType.Standard, 1, idFI, DateTime.Today.AddDays(-20), BaseTimeFrame.Hour.ToInt(), 100, true, "", 100 );
Возвращает все данные, кроме текущего дня. Почему?
Re: AdirConnector
Добавлено: 06 май 2019, 23:12
piyyy
Marcello, Если я правильно понял эти данные запрашиваются из локальной бд при вызове этого метода. Зачем DateTime.Today.AddDays(-20)? Скорее всего нужно текущий день указывать.
На первой странице ветки написано как запрашивать график
Код: Выделить всё
// график
var rq = new ArchiveRequestEntity()
{
IdRequest = 1,
IdFi = 218182,
TimeFrame = BaseTimeFrame.Hour,
CandleType = CandleType.Standard,
DaysCount = -100,
MaximumDate = DateTime.MaxValue,
Created = Core.ConnectionManager.Instance.GetServerTime()
};
Core.ConnectionManager.Instance.SendPacket(rq, FrontEndType.BirzArchAndMediaServer);
Re: AdirConnector
Добавлено: 06 май 2019, 23:22
Marcello
piyyy писал(а):Зачем DateTime.Today.AddDays(-20)?
Потому что я хочу запросить с даты -20 дней от текущей. Возвращается с 16 апреля, тут все верно. Но почему-то по "вчерашний" день, т.е. по 3 мая. Попробую через
Core.ConnectionManager.Instance.SendPacket.
Re: AdirConnector
Добавлено: 06 май 2019, 23:31
piyyy
Marcello, аргумент CenterPoint: DateTime.Now(), а Days: 20.
Re: AdirConnector
Добавлено: 07 май 2019, 16:10
Marcello
Не получается через Core.ConnectionManager.Instance.SendPacket. Не подскажете, каким событием ловить ответ?