StopOrder и LimitOrders не выполняются с использованием ib_insyncPython

Программы на Python
Ответить
Anonymous
 StopOrder и LimitOrders не выполняются с использованием ib_insync

Сообщение Anonymous »

Я работаю с бумажным торговым счетом, используя настольное приложение Interactive Brokers TWS и библиотеку Python ib_insync. Моя цель — разместить рыночный ордер на GBP.USD с размером позиции 25 тыс., разместить лимитный ордер для фиксации прибыли и стоп-ордер. Фиксация прибыли LimitOrder и StopOrder осуществляется на заранее определенную сумму выше/ниже средней цены исполнения. Когда я запускаю код, родительский ордер (в данном случае длинный 25 тысяч фунтов стерлингов в долларах США) всегда выполняется, но StopOrder и LimitOrder не отображаются в моем настольном приложении IB TWS.
Здесь это мой код:

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

from ib_insync import *

# Create a connection to the IB gateway or TWS
ib = IB()
ib.connect('127.0.0.1', 7497, clientId=1) # adjust these as needed

# Define the contract and order
contract = Forex('GBPUSD')
ib.qualifyContracts(contract)
order = MarketOrder('BUY', 25000)

# Submit the order
trade = ib.placeOrder(contract, order)
print("Order submitted.")
ib.sleep(30)
# Wait for the order to fill
while trade.orderStatus.status != 'Filled':
ib.waitOnUpdate()
print(f"Order status: {trade.orderStatus.status}")

if trade.orderStatus.status == 'Filled':
print("Order filled, placing child orders.")

# Define the prices for the child orders
stop_loss_price = trade.orderStatus.avgFillPrice - 0.00150
profit_target_price = trade.orderStatus.avgFillPrice + 0.00200
print(f"Stop loss price: {stop_loss_price}, Profit target price: {profit_target_price}")
ib.sleep(30)
# If the order is filled, place a stop loss order
stop_loss_order = StopOrder('SELL', 25000, stop_loss_price)
stop_loss_order.orderId = ib.client.getReqId() # get a new order id
stop_loss_trade = ib.placeOrder(contract, stop_loss_order)
ib.sleep(30)
print(f"Stop loss order placed, status: {stop_loss_trade.orderStatus.status}")
ib.sleep(30)
# And place a profit taking order
profit_taking_order = LimitOrder('SELL', 25000, profit_target_price)
profit_taking_order.orderId = ib.client.getReqId() # get a new order id
profit_taking_trade = ib.placeOrder(contract, profit_taking_order)
ib.sleep(30)
print(f"Profit taking order placed, status: {profit_taking_trade.orderStatus.status}")
ib.sleep(30)
ib.disconnect()
#ib.run()

Я попробовал увеличить задержки и тестировал свой код с 19:00 по EST до 22:00 по EST в будние дни, поэтому рынок живой и волатильность не должна быть проблемой. Я заметил, что иногда, когда я закрываю свое настольное приложение IB TWS, снова открываю его и повторно запускаю свой код, все заказы проходят (но не всегда). Опять же, родительский ордер на длинную позицию в размере 25 000 GBPUSD всегда выполняется, однако, если StopOrder не проходит, то и LimitOrder также не проходит. В этом сценарии статус StopOrder и LimitOrder — «PendingSubmit». Я пробовал просмотреть документацию по ib_insync и IB API, а также использовать ChatGPT, чтобы попытаться решить проблему, но ни один из этих источников мне не помог.

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

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

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

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

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

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