Simplest possible program will not run

Hello to anyone who reads this,

My program stopped working on June 27. It gives this error “RuntimeError: This event loop is already running”
I removed all of my code and just left code from examples on the Alpaca site. It still gives the same error message.
Here is the code: It gives error on the con.run( line. Please please please. Tell me what is wrong? Thank you…Thomas

!pip install alpaca-trade-api
import alpaca_trade_api as tradeapi
USE_POLYGON = True
class MartingaleTrader(object):
def init (self):
self.key_id = “PKCD5QCAHON7FRU6VIPQ”
self.secret_key = “yjb83YL4Mzp43o891BkoMr1KgixgxDi60webIaSL”
self.base_url = “https://paper-api.alpaca.markets
self.data_url = ‘https://data.alpaca.markets
self.api = tradeapi.REST(self.key_id, self.secret_key, self.base_url)
self.trade_number = 0
self.symbol = ‘TSLA’
def start_trading(self):
conn = tradeapi.StreamConn(self.key_id, self.secret_key, base_url=self.base_url, data_url=self.data_url, data_stream=‘polygon’ if USE_POLYGON else ‘alpacadatav1’)
@conn.on(r’A$’, [self.symbol])
async def handle_agg(conn, channel, data):
self.trade_number = self.traden_number + 1
print(f’trade_number…:{self.trade_number}’)
if USE_POLYGON:
conn.run([f’A.{self.symbol}’, ‘trade_updates’])
else:
conn.run([f’alpacadatav1/T.{self.symbol}’, ‘trade_updates’])
if name == ‘ main ’:
trader = MartingaleTrader()
trader.start_trading()

Hi, I modified you code a bit and executed it. I do not see the error you mentioned.
could you execute it locally and let me know if this is what you meant to execute or update it with what you wanted?


class MartingaleTrader(object):
    def __init__(self):
        self.trade_number = 0
        self.secret_key = ALPACA_SECRET_KEY
        self.key_id = ALPACA_API_KEY
        self.data_url = 'https://data.alpaca.markets'
        self.base_url = "https://paper-api.alpaca.markets"
        self.symbol = 'TSLA'
        self.api = tradeapi.REST(self.key_id, self.secret_key, self.base_url)

    def start_trading(self):
        conn = tradeapi.StreamConn(
            self.key_id, self.secret_key,
            base_url=URL(self.base_url),
            data_url=URL(self.data_url),
            data_stream='polygon' if USE_POLYGON else 'alpacadatav1')

        @conn.on(r'A$', [self.symbol])
        async def handle_agg(conn, channel, data):
            self.trade_number = self.trade_number + 1
            print(f'trade_number…:{self.trade_number}')
        if USE_POLYGON:
            conn.run([f'A.{self.symbol}', 'trade_updates'])
        else:
            conn.run([f'alpacadatav1/T.{self.symbol}', 'trade_updates'])


if __name__ == '__main__':
    trader = MartingaleTrader()
    trader.start_trading()

also, use this to paste code nicely:
image

also, you should never put you credentials in a public forum like this (paper or live)
you should re-generate your credentials in the alpaca website and keep them a secret

I am greatly encouraged knowing that there is a person on the other end. Welcome.
I am running on Google Colab Jupyter note book.

  1. I had to use !pip install -U alpaca-trade-api
    2.base_url=URL(self.base_url) and data_url=URL(self.data_url) gave error name ‘URL’ is not defined
    3.Changing to base_url=self.base_url gave the error This event loop is already running.

I have not been able to run my program for two weeks. I have been working full time on it for ten months. Please help me get back to work.

following is a copy of the code you provided as I last tried to run it.

Shlomic

#pip install -U alpaca-trade-api

!pip install -U alpaca-trade-api

import alpaca_trade_api as tradeapi

import pandas as pd

from time import sleep

import random

from IPython.display import display, clear_output

USE_POLYGON = False

above added twc

class MartingaleTrader(object):

def __init__(self):

    self.trade_number = 0

    self.secret_key = ""

    self.key_id = ""

    self.data_url = 'https://data.alpaca.markets'

    self.base_url = "https://paper-api.alpaca.markets"

    self.symbol = 'TSLA'

    self.api = tradeapi.REST(self.key_id, self.secret_key, self.base_url)

def start_trading(self):

    conn = tradeapi.StreamConn(

        self.key_id, self.secret_key,

        base_url = self.base_url, 

        data_url = self.data_url,

        data_stream='polygon' if USE_POLYGON else 'alpacadatav1')

        #base_url=URL(self.base_url), <error name 'URL' is not defined

        #data_url=URL(self.data_url), <error name 'URL' is not defined

    @conn.on(r'A$', [self.symbol])

    async def handle_agg(conn, channel, data):

        self.trade_number = self.trade_number + 1

        print(f'trade_number…:{self.trade_number}')

    if USE_POLYGON:

        conn.run([f'A.{self.symbol}', 'trade_updates'])

    else:

        conn.run([f'alpacadatav1/T.{self.symbol}', 'trade_updates'])

if name == ‘main’:

trader = MartingaleTrader()

trader.start_trading()

I don’t understand from your comment, did you try to run my code sample and fail?
please use the triple backtick to wrap the code as I mentioned above. I cannot understand from your comment what is the code you execute

this is what I get when executing the sample code I mentioned above:

Thanks for your prompt.

  • When you executed your code sample, you got the result that I expected to get.
  • When I executed your code sample, I got an error message on the line " base_url=URL(self.base_url)" the error message read: name ‘URL’ is not defined.
  • Ditto for the line “data_url=URL(self.data_url)
  • I changed these lines like this: " base_url=URL(self.base_url)" to " base_url=self.base_url" and then the program ran without errors but then after the program was loaded, I got the runtime error “This event loop is already running
  • When tried wrapping the code in triple backticks got a syntax error message.
  • The other difference is that I have to put an ! in front of pip for it to install, ex. !pip install -U alpaca-trade-api
    These are the results that I got with your code sample.
    As I mentioned earlier I am running a Jupyter notebook on Google Colab.

Thank you for your help.
Thomas

to resolve the first issue just add this to the sample code: from alpaca_trade_api.common import URL
for the second issue, could you run !pip freeze
I want to see what version you have installed

so the issue for you, is - you’re running inside a jupyter notebook which runs the event loop.
and we do that also, so this is why you get the second error.
I saw a workaround for it, you should try it. install this package:
!pip install nest_asyncio
and then add these lines at the top of your notebook:

import nest_asyncio
nest_asyncio.apply()

this should allow running the event loop again, hopefully will solve your issue.

Good morning:
Here is the result from !pip freeze. When the market opens I will try the other changes.
Should I set use_polygon to True or to False?
Thanks for your help.
Thomas

absl-py==0.9.0
alabaster==0.7.12 albumentations==0.1.12 alpaca-trade-api==0.49.1 altair==4.1.0 asgiref==3.2.10 astor==0.8.1 astropy==4.0.1.post1 astunparse==1.6.3 atari-py==0.2.6 atomicwrites==1.4.0 attrs==19.3.0 audioread==2.1.8 autograd==1.3 Babel==2.8.0 backcall==0.2.0 beautifulsoup4==4.6.3 bleach==3.1.5 blis==0.4.1 bokeh==2.1.1 boto==2.49.0 boto3==1.14.32 botocore==1.17.32 Bottleneck==1.3.2 branca==0.4.1 bs4==0.0.1 CacheControl==0.12.6 cachetools==4.1.1 catalogue==1.0.0 certifi==2020.6.20 cffi==1.14.1 chainer==7.4.0 chardet==3.0.4 click==7.1.2 cloudpickle==1.3.0 cmake==3.12.0 cmdstanpy==0.4.0 colorlover==0.3.0 community==1.0.0b1 contextlib2==0.5.5 convertdate==2.2.1 coverage==3.7.1 coveralls==0.5 crcmod==1.7 cufflinks==0.17.3 cvxopt==1.2.5 cvxpy==1.0.31 cycler==0.10.0 cymem==2.0.3 Cython==0.29.21 daft==0.0.4 dask==2.12.0 dataclasses==0.7 datascience==0.10.6 decorator==4.4.2 defusedxml==0.6.0 descartes==1.1.0 dill==0.3.2 distributed==1.25.3 Django==3.0.8 dlib==19.18.0 dm-tree==0.1.5 docopt==0.6.2 docutils==0.15.2 dopamine-rl==1.0.5 earthengine-api==0.1.229 easydict==1.9 ecos==2.0.7.post1 editdistance==0.5.3 en-core-web-sm==2.2.5 entrypoints==0.3 ephem==3.7.7.1 et-xmlfile==1.0.1 fa2==0.3.5 fancyimpute==0.4.3 fastai==1.0.61 fastdtw==0.3.4 fastprogress==0.2.4 fastrlock==0.5 fbprophet==0.6 feather-format==0.4.1 featuretools==0.4.1 filelock==3.0.12 firebase-admin==4.1.0 fix-yahoo-finance==0.0.22 Flask==1.1.2 folium==0.8.3 fsspec==0.7.4 future==0.16.0 gast==0.3.3 GDAL==2.2.2 gdown==3.6.4 gensim==3.6.0 geographiclib==1.50 geopy==1.17.0 gin-config==0.3.0 glob2==0.7 google==2.0.3 google-api-core==1.16.0 google-api-python-client==1.7.12 google-auth==1.17.2 google-auth-httplib2==0.0.4 google-auth-oauthlib==0.4.1 google-cloud-bigquery==1.21.0 google-cloud-core==1.0.3 google-cloud-datastore==1.8.0 google-cloud-firestore==1.7.0 google-cloud-language==1.2.0 google-cloud-storage==1.18.1 google-cloud-translate==1.5.0 google-colab==1.0.0 google-pasta==0.2.0 google-resumable-media==0.4.1 googleapis-common-protos==1.52.0 googledrivedownloader==0.4 graphviz==0.10.1 grpcio==1.30.0 gspread==3.0.1 gspread-dataframe==3.0.7 gym==0.17.2 h5py==2.10.0 HeapDict==1.0.1 holidays==0.9.12 holoviews==1.13.3 html5lib==1.0.1 httpimport==0.5.18 httplib2==0.17.4 httplib2shim==0.0.3 humanize==0.5.1 hyperopt==0.1.2 ideep4py==2.0.0.post3 idna==2.10 image==1.5.32 imageio==2.4.1 imagesize==1.2.0 imbalanced-learn==0.4.3 imblearn==0.0 imgaug==0.2.9 importlib-metadata==1.7.0 imutils==0.5.3 inflect==2.1.0 iniconfig==1.0.1 intel-openmp==2020.0.133 intervaltree==2.1.0 ipykernel==4.10.1 ipython==5.5.0 ipython-genutils==0.2.0 ipython-sql==0.3.9 ipywidgets==7.5.1 itsdangerous==1.1.0 jax==0.1.73 jaxlib==0.1.52 jdcal==1.4.1 jedi==0.17.2 jieba==0.42.1 Jinja2==2.11.2 jmespath==0.10.0 joblib==0.16.0 jpeg4py==0.1.4 jsonschema==2.6.0 jupyter==1.0.0 jupyter-client==5.3.5 jupyter-console==5.2.0 jupyter-core==4.6.3 kaggle==1.5.6 kapre==0.1.3.1 Keras==2.4.3 Keras-Preprocessing==1.1.2 keras-vis==0.4.1 kiwisolver==1.2.0 knnimpute==0.1.0 librosa==0.6.3 lightgbm==2.2.3 llvmlite==0.31.0 lmdb==0.98 lucid==0.3.8 LunarCalendar==0.0.9 lxml==4.2.6 Markdown==3.2.2 MarkupSafe==1.1.1 matplotlib==3.2.2 matplotlib-venn==0.11.5 missingno==0.4.2 mistune==0.8.4 mizani==0.6.0 mkl==2019.0 mlxtend==0.14.0 more-itertools==8.4.0 moviepy==0.2.3.5 mpmath==1.1.0 msgpack==1.0.0 multiprocess==0.70.10 multitasking==0.0.9 murmurhash==1.0.2 music21==5.5.0 natsort==5.5.0 nbconvert==5.6.1 nbformat==5.0.7 networkx==2.4 nibabel==3.0.2 nltk==3.2.5 notebook==5.3.1 np-utils==0.5.12.1 numba==0.48.0 numexpr==2.7.1 numpy==1.18.5 nvidia-ml-py3==7.352.0 oauth2client==4.1.3 oauthlib==3.1.0 okgrade==0.4.3 opencv-contrib-python==4.1.2.30 opencv-python==4.1.2.30 openpyxl==2.5.9 opt-einsum==3.3.0 osqp==0.6.1 packaging==20.4 palettable==3.3.0 pandas==1.0.5 pandas-datareader==0.8.1 pandas-gbq==0.11.0 pandas-profiling==1.4.1 pandocfilters==1.4.2 panel==0.9.7 param==1.9.3 parso==0.7.1 pathlib==1.0.1 patsy==0.5.1 pexpect==4.8.0 pickleshare==0.7.5 Pillow==7.0.0 pip-tools==4.5.1 plac==1.1.3 plotly==4.4.1 plotnine==0.6.0 pluggy==0.7.1 portpicker==1.3.1 prefetch-generator==1.0.1 preshed==3.0.2 prettytable==0.7.2 progressbar2==3.38.0 prometheus-client==0.8.0 promise==2.3 prompt-toolkit==1.0.18 protobuf==3.12.4 psutil==5.4.8 psycopg2==2.7.6.1 ptyprocess==0.6.0 py==1.9.0 pyarrow==0.14.1 pyasn1==0.4.8 pyasn1-modules==0.2.8 pycocotools==2.0.1 pycparser==2.20 pyct==0.4.6 pydata-google-auth==1.1.0 pydot==1.3.0 pydot-ng==2.0.0 pydotplus==2.0.2 PyDrive==1.3.1 pyemd==0.5.1 pyglet==1.5.0 Pygments==2.1.3 pygobject==3.26.1 pymc3==3.7 PyMeeus==0.3.7 pymongo==3.10.1 pymystem3==0.2.0 PyOpenGL==3.1.5 pyparsing==2.4.7 pyrsistent==0.16.0 pysndfile==1.3.8 PySocks==1.7.1 pystan==2.19.1.1 pytest==3.6.4 python-apt==1.6.5+ubuntu0.3 python-chess==0.23.11 python-dateutil==2.8.1 python-louvain==0.14 python-slugify==4.0.1 python-utils==2.4.0 pytz==2018.9 pyviz-comms==0.7.6 PyWavelets==1.1.1 PyYAML==3.13 pyzmq==19.0.1 qtconsole==4.7.5 QtPy==1.9.0 regex==2019.12.20 requests==2.23.0 requests-oauthlib==1.3.0 resampy==0.2.2 retrying==1.3.3 rpy2==3.2.7 rsa==4.6 s3fs==0.4.2 s3transfer==0.3.3 scikit-image==0.16.2 scikit-learn==0.22.2.post1 scipy==1.4.1 screen-resolution-extra==0.0.0 scs==2.1.2 seaborn==0.10.1 Send2Trash==1.5.0 setuptools-git==1.2 Shapely==1.7.0 simplegeneric==0.8.1 six==1.15.0 sklearn==0.0 sklearn-pandas==1.8.0 smart-open==2.1.0 snowballstemmer==2.0.0 sortedcontainers==2.2.2 spacy==2.2.4 Sphinx==1.8.5 sphinxcontrib-websupport==1.2.3 SQLAlchemy==1.3.18 sqlparse==0.3.1 srsly==1.0.2 statsmodels==0.10.2 sympy==1.1.1 tables==3.4.4 tabulate==0.8.7 tblib==1.7.0 tensorboard==2.3.0 tensorboard-plugin-wit==1.7.0 tensorboardcolab==0.0.22 tensorflow==2.3.0 tensorflow-addons==0.8.3 tensorflow-datasets==2.1.0 tensorflow-estimator==2.3.0 tensorflow-gcs-config==2.3.0 tensorflow-hub==0.8.0 tensorflow-metadata==0.22.2 tensorflow-privacy==0.2.2 tensorflow-probability==0.11.0 termcolor==1.1.0 terminado==0.8.3 testpath==0.4.4 text-unidecode==1.3 textblob==0.15.3 textgenrnn==1.4.1 Theano==1.0.5 thinc==7.4.0 tifffile==2020.7.24 toml==0.10.1 toolz==0.10.0 torch==1.6.0+cu101 torchsummary==1.5.1 torchtext==0.3.1 torchvision==0.7.0+cu101 tornado==5.1.1 tqdm==4.41.1 traitlets==4.3.3 tweepy==3.6.0 typeguard==2.7.1 typing-extensions==3.7.4.2 tzlocal==1.5.1 umap-learn==0.4.6 uritemplate==3.0.1 urllib3==1.24.3 vega-datasets==0.8.0 wasabi==0.7.1 wcwidth==0.2.5 webencodings==0.5.1 websocket-client==0.57.0 websockets==8.1 Werkzeug==1.0.1 widgetsnbextension==3.5.1 wordcloud==1.5.0 wrapt==1.12.1 xarray==0.15.1 xgboost==0.90 xkit==0.0.0 xlrd==1.1.0 xlwt==1.3.0 yellowbrick==0.9.1 zict==2.0.0 zipp==3.1.0

setting use_polygon flag is for you to decide (which data provider to use)
Alpaca supports both
try using nest_asyncio

Hello Shlomi,
I appreciate your help.
With the changes that you suggested the “Simplest possible program” is now running.
I used the Alpaca Martingale example on Git Hub as the structural model for my Main algorithm. I see that you have recently worked on the Alpaca Martingale example. My Main algorithm is modeled after the Alpaca Martingale example.
They both have one part to listen for trade updates and one part to listen for order updates.
The part that listens for trade updates is now working thanks to you.
However, my Main algorithm is doing ok on trade updates now but gives error on order updates on this line:
–> 165 conn.run([f’A.{self.symbol}’, ‘trade_updates’]) This is exactly the same as the Alpaca Martingale example. Can you help me with this? Following is the screen shot:
Thank you.

CancelledError                            Traceback (most recent call last)

/usr/local/lib/python3.6/dist-packages/alpaca_trade_api/stream2.py in run(self, initial_channels)
    292                 loop.run_until_complete(self.subscribe(initial_channels))
--> 293                 loop.run_until_complete(self.consume())
    294             except KeyboardInterrupt:

paste your code example so I could test it

Here is the code: Thanks.

!pip install -U alpaca-trade-api
from alpaca_trade_api.common import URL
!pip install nest_asyncio
import nest_asyncio
nest_asyncio.apply()
import alpaca_trade_api as tradeapi
import pandas as pd
from time import sleep
import random
from IPython.display import display, clear_output
USE_POLYGON = True
class MartingaleTrader(object):
def init(self):
self.key_id = “PKCD5QCAHON7FRU6VIPQ”
self.secret_key = “yjb83YL4Mzp43o891BkoMr1KgixgxDi60webIaSL”
self.base_url = “https://paper-api.alpaca.markets
#self.base_url = https://data.alpaca.markets/v1
self.data_url = ‘https://data.alpaca.markets
self.api = tradeapi.REST(self.key_id, self.secret_key, self.base_url)
#CLASS VARIABLES_________#
self.symbol = ‘TSLA’
self.posqty = 0
self.pospl = 0
self.poscp = 0

self.mro = self.api.list_orders(status=‘all’, limit=1, after=None, until=pd.Timestamp.today(tz=None), direction=None, params=None, nested=None)[0]

self.mro = ‘’
self.cushion = 0
self.iaggregate = 0
self.ioudate = 0
self.trade_number = 1
self.order_type = ‘’ # handel agg new
self.tu_data_object = ‘’ # handel agg
self.trade_level = 0 # handel agg
self.oswff = False # handel agg
self.lnomp_tt = 0.0
self.lnomp = 0
self.lbuyp = 0 # handel agg
self.lsellp = 0 # handel agg
self.lqtysell = 0
self.lqtybuy = 0
self.lprice_inc = 5
self.limit_p = 0
self.order_side = ‘’
self.ou_object = ‘’
self.ou_event_string = ‘’
self.something_went_wrong = False
self.try2execute = 0
self.coidins = ‘’
self.zzz = ‘’
#START TRADING___________#
def start_trading(self,traden):
clear_output(True)
self.api.cancel_all_orders()
self.trade_number = traden
conn = tradeapi.StreamConn(
self.key_id, self.secret_key,
base_url=URL(self.base_url),
data_url=URL(self.data_url),
data_stream=‘polygon’ if USE_POLYGON else ‘alpacadatav1’)
@conn.on(r’A$’, [self.symbol])
#TRADE UPDATE handle agg__#
async def handle_agg(conn, channel, data):
self.tu_data_object = data
if self.iaggregate == 0:
self.lnomp_tt = round(self.tu_data_object.close, 0)
self.set_price_levels()
self.iaggregate += 1
print(f’Agg Count: {self.iaggregate}’)
try:
self.posqty = self.api.get_position(self.symbol).qty
except:
self.posqty = ‘0’
try:
self.pospl = self.api.get_position(self.symbol).unrealized_pl
except:
self.pospl = ‘0’
try:
self.poscp = self.api.get_position(self.symbol).current_price
except:
self.poscp = ‘0’
self.posqty = int(self.posqty)
self.pospl = float(self.pospl)
self.poscp = float(self.poscp)
self.coidin()
#------------------------------------------------------------ORDER PLACEMENT LOGIC GATES --------------------------------------#
if self.oswff == False:
self.api.cancel_all_orders()

----------

self.order_side = ‘buy’
self.limit_p = self.lbuyp
self.make_order()

---------- # SELL

self.iaggregate += 1
self.coidin()

----------

self.order_side = ‘sell’
self.limit_p = self.lsellp
self.make_order()

----------

self.oswff = True # BUY

Hi @thomaswadeculbertson
the format you pasted is not readable or easily copied.
please use backticks
you should do this
3backticks + py (go one line down)
write your code (go one line down
3 backticks

should look like this:

image

Sorry about that I did not understand about the back ticks before.


!pip install -U alpaca-trade-api
from alpaca_trade_api.common import URL
!pip install nest_asyncio
import nest_asyncio
nest_asyncio.apply()
import alpaca_trade_api as tradeapi
import pandas as pd
from time import sleep
import random
from IPython.display import display, clear_output
USE_POLYGON = True
class MartingaleTrader(object):
def __init__(self):
self.key_id = "PKCD5QCAHON7FRU6VIPQ"
self.secret_key = "yjb83YL4Mzp43o891BkoMr1KgixgxDi60webIaSL"
self.base_url = "[https://paper-api.alpaca.markets](https://paper-api.alpaca.markets)"
#self.base_url = [https://data.alpaca.markets/v1](https://data.alpaca.markets/v1)
self.data_url = '[https://data.alpaca.markets](https://data.alpaca.markets)'
self.api = tradeapi.REST(self.key_id, self.secret_key, self.base_url)
#___________________________________________________CLASS VARIABLES____________________________________________________________#
self.symbol = 'TSLA'
self.posqty = 0
self.pospl = 0
self.poscp = 0
# self.mro = self.api.list_orders(status='all', limit=1, after=None, until=pd.Timestamp.today(tz=None), direction=None, params=None, nested=None)[0]
self.mro = ''
self.cushion = 0
self.iaggregate = 0
self.ioudate = 0
self.trade_number = 1
self.order_type = '' # handel agg new
self.tu_data_object = '' # handel agg
self.trade_level = 0 # handel agg
self.oswff = False # handel agg
self.lnomp_tt = 0.0
self.lnomp = 0
self.lbuyp = 0 # handel agg
self.lsellp = 0 # handel agg
self.lqtysell = 0
self.lqtybuy = 0
self.lprice_inc = 5
self.limit_p = 0
self.order_side = ''
self.ou_object = ''
self.ou_event_string = ''
self.something_went_wrong = False
self.try2execute = 0
self.coidins = ''
self.zzz = ''
#___________________________________________________START TRADING______________________________________________________________#
def start_trading(self,traden):
clear_output(True)
self.api.cancel_all_orders()
self.trade_number = traden
conn = tradeapi.StreamConn(
self.key_id, self.secret_key,
base_url=URL(self.base_url),
data_url=URL(self.data_url),
data_stream='polygon' if USE_POLYGON else 'alpacadatav1')
@conn.on(r'A$', [self.symbol])
#___________________________________________________TRADE UPDATE handle agg_____________________________________________________#
async def handle_agg(conn, channel, data):
self.tu_data_object = data
if self.iaggregate == 0:
self.lnomp_tt = round(self.tu_data_object.close, 0)
self.set_price_levels()
self.iaggregate += 1
print(f'Agg Count: {self.iaggregate}')
try:
self.posqty = self.api.get_position(self.symbol).qty
except:
self.posqty = '0'
try:
self.pospl = self.api.get_position(self.symbol).unrealized_pl
except:
self.pospl = '0'
try:
self.poscp = self.api.get_position(self.symbol).current_price
except:
self.poscp = '0'
self.posqty = int(self.posqty)
self.pospl = float(self.pospl)
self.poscp = float(self.poscp)
self.coidin()
#------------------------------------------------------------ORDER PLACEMENT LOGIC GATES --------------------------------------#
if self.oswff == False:
self.api.cancel_all_orders()

# ----------
self.order_side = 'buy'
self.limit_p = self.lbuyp
self.make_order()
# ---------- # SELL
self.iaggregate += 1
self.coidin()
# ----------
self.order_side = 'sell'
self.limit_p = self.lsellp
self.make_order()
# ----------
self.oswff = True # BUY

also, you should not paste you key id and secret key.
you should delete them from the example and re-generate them in the alpaca website (even if it’s just the paper account)
if someone reads it, they could copy them and use them

The error occurs on line 165 when side is sell.
When side is buy it does throw an error.

@thomaswadeculbertson using the backticks is step1
step2 is copying the code with the right indentation.
I cannot do anything with code that has no indentation (I even tried to guess the indentation for you but, too many if/try/except statements. I can’t)
paste your code and make sure it looks like it looks in the notebook

OK my friend here it is. I am copying myself and I will check to ensure that the indentation is correct when i received the copy. I ran the code for several hours today
and it gave an error message three times on the line
conn.run([f’A.{self.symbol}’, ‘trade_updates’])
however it also updated trade updates several times without throwing an error. I have not been able to detect any pattern that could explain this.

By the way. I would like to learn to use the websockets so that I would not have to bother you.
https://algotrading101.com/learn/alpaca-trading-api-guide/
The above site has instructions for: How do I use WebSockets to stream data with the Alpaca API?
I wonder if I can use this site to learn. The commands do not appear to correlate with those that we are using? Do you have any s
I really appreciate your help. Thanks
Thomas

!pip install -U alpaca-trade-api
from alpaca_trade_api.common import URL
!pip install nest_asyncio
import nest_asyncio
nest_asyncio.apply()
import alpaca_trade_api as tradeapi
import pandas as pd
from time import sleep
import random
from IPython.display import display, clear_output
USE_POLYGON = True
class MartingaleTrader(object):
def __init__(self):
self.key_id = ""
self.secret_key = ""
self.base_url = "[https://paper-api.alpaca.markets](https://paper-api.alpaca.markets)"
#self.base_url = [https://data.alpaca.markets/v1](https://data.alpaca.markets/v1)
self.data_url = '[https://data.alpaca.markets](https://data.alpaca.markets)'
self.api = tradeapi.REST(self.key_id, self.secret_key, self.base_url)
#___________________________________________________CLASS VARIABLES____________________________________________________________#
self.symbol = 'TSLA'
self.posqty = 0
self.pospl = 0
self.poscp = 0
# self.mro = self.api.list_orders(status='all', limit=1, after=None, until=pd.Timestamp.today(tz=None), direction=None, params=None, nested=None)[0]
self.mro = ''
self.cushion = 0
self.iaggregate = 0
self.ioudate = 0
self.trade_number = 1
self.order_type = '' # handel agg new
self.tu_data_object = '' # handel agg
self.trade_level = 0 # handel agg
self.oswff = False # Order_Sent_Waiting_For_Fill
self.lnomp_tt = 0.0
self.lnomp = 0
self.lbuyp = 0 # handel agg
self.lsellp = 0 # handel agg
self.lqtysell = 0
self.lqtybuy = 0
self.lprice_inc = 2
self.limit_p = 0
self.order_side = ''
self.ou_object = ''
self.ou_event_string = ''
self.something_went_wrong = False
self.try2execute = 0
self.coidins = ''
self.zzz = ''
#___________________________________________________START TRADING______________________________________________________________#
def start_trading(self,traden):
clear_output(True)
self.api.cancel_all_orders()
self.trade_number = traden
conn = tradeapi.StreamConn(
self.key_id, self.secret_key,
base_url=URL(self.base_url),
data_url=URL(self.data_url),
data_stream='polygon' if USE_POLYGON else 'alpacadatav1')
@conn.on(r'A$', [self.symbol])
#___________________________________________________TRADE UPDATE handle agg_____________________________________________________#
async def handle_agg(conn, channel, data):
self.tu_data_object = data
if self.iaggregate == 0:
self.lnomp_tt = round(self.tu_data_object.close, 0)
self.set_price_levels()
self.iaggregate += 1
print(f'Agg Count: {self.iaggregate}')
try:
self.posqty = self.api.get_position(self.symbol).qty
except:
self.posqty = '0'
try:
self.pospl = self.api.get_position(self.symbol).unrealized_pl
except:
self.pospl = '0'
try:
self.poscp = self.api.get_position(self.symbol).current_price
except:
self.poscp = '0'
self.posqty = int(self.posqty)
self.pospl = float(self.pospl)
self.poscp = float(self.poscp)
self.coidin()
#------------------------------------------------------------ORDER PLACEMENT LOGIC GATES --------------------------------------#
# If not waiting for fill cancel all orders and place a buy limit and a sell limit order.
if self.oswff == False:
self.api.cancel_all_orders()
# ----------
self.order_side = 'buy'
self.limit_p = self.lbuyp
self.make_order()
# ---------- # SELL
self.iaggregate += 1
self.coidin()
# ----------
self.order_side = 'sell'
self.limit_p = self.lsellp
self.make_order()
# ----------
self.oswff = True # BUY