Как выполнить код после обратного вызова события в ib_async/ib_insyncPython

Программы на Python
Ответить
Anonymous
 Как выполнить код после обратного вызова события в ib_async/ib_insync

Сообщение Anonymous »

Пытаюсь написать скрипт Python, который будет поддерживать соединение открытым, а при совершении сделки по опциону захватывать IV и греки и записывать их в электронную таблицу. Таким образом, я могу отслеживать IV/Greeks, когда сделка открывается и когда она закрывается. Большая часть кода работает, за исключением обработки событий. Оно задыхается

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

ib.qualifyContracts(*contracts)
Ошибка:

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

Exception in callback _SelectorSocketTransport._read_ready()
handle: 
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/events.py", line 88, in _run
self._context.run(self._callback,self._args)
RuntimeError: cannot enter context:  is already entered

Код:

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

#!/usr/bin/env python
# coding: utf-8
import settings
from ib_async import *
util.patchAsyncio()

ib = IB()
connection = ib.connect(settings.host, settings.port, clientId=settings.master_client_id)

def options_trade(trade):
print ("Getting option greeks and other data...")
contracts = []
contracts.append(trade.contract)
print (contracts)
ib.qualifyContracts(*contracts)
# rest of code to execute would go here

def on_exec_details(trade:Trade, fill:Fill):
print ("Start execution details")

print ("Order status: ", trade.orderStatus.status)
print ("Fill execution price: ", fill.execution.price)
print (trade.contract)
print (trade.contract.secType)

if (trade.contract.secType != 'OPT'):
print ("Not an option contract, will not load greeks")
else:
# get greeks for this contract
print ("This is an option contract, will load greeks and IV data and save to spreadsheet")
print (trade.filledEvent)
options_trade(trade)

print ("End execution details")

ib.execDetailsEvent += on_exec_details
ib.run()
Я пробовал добавить util.patchAsyncio(), но все равно ничего не получилось. Также не уверен, что ib.run() - это способ запустить это.


Подробнее здесь: https://stackoverflow.com/questions/785 ... -ib-insync
Ответить

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

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

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

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

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