У меня есть Docker-контейнер и скрипт со следующим кодом:
импортировать backtrader как bt импортировать панд как pd класс MyStrategy(bt.Strategy): защита __init__(сам): print('инициализация стратегии') определение следующего (я): печать('следующий') Защитный старт(): print('начинающий бэктрейдер') мозг = bt.Церебро() store = bt.stores.IBStore (хост = '127.0.0.1', порт = 7497, _debug = True) data = store.getdata(dataname='EUR.USD', sectype = 'CASH', Exchange = 'IDEALPRO', timeframe = bt.TimeFrame.Seconds) печать(данные.LIVE) cerebro.resampledata(данные, таймфрейм = bt.TimeFrame.Seconds, сжатие = 15) # spy_prices = pd.read_csv("SPY.csv", index_col='Date',parse_dates=True) #feed_spy = bt.feeds.PandasData(dataname=spy_prices) # cerebro.adddata(feed_spy) cerebro.addstrategy(MyStrategy) церебро.run() начинать() Я использую бумажный торговый счет, работающий на порту 7497, и конфигурации:

Вывод приведенного выше сценария следующий:
запуск бэктрейдера 4 API» включен параметр «Включить ActiveX и клиенты сокетов».> API» включен параметр «Включить ActiveX и клиенты сокетов».> API» включен параметр «Включить ActiveX и клиенты сокетов».> API» включен параметр «Включить ActiveX и клиенты сокетов».> инициализация стратегии Поскольку соединение с TWS не установлено, def next(self): не запускается. def next(self) запускается всякий раз, когда загружаются данные и, например, используется spy_prices.
Я думаю, из-за того, что я работаю внутри докер-контейнера, соединение с этими store = bt.stores.IBStore(host = '127.0.0.1', port=7497, _debug = True) не удалось. настройки. Должен ли хост быть другим? Потому что это хост по умолчанию? Или мне следует сопоставить порт внутри контейнера докеров?
Докер-файл следующий:
# аргументов ARG IMAGE_VARIANT=стройный человек ARG PYTHON_VERSION=3.9.5 # Базовое изображение ИЗ Python: ${PYTHON_VERSION}-${IMAGE_VARIANT} как py3 # Рабочий каталог Данные WORKDIR # Копируем файл требований.txt КОПИРУЙТЕ файл require.txt. # Установочные пакеты Pip и apt-get ЗАПУСК python -m pip install --upgrade pip ЗАПУСК apt-get update && \ apt-get install -y libpq-dev gcc # Зависимости установки Pip RUN pip установить панды RUN pip установить бэктрейдер RUN pip установить IbPy2 # Удалить файл требований, он больше не нужен ЗАПУСК rm требования.txt Возможно, поскольку TWS (рабочая станция трейдера интерактивных брокеров) работает на порту 7947, мне приходится подключаться к этому порту из докера. Для этого откройте случайный порт (возможно, 7400), а затем используйте docker run -it -p 7400:7497 -v ${PWD}:/data image_name bash, а затем python main.py.
Добавить EXPOSE 7400 в файл Docker. Изменение на: store = bt.stores.IBStore(host = 'host.docker.internal', port=7400, _debug = True) Запустить в терминале: docker run -it -p 7400:7497 -v ${PWD}:/data имя_изображения bash Запустить в терминале/контейнере: python main.py -p 7400:7497 для сопоставления портов. В конце концов, я хотел бы что-нибудь сделать, используя docker compose. Потому что я хочу работать не из терминала, а работать из VScode.(Предлагаемый метод кстати не работает)
Мобильная версия