Консоль Interactive Brokers API C++ очень простые вещи

В теме IB API C++ есть несколько ответов, но я не смог определить нужный. Я изо всех сил пытаюсь подключиться к TWS через C++ API через консоль. Мне не нужен интерфейс, просто чтобы связать на самом простом уровне.

Я пытаюсь использовать следующий код:

#include "EWrapper.h"
#include "EClientSocket.h"
#include "textbook_classes_.h" 
//in textbook_classes_.h/.cpp I have EWrapper inheritance with 
//required funcs overriding, 
//those I keep empty (ie:
// void test_EWrapper::tickPrice( TickerId tickerId, TickType field, 
// double price, int canAutoExecute) {}


int main()
{
 IB::test_EWrapper client;
 IB::test_EWrapper* ptr_client = new IB::test_EWrapper(client);

 EClientSocket test_socket(ptr_client);

 test_socket.eConnect( "", 7497, 0, false); //my port is 7497

 delete ptr_client;
 ptr_client = nullptr;

 return 0;
}

Ошибки, которые я получил при компиляции:

CMakeFiles\tws_san_.dir/objects.a(main.cpp.obj): In function `main':
C:/Users/solovyev.an/Documents/Cpp/tws_san_/main.cpp:15: undefined 
reference to `EClientSocket::EClientSocket(EWrapper*)'
C:/Users/solovyev.an/Documents/Cpp/tws_san_/main.cpp:17: undefined 
reference to `EClientSocket::eConnect(char const*, unsigned int, int, bool)'
C:/Users/solovyev.an/Documents/Cpp/tws_san_/main.cpp:15: undefined 
reference to `EClientSocket::~EClientSocket()'
C:/Users/solovyev.an/Documents/Cpp/tws_san_/main.cpp:15: undefined 
reference to `EClientSocket::~EClientSocket()'
CMakeFiles\tws_san_.dir/objects.a(textbook_classes_.cpp.obj): 
In function `ZN2IB13test_EWrapperC2Ev':
C:/Users/solovyev.an/Documents/Cpp/tws_san_/textbook_classes_.cpp:26:
undefined reference to `EClientSocket::EClientSocket(EWrapper*)'
collect2.exe: error: ld returned 1 exit status

CMakeFiles\tws_san_.dir\build.make:123: recipe for target 'tws_san_.exe' failed
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/tws_san_.dir/all' failed
mingw32-make.exe[3]: *** [tws_san_.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles/tws_san_.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles/tws_san_.dir/rule] Error 2
CMakeFiles\Makefile2:78: recipe for target 'CMakeFiles/tws_san_.dir/rule' failed
Makefile:117: recipe for target 'tws_san_' failed
mingw32-make.exe: *** [tws_san_] Error 2

Я ценю совет по этой очень простой вещи.

PS

Я знаю, что есть два довольно популярных варианта C++ API, разработанных пользователями:

https://github.com/rudimeier/twsapi

https://github.com/JanBoonen/TwsApiCpp

Но и на моей Win-машине они не летают.


person Andrey Soloviev    schedule 07.05.2017    source источник
comment
Тема IB API C++ Что это? О чем ты говоришь? Этот вопрос нуждается в контексте. Я знаю, что такое API, но в том, как вы его используете, нет смысла. Я понятия не имею, что такое ИБ.   -  person Cody Gray    schedule 07.05.2017
comment
@Cody Grey Помимо IB API, есть также TWS, который может быть вам незнаком. IB означает Interactive Brokers, TWS означает Trader Work Station.   -  person Andrey Soloviev    schedule 07.05.2017
comment
Какую IDE и ОС вы используете?   -  person dmaelect    schedule 08.05.2017
comment
@dmaelect CLion + Win7   -  person Andrey Soloviev    schedule 08.05.2017
comment
@AndreySoloviev, со всеми неопределенными ошибками похоже, что у вас нет включенных файлов заголовков или в ваш проект необходимо добавить путь к заголовкам. Мне пришлось скопировать файл .lib и .dll в исполняемую папку моих проектов и добавить файлы .h и .cpp в мои проекты, включая путь, чтобы избавиться от всех моих неопределенных ошибок во время компиляции. у вас, вероятно, уже есть эта ссылка, но все равно вот она. interactivebrokers.com/en/software/api/api.htm. Боюсь, кроме этого я мало чем смогу помочь. Дайте мне знать, если у вас это получится.   -  person dmaelect    schedule 08.05.2017


Ответы (2)


Кажется, здесь сложная история:
1 Лучше получить последнюю версию API (серьезно, взять со вчерашнего дня).
2 Лучше скомпилировать это в VS IDE, несмотря на потенциальный ручной исправление IBString.h для удаления объявлений, связанных с MS.
3. Вы не можете скомпилировать его в наборе инструментов 2015 VS, вместо этого используйте 2012.
4. Вы не можете просто написать с нуля пару экземпляры объектов. Будет лучше, если вы вырежете из оригинального IB-файла то, что вам не нужно.
@dmaelect спасибо за ваш вклад.

person Andrey Soloviev    schedule 10.05.2017

Просто чтобы быть честным с продуктом IB API C++.
Я загрузил и попробовал версию C++ API для MacOS. Это была CLion IDE. API работает как швейцарские часы — точно, тихо, четко. Я решил свою проблему с подключением в течение 5 минут, следующие 5 минут я потратил на получение деталей контракта и рыночных данных.
Мой вывод - избегайте VS и специфичного для MS IB API.

person Andrey Soloviev    schedule 12.05.2017