Я работаю с бумажной торговой учетной записью, используя интерактивные брокеры TWS Desktop Application и библиотека Python IB_INSYNC. Моя цель состоит в том, чтобы разместить рыночный заказ в gbp.usd с размером позиции 25 тыс., Поместить ограничение прибыли и остановки. Ограничитель получения прибыли и остановка находятся на предопределенной сумме выше/ниже средней цены заполнения. Когда я запускаю код, родительский порядок (в данном случае Long 25K GBP.USD) всегда проходит, но остановка и ограничитель не отображаются в моем приложении для настольного компьютера IB TWS. < /P>
Вот мой код: < /p>
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()
< /code>
Я попытался увеличить задержки и тестировал мой код с 19:00 по восточному поясному времени - 10 вечера в течение будни, чтобы рынок живой, а волатильность не должна быть проблемой. Иногда я заметил, что когда я закрываю свое настольное приложение IB TWS, вновь открою его и повторно запустил свой код все заказы (но не всегда). Опять же, родительский порядок длинных 25 000 Гбпусд всегда проходит, однако, если остановка не проходит, то ограничитель также не проходит. В этом сценарии статус как остановка, так и ограничителя - «pendingsubmit». Я пытался пройти документацию IB_INSYNC и IB API в дополнение к использованию CHATGPT, чтобы попытаться решить проблему, но ни один из этих источников не помог мне.
Подробнее здесь: https://stackoverflow.com/questions/767 ... -ib-insync
Остановка и ограничения, которые не проходят через IB_INSYNC ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение