Клиентский API > AdirConnector

Разработка с использованием клиентского API
Marcello
Сообщения: 17
Зарегистрирован: 31 авг 2017, 11:42
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Re: AdirConnector

Непрочитанное сообщение Marcello » 28 апр 2019, 12:30

Vit123 писал(а):Можно прикрутить для проверки перед подачи заявки.
Во FrontEndType есть тип FrontEndType.AllTypes, но не проверял ещё как это работает

Я имел ввиду, что в моем "исполнении" заявки и получения IdFI работают нестабильно. Скорее всего я что-то делаю не так в своем проекте, потому что странно, что "статусы" серверов настолько нестабильны во время работы. В терминале подобные "светофоры" видел крайне редко. А тут выходит, что внутри своего метода подачи заявки нужно постоянно проверять коннекты :?

Marcello
Сообщения: 17
Зарегистрирован: 31 авг 2017, 11:42
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Re: AdirConnector

Непрочитанное сообщение Marcello » 28 апр 2019, 16:59

Разобрался с заявками. Проблема была в размере лота, который я получал неправильно. Из-за этого количество в заявке было нулевым, но узнать об этом можно только в лог-файле "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);               
    }
}

Marcello
Сообщения: 17
Зарегистрирован: 31 авг 2017, 11:42
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Re: AdirConnector

Непрочитанное сообщение Marcello » 04 май 2019, 18:31

Хочу сделать экспорт котировок в файл. Предполагаю, что для этого нужно использовать ChartHistoryManager, но дальше этого "предположения" сдвинуться не могу. Может кто-то разбирался в этой части?

Vit123
Сообщения: 19
Зарегистрирован: 29 окт 2018, 09:49
Благодарил (а): 8 раз
Поблагодарили: 4 раза

Re: AdirConnector

Непрочитанное сообщение Vit123 » 05 май 2019, 17:19

Поддерживаю вопрос.
Как подписаться на график 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()
                };

А вот как получить и расшифровать данные?

piyyy
Сообщения: 97
Зарегистрирован: 15 янв 2018, 16:36
Благодарил (а): 4 раза
Поблагодарили: 8 раз

Re: AdirConnector

Непрочитанное сообщение piyyy » 06 май 2019, 17:18

Marcello, нужны котировки или график?

Vit123, что значит "расшифровать данные?". В каком виде они приходят? В ChartHistoryManager есть несколько событий. Подписывайся на них и смотри какое тебе нужно.

PS Если такие проблемы, то лучше не эксперементировать, а использовать ADClientSDK.dll. Там новичкам легче разобраться.

Если нужны маркет трэйды, то скорее всего это будет так

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

ConnectionManager.Instance.OnMarketTrade += NewMarketTrade;
SubscriptionManager.Instance.SubscribeStream(SubscribeFilterType.MarketTrades, /*IdFi*/);

Marcello
Сообщения: 17
Зарегистрирован: 31 авг 2017, 11:42
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Re: AdirConnector

Непрочитанное сообщение Marcello » 06 май 2019, 22:28

Экспорт работает, НО...

Событие обрабатываю так:

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

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 );

Возвращает все данные, кроме текущего дня. Почему?

piyyy
Сообщения: 97
Зарегистрирован: 15 янв 2018, 16:36
Благодарил (а): 4 раза
Поблагодарили: 8 раз

Re: AdirConnector

Непрочитанное сообщение piyyy » 06 май 2019, 23:12

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);

Marcello
Сообщения: 17
Зарегистрирован: 31 авг 2017, 11:42
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Re: AdirConnector

Непрочитанное сообщение Marcello » 06 май 2019, 23:22

piyyy писал(а):Зачем DateTime.Today.AddDays(-20)?

Потому что я хочу запросить с даты -20 дней от текущей. Возвращается с 16 апреля, тут все верно. Но почему-то по "вчерашний" день, т.е. по 3 мая. Попробую через Core.ConnectionManager.Instance.SendPacket.

piyyy
Сообщения: 97
Зарегистрирован: 15 янв 2018, 16:36
Благодарил (а): 4 раза
Поблагодарили: 8 раз

Re: AdirConnector

Непрочитанное сообщение piyyy » 06 май 2019, 23:31

Marcello, аргумент CenterPoint: DateTime.Now(), а Days: 20.

Marcello
Сообщения: 17
Зарегистрирован: 31 авг 2017, 11:42
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Re: AdirConnector

Непрочитанное сообщение Marcello » 07 май 2019, 16:10

Не получается через Core.ConnectionManager.Instance.SendPacket. Не подскажете, каким событием ловить ответ?


Вернуться в «Клиентский API»

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

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