В теме 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-машине.
Кажется, что есть сложная история:
1 Лучше получить последнюю версию API (серьезно, примите это со вчерашнего дня).
2 Лучше скомпилировать это в VS IDE, несмотря на возможное ручное исправление IBString.h для удаления объявлений, связанных с MS.
3 Вы не можете скомпилировать его под 2015 инструментарием VS, используйте вместо него 2012.
4 Вы не можете просто сделать это так просто, как написать с нуля пару экземпляров объектов. Лучше, если вы отрежете из оригинального файла IB то, что вам не нужно.
@dmaelect спасибо за ваш вклад.
Просто чтобы быть честным с продуктом IB API C ++.
Я скачал и попробовал MacOS версию C ++ API. Это был CLion IDE.
API работает как швейцарские часы — точно, тихо, точно. Я решил проблему подключения в течение 5 минут, а следующие 5 минут я потратил на получение информации о контракте и рыночных данных.
Мой вывод — избегайте VS и MS-специфичных IB API.