I am trying able to use api requests to buy place orders to buy equity, but I have to call the api every time to check if the order has been filled.
Is there a way to stream updates with the orders to show when they have been been filled?
i try this:
import alpaca_trade_api as tradeapi
import time
import datetime
api = tradeapi.REST('xxx','https://paper-api.alpaca.markets')
conn = tradeapi.StreamConn('xxx','xxx','https://paper-api.alpaca.markets')
account = api.get_account()
def run():
@conn.on(r'trade_updates')
async def on_msg(conn, channel, data):
datasymbol = data.order['symbol']
event = data.event
print('Order executed for',datasymbol, data.order['side'], event, data.order['filled_qty'])
conn.run(['trade_updates'])
but it get the following error:
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
D:\Users\user\Anaconda3\envs\ml\lib\site-packages\alpaca_trade_api\stream2.py in run(self, initial_channels)
158 try:
--> 159 loop.run_until_complete(self.subscribe(initial_channels))
160 loop.run_forever()
D:\Users\user\Anaconda3\envs\ml\lib\asyncio\base_events.py in run_until_complete(self, future)
565 try:
--> 566 self.run_forever()
567 except:
D:\Users\user\Anaconda3\envs\ml\lib\asyncio\base_events.py in run_forever(self)
520 if self.is_running():
--> 521 raise RuntimeError('This event loop is already running')
522 if events._get_running_loop() is not None:
RuntimeError: This event loop is already running
During handling of the above exception, another exception occurred:
RuntimeError Traceback (most recent call last)
<ipython-input-2-8a009c05ab30> in <module>
6 print('Order executed for',datasymbol, data.order['side'], event, data.order['filled_qty'])
7
----> 8 conn.run(['trade_updates'])
D:\Users\user\Anaconda3\envs\ml\lib\site-packages\alpaca_trade_api\stream2.py in run(self, initial_channels)
162 logging.info("Exiting on Interrupt")
163 finally:
--> 164 loop.run_until_complete(self.close())
165 loop.close()
166
D:\Users\user\Anaconda3\envs\ml\lib\asyncio\base_events.py in run_until_complete(self, future)
564 future.add_done_callback(_run_until_complete_cb)
565 try:
--> 566 self.run_forever()
567 except:
568 if new_task and future.done() and not future.cancelled():
D:\Users\user\Anaconda3\envs\ml\lib\asyncio\base_events.py in run_forever(self)
519 self._check_closed()
520 if self.is_running():
--> 521 raise RuntimeError('This event loop is already running')
522 if events._get_running_loop() is not None:
523 raise RuntimeError(
RuntimeError: This event loop is already running
can anyone tell me why this is happening? did i code it wrong?