I'm trying to find some easy setup to send trades from TradingView's alerts into Interactive Brokers. I have set up a local host, I have ngrok running, and I have created the code below by watching some YTB video. I have also added the URL for webhook in the alerts in Trading View. The problem is that every time there is an alert, I get a 500 internal server error message in ngrok. And the trades do not execute.
**This is the code I've tried: **
`#imports
from datetime import datetime
from sanic import Sanic
from sanic import response
from ib_insync import *
#Create Sanic object called qpp
app = Sanic(__name__)
#app.ib = None
app.ctx.ib = None
#Create root / homepage
@app.route('/')
async def root(request):
return response.text('online')
#Listen for signals and submit BUY orders (webhook)
@app.route('/buy', methods=[ 'POST' ])
async def buy(request):
if request.method == 'POST':
#Check if we need to reconnect
await checkIfReconnect()
#Parse signal data
data = request.jason
order = MarketOrder('BUY', 0.00015)
contract = Crypto('BTC', 'PAXOS', 'USD')
trade = app.ib.placeOrder(contract,order)
#Wait for the order to be processed and check status
app.ctx.ib.sleep(1)
print(trade)
#Listen for signals and submit SELL orders (webhook)
@app.route('/sell', methods=[ 'POST' ])
async def sell(request):
if request.method == 'POST':
#Check if we need to reconnect
await checkIfReconnect()
#Parse signal data
data = request.jason
order = MarketOrder('SELL', 0.00015)
contract = Crypto('BTC', 'PAXOS', 'USD')
trade = app.ib.placeOrder(contract,order)
#Wait for the order to be processed and check status
app.ctx.ib.sleep(1)
print(trade)
#Reconnect to IB if connection is lost
async def checkIfReconnect():
if not app.ib.isDisconnected() or not app.ib.isConnected():
app.ib.disconnect()
app.ib = IB()
app.ib.connect('127.0.0.1',7496,clientId=1)
#Run app
if _name_ == '__main__':
#Connect to IB
app.ctx.ib = IB()
app.ctx.ib.connect('127.0.0.1',7496,clientId=1)
app.run(port=8080)`
**This is the error I get: ** { "description": "Internal Server Error", "status": 500, "message": "The application encountered an unexpected error and could not continue." }
**I also see these errors in the Terminal: **
ERROR: Exception occurred while handling uri: 'http://MYURL/buy'
Traceback (most recent call last):
File "handle_request", line 102, in handle_request
if TYPE_CHECKING:
File "/Users/MYURL/#imports.py", line 26, in buy
await checkIfReconnect()
File "/Users/MYURL/#imports.py", line 56, in checkIfReconnect
if not app.ib.isDisconnected() or not app.ib.isConnected():
^^^^^^
AttributeError: 'Sanic' object has no attribute 'ib'
**I'm using: **
MacOS High Sierra 10.13.6
Visual Studio Code Version: 1.85.2 (Universal)
Trader Workstation Version: Stable (10.19.2o) 20240612
Ngrok: 3.15.1
PM from ngrok here. According to the error, the Sanic
object (app
) doesn't have an ib
property, which it does not according to the docs: https://sanic.readthedocs.io/en/stable/sanic/api/app.html#module-sanic.app
looks like you probably want if not app.ctx.ib.isDisconnected() or not app.ctx.ib.isConnected():
maybe?