Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Августа 10, 2022, 08:09:06 pm
Начало Помощь Поиск Войти Регистрация
Новости:

Просмотр сообщений

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - rom_hm

Pages: [1]
1
По последнему вопросу нашел причину, вопрос закрыт.

2
Добрый день!
Использую последовательный вызов gethistorydata по всем инструментам MOEX. Фрагмент кода ниже.
                        Get_Transaq_History("SNGS", 4, 3, true);  // Данные получаю
                        Get_Transaq_History("SNGSP", 4, 3, true);  // Нет данных
                        Get_Transaq_History("MGTS", 4, 3, true);  //  Нет данных
                        Get_Transaq_History("GMKN", 4, 3, true);  // Нет данных
                        Get_Transaq_History("SBER", 4, 3, true);  // Нет данных
                        ...


При использовании gethistorydata с period=5 (Сутки) получаю данные корректно (по ~200 инструментам).
При использовании gethistorydata с period=4 (Час) получаю данные после первых нескольких команд (1-3), затем программа завершается.
В логе вижу то, что по SNGS данные получил, а по SNGSP данных нет (см. ниже).
Где искать причину ошибки?

09:18:05.363 SendCommand: <command id="gethistorydata"><security><board>TQBR</board><seccode>SNGS</seccode></security><period>4</period><count>3</count><reset>true</reset></command>
09:19:15.825 ServerData: data1<candles secid="59" board="TQBR" seccode="SNGS" period="4" status="1">
<candle date="22.07.2022 16:00:00" open="26.325" close="26.365" high="26.47" low="26.28" volume="8893"/>
<candle date="22.07.2022 17:00:00" open="26.335" close="26.265" high="26.385" low="26.07" volume="14967"/>
<candle date="22.07.2022 18:00:00" open="26.25" close="26.365" high="26.365" low="26.215" volume="10127"/>
</candles>data2
09:19:15.826 Gethistorydata ServerReply: <result success="true"/>
09:19:15.826 SendCommand: <command id="gethistorydata"><security><board>TQBR</board><seccode>SNGSP</seccode></security><period>4</period><count>3</count><reset>true</reset></command>
Это конец логфайла.

3
Последний вопрос снимаю. Причину аварийного завершения нашел в колбеке.

4
Программа аварийно завершается при повторном вызове Get_Transaq_History.
Проверил, что в ConnectorSendCommand(cmd) уже есть FreeMemory. А в Get_Transaq_History есть вызов ConnectorSendCommand(cmd).
Т.е. во фрагменте кода ниже при каждом вызове Get_Transaq_History вызывается FreeMemory.
Как определить причину ошибки?
string cmd = "<command id=\"server_status\"/>";
string res = TXmlConnector.ConnectorSendCommand(cmd);
if (res == "<result success=\"true\"/>") {
Get_Transaq_History("IRGZ", 5, 3, true); // Получаю результат в коллбеке
}
res = TXmlConnector.ConnectorSendCommand(cmd);
if (res == "<result success=\"true\"/>"){
Get_Transaq_History(“GMKN”, 5, 3, true); // На этом программа аварийно завершается
}


Так выглядит ConnectorSendCommand (из примера, без изменений):
public static String ConnectorSendCommand(String command)
{
IntPtr pData = MarshalUTF8.StringToHGlobalUTF8(command);
   IntPtr pResult = SendCommand(pData);

   String result = MarshalUTF8.PtrToStringUTF8(pResult);

   Marshal.FreeHGlobal(pData);
   FreeMemory(pResult);

   return result;
}

Так выглядит Get_Transaq_History:
void Get_Transaq_History(string Seccode, int TimeframeID, int HistoryLength, bool ResetFlag)
{
string cmd = "<command id=\"gethistorydata\"><security><board>TQBR</board><seccode>" + Seccode + "</seccode></security><period>" + TimeframeID.ToString() + "</period><count>" + HistoryLength.ToString() + "</count><reset>true</reset></command>";

log.WriteLog("SendCommand: " + cmd);
string res = TXmlConnector.ConnectorSendCommand(cmd);
log.WriteLog("Gethistorydata ServerReply: " + res);
}

5
Сергей, спасибо за пояснение.
Последовал вашему совету и по gethistorydata получил результат.
Однако последующий запуск gethistorydata привел к завершению приложения без получения данных.
Это фрагмент кода:
string cmd = "<command id=\"server_status\"/>";
string res = TXmlConnector.ConnectorSendCommand(cmd);
if (res == "<result success=\"true\"/>") {
  Get_Transaq_History(DTS.t_security[0].security_code, 5, 3, true); // Получаю результат в коллбеке
}
res = TXmlConnector.ConnectorSendCommand(cmd);
if (res == "<result success=\"true\"/>") {
   Get_Transaq_History(DTS.t_security[1].security_code, 5, 3, true); // На этом программа завершается
}

Это фрагмент log:
10:39:57.218 SendCommand: <command id="gethistorydata"><security><board>TQBR</board><seccode>IRGZ</seccode></security><period>5</period><count>3</count><reset>false</reset></command>
10:39:57.258 Gethistorydata ServerReply: <result success="true"/>
10:40:10.140 ServerData: data1<candles secid="0" board="TQBR" seccode="IRGZ" period="5" status="1">
<candle date="16.02.2022 00:00:00" open="14.1" close="14.18" high="14.2" low="14.1" volume="10285"/>
<candle date="17.02.2022 00:00:00" open="14.14" close="14.2" high="14.2" low="14.06" volume="834"/>
<candle date="18.02.2022 00:00:00" open="14.18" close="14.18" high="14.24" low="14.08" volume="2739"/>
</candles>data2
10:40:24.663 SendCommand: <command id="gethistorydata"><security><board>TQBR</board><seccode>GMKN</seccode></security><period>5</period><count>3</count><reset>false</reset></command>
10:40:24.667 Gethistorydata ServerReply: <result success="true"/>

Это фрагмент xdf:
103954.399604 [6920] [15512] <cmd> <command id="server_status"/>
103954.399975 [6920] [15512] <res> [R] <result success="true"/>
103954.400976 [6920] [clbk] <info>
  • [204u] <overnight status="false"/>

103955.164020 [6920] [clbk] <info>
  • [763014u] <server_status sys_ver="629" build="17" server_tz="Russian Standard Time" id="6" connected="true"/>

103957.218012 [6920] [15512] <cmd> <command id="gethistorydata"><security><board>TQBR</board><seccode>IRGZ</seccode></security><period>5</period><count>3</count><reset>false</reset></command>
103957.258965 [6920] [15512] <res> [R] <result success="true"/>
104011.348304 [6920] [15512] <cmd> <command id="server_status"/>
104011.349305 [6920] [15512] <res> [R] <result success="true"/>
104024.663326 [6920] [15512] <cmd> <command id="gethistorydata"><security><board>TQBR</board><seccode>GMKN</seccode></security><period>5</period><count>3</count><reset>false</reset></command>
104024.666320 [6920] [15512] <res> [R] <result success="true"/>
104029.801811 [6920] [15512] <cmd> <command id="server_status"/>
104029.801811 [6920] [15512] <res> [R] <result success="true"/>

Можно ли последовательно выполнять gethistorydata и если “Да”, то прошу подсказать как. Мне нужно последовательно получить историю по ~200 инструментам и сохранить их в DTS.t_candles для последующей обработки.

6
Сергей, спасибо за пояснение.
Моя задача на основании предоставленного примера получить исторические данные по свечам. Для этого добавил в MainForm.cs вызов Get_Transaq_History:
      void btn_Connect_Click(object sender, EventArgs e)
      {
         // если подключен или подключается
            if (bConnected || bConnecting)
         {
            Transaq_Disconnect();
         }
         else
         {
                if (!bConnecting) Transaq_Connect();
         }

            // получаем исторические данные   
            Get_Transaq_History(1544, 5, 10, true); // (GAZP, сутки, 10 свечей, true)

        }
И в connector.cs примитивную обработку свечных данных:
                // данные по свечам
                if (section == "candles")  //Get_Transaq_History?
                {
                    log.WriteLog("candles111");

                    if (ename == "candles")
                    {

                    }
                    if (ename == "candle")
                    {

                    }
                }
Но "candles111" в журнале нет. В чем может быть причина?

7
Добрый день! Прочитал всю ветку, но так и не нашел ответа на первоначальный вопрос: Как с помощью gethistorydata получать исторические данные через TXmlConnector на C#? Если у кого получилось, поделитесь, пож.

Pages: [1]


Войти

Powered by MySQL Powered by PHP Powered by SMF 2.0.10 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!