Ошибки при подключении к Coinbase через FIX8 C++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Ошибки при подключении к Coinbase через FIX8 C++

Сообщение Anonymous »

Я хочу подключиться к обмену рыночными данными Coinbase через протокол FIX, используя FIX8 C++ Framework. Я создал и успешно запустил тестовые примеры на своем Mac X86, но у меня возникают проблемы при написании собственного кода для подключения к Coinbase.
Чтобы воспроизвести мои ошибки, вам может потребоваться выполните следующую команду, чтобы собрать и настроить FIX8 так, как я его настроил.

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

CXXFLAGS="-std=c++17 -stdlib=libc++" LDFLAGS="-stdlib=libc++ -lPocoNetSSL"  ./bootstrap --with-poco=/usr/local --enable-ssl
&& CXXFLAGS="-std=c++17 -stdlib=libc++" LDFLAGS="-stdlib=libc++ -lPocoNetSSL" ./configure --with-poco=/usr/local --enable-ssl --enable-debug
&& make
&& make install
Моя конкретная проблема заключается в том, что я не могу успешно отправить сообщение LOGON на tcp+ssl://fix-md.exchange.coinbase.com:6121. Я заметил, что заголовок и трейлер сообщений входа в систему FIX, которые я генерирую, никогда не вычисляют поля CheckSum, BodyLength и MsgType (см. журналы сеансов и журналы протоколов ниже, чтобы понять, что я имею в виду). Обратите внимание, что в настоящее время поля RawData и RawDataLength содержат ненужные значения.
Фрагмент кода для входа в систему:

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

Message *CoinbaseSession::generate_logon(const unsigned heartbtint, const FIX8::f8String davi) {
TEX::Logon *nos(new TEX::Logon(false));
*nos encode(&ptr);
return nos;
}

//-----------------------------------------------------------------------------------------
bool CoinbaseRouter::operator() (const TEX::Logon *msg) const
{
cout  logon_sent
logon_sent => session_terminated
session_terminated => not_logged_in
not_logged_in => logon_sent
logon_sent => session_terminated
Одна из вещей, которую я пробовал, — это вручную указать поля BodyLength, MsgType и CheckSum через фрагмент

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

char output[FIX8_MAX_MSG_LENGTH + HEADER_CALC_OFFSET], *ptr(output);
nos->encode(&ptr);
Хотя это позволяет мне правильно сгенерировать полное сообщение FIX со всеми заполненными полями, я по-прежнему не получаю никаких сообщений обратно от Coinbase. Он продолжает просто сбрасывать соединение.
Я знаю, что это не связано с неверным паролем/неверной подписью, поскольку я сделал то же самое с быстрым исправлением Python, и Coinbase фактически отправляет Обратно сообщение о выходе из системы.
Я также подозреваю, что основная проблема на самом деле не может быть полностью связана с тем, как я создаю сообщение о входе в систему, поскольку существуют проблемы с одноранговым соединением, поэтому я дополнительно предоставляю сеанс /Журналы протокола, а также мои файл client.xml. Возможно, я что-то неправильно настраиваю?
Журнал сеанса:

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

0000001 2024-11-13 18:13:22.450969000 A session.cpp:178 Info  Starting session
0000002 2024-11-13 18:13:22.451015000 A connection.cpp:350 Info  Trying to connect to: 44.196.185.199:6121 (1) secured
0000003 2024-11-13 18:13:22.670957000 A connection.cpp:358 Info  Connection successful
0000004 2024-11-13 18:13:22.670994000 A session.cpp:185 Info  Session connected
0000005 2024-11-13 18:13:22.671065000 A session.cpp:1052 Debug send_process: _next_send_seq = 1
0000006 2024-11-13 18:13:22.671106000 A session.cpp:1066 Debug Sending:header ("header")
BeginString (8): FIXT.1.1
BodyLength (9): 0
MsgType (35):
SenderCompID (49): API_KEY_REDACTED
TargetCompID (56): Coinbase
MsgSeqNum (34): 1
SendingTime (52): 20241114-02:13:22.671
Logon ("A")
EncryptMethod (98): 0
HeartBtInt (108): 10
RawDataLength (95): 5
RawData (96): weras
Username (553): API_KEY_REDACTED
Password (554): API_PASSWORD_REDACTED
DefaultApplVerID (1137): 9
trailer ("trailer")
CheckSum (10):

0000007 2024-11-13 18:13:32.697968000 B connection.cpp:140 Error Peer reset connection: sockRead: connection gone
0000008 2024-11-13 18:13:32.698165000 B connection.cpp:148 Info  FIXReader: 0 messages processed, 0 dropped, 1 invalid
0000009 2024-11-13 18:13:32.698199000 A connection.cpp:324 Debug Connection::stop()
0000010 2024-11-13 18:13:32.698205000 A connection.cpp:328 Debug Connection::stop() => _reader.stop()
0000011 2024-11-13 18:13:32.950459000 A connection.cpp:324 Debug Connection::stop()
0000012 2024-11-13 18:13:32.950474000 A connection.cpp:328 Debug Connection::stop() => _reader.stop()
0000013 2024-11-13 18:13:33.255797000 A session.cpp:178 Info  Starting session
0000014 2024-11-13 18:13:33.255807000 A connection.cpp:350 Info  Trying to connect to: 44.196.185.199:6121 (1) secured
0000015 2024-11-13 18:13:33.486268000 A connection.cpp:358 Info  Connection successful
0000016 2024-11-13 18:13:33.486301000 A session.cpp:185 Info  Session connected
0000017 2024-11-13 18:13:33.486324000 A session.cpp:1138 Info  Last sent: 528, last received: 256
0000018 2024-11-13 18:13:33.486349000 A session.cpp:1052 Debug send_process: _next_send_seq = 528
0000019 2024-11-13 18:13:33.486375000 A session.cpp:1066 Debug Sending:header ("header")
BeginString (8): FIXT.1.1
BodyLength (9): 0
MsgType (35):
SenderCompID (49): API_KEY_REDACTED
TargetCompID (56): Coinbase
MsgSeqNum (34): 528
SendingTime (52): 20241114-02:13:33.486
Logon ("A")
EncryptMethod (98): 0
HeartBtInt (108): 10
RawDataLength (95): 5
RawData (96): weras
Username (553): API_KEY_REDACTED
Password (554): API_PASSWORD_REDACTED
DefaultApplVerID (1137): 9
trailer ("trailer")
CheckSum (10):

0000020 2024-11-13 18:13:43.512340000 B connection.cpp:140 Error Peer reset connection: sockRead: connection gone
0000021 2024-11-13 18:13:43.512428000 B connection.cpp:148 Info  FIXReader: 0 messages processed, 0 dropped, 1 invalid
0000022 2024-11-13 18:13:43.512463000 A connection.cpp:324 Debug Connection::stop()
0000023 2024-11-13 18:13:43.512469000 A connection.cpp:328 Debug Connection::stop() => _reader.stop()
0000024 2024-11-13 18:13:43.763224000 A connection.cpp:324 Debug Connection::stop()
0000025 2024-11-13 18:13:43.763232000 A connection.cpp:328 Debug Connection::stop() =>  _reader.stop()
Журнал протокола:

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

out 0000001 A 8=FIXT.1.19=16935=A49=0931cda76168d873ad5cc0954753dfbf56=Coinbase34=152=20241114-02:13:22.67198=0108=1095=596=weras553=0931cda76168d873ad5cc0954753dfbf554=87algdxhqte1137=910=012
out 0000002 A 8=FIXT.1.19=17135=A49=0931cda76168d873ad5cc0954753dfbf56=Coinbase34=52852=20241114-02:13:33.48698=0108=1095=596=weras553=0931cda76168d873ad5cc0954753dfbf554=87algdxhqte1137=910=121
out 0000003 A 8=FIXT.1.19=17135=A49=0931cda76168d873ad5cc0954753dfbf56=Coinbase34=52852=20241114-02:13:44.30398=0108=1095=596=weras553=0931cda76168d873ad5cc0954753dfbf554=87algdxhqte1137=910=111
out 0000004 A 8=FIXT.1.19=17135=A49=0931cda76168d873ad5cc0954753dfbf56=Coinbase34=52852=20241114-02:13:55.20398=0108=1095=596=weras553=0931cda76168d873ad5cc0954753dfbf554=87algdxhqte1137=910=112
out 0000005 A 8=FIXT.1.19=17135=A49=0931cda76168d873ad5cc0954753dfbf56=Coinbase34=52852=20241114-02:14:06.06198=0108=1095=596=weras553=0931cda76168d873ad5cc0954753dfbf554=87algdxhqte1137=910=111
out 0000006 A 8=FIXT.1.19=17135=A49=0931cda76168d873ad5cc0954753dfbf56=Coinbase34=52852=20241114-02:14:16.84998=0108=1095=596=weras553=0931cda76168d873ad5cc0954753dfbf554=87algdxhqte1137=910=126
client.xml (это файл для настройки параметров клиента)

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












type="mem"/>


Я пытался создать свои собственные файлы .pem для сертификатов и закрытых ключей и настроить свой client.xml для использования их для сеанса SSL (поскольку Coinbase требует, чтобы вы подключались с помощью SSL ), но это тоже не работает.
Я также пробовал отправить нежелательный запрос на вход в Python с помощью быстрого исправления, и всегда получаю ответ, поэтому знаю, что проблема не в связано со мной, отправляющим ненужные значения Coinbase.
Кроме того, в примерах, которые я запускал, я заметил, что мне не нужно вручную писать код для заполнения BodyLength, Checksum и MsgType, поскольку приложение позаботилось об этом. этого для меня. Так что мне даже не придется использовать «исправление», которое я предложил вверху.

Подробнее здесь: https://stackoverflow.com/questions/791 ... via-fix8-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»