Placing your first Forex trade with Python

Update: I updated the code so it works with Oanda's new API. Get it here

Time to talk about brokers, how to place a trade programmatically and most importantly how not to get scammed.

This is the third part of the series: How to build your own algotrading platform.

A broker is nothing more than a company that lets you trade (buy or sell) assets on a market through their platform. What is very important for algotrading is:

  1. The broker offers an API in order for us to place orders
  2. You can have a demo account to run your staging environment and experiment
  3. The spread is as small as possible

In our case, we don't really care about spread as we won't be doing High Frequency Trading any time soon.

Even though brokers are regulated, there have been incidents in the past couple of years, were brokers folded due to certain conditions. Be very wary if

  1. There are no reviews of the broker on the internet (or most of them are bad)
  2. If the broker offers you some crazy leverage (like 1:200)
  3. If the broker seems to be in a very strange country

What could happen is that you start making some money and you aren't be able to pull them out. Seriously. Super stressful situation.

But let's switch to a happier note which is opening an account and placing our first programmatic trade. Whooha!

I am using Oanda as a broker (I am not affiliated with them) and they offer a pretty decent API, libraries on github and a free demo account.

Go and open a free fxTrade Practice account and then sign in.

After you sign in to your demo account, go to Manage API Access. There you can find your API key which we are going to use in our system to place trades. MAKE SURE YOU DON'T SHARE THIS KEY.

The code for this is and all other posts is on github and you can install it and run it pretty easily.

Update: Oanda released a new (kickass) execution engine called v20 and they have released a new (improved) API. This post has been updated in order to use the new API but if (for any reason) you want to check the old code, it is right here. You lucky you!

Connecting to Oanda needs a conf file - which you can generate using a script that Oanda provides here or you can just create it yourself. Why would you want that? First of all when it comes to credentials (and my money), I prefer to know everything that is going on. And I don't like having to install PyYAML just to read a conf file. Feel free to use either method.

Now, prepare to be amazed. The code is straight-forward. We initialize the API:

import v20

api = v20.Context(
        token='HERE GOES YOUR API KEY')

and now let's place an order (buy 5000 units of EURUSD)

response =
             'ACCOUNT ID',

print("Response: {} ({})".format(response.status, response.reason))

>Response: 201 (Created)

Check the current price is as easy!

from datetime import datetime

latest_price_time = datetime.utcnow().isoformat('T')+'Z',

response = api.pricing.get(

for price in response.get("prices", 200):
        if latest_price_time is None or price.time > latest_price_time:
            print "Buy at", price.bids[0].price

Super easy. Don't worry about what EURUSD is or how many units we are buying or what a market order is. For now, we have placed our first trade from our laptop and we are going to build our own API to place trades. Exciting stuff!

You can read Oanda's documentation here to see what else you can do with their API and find the Python library here.Tons of examples are available from Oanda's github page here.

Coming up next, connecting to a real LIVE algotrading system, running from my RaspberryPI at home.

You'll be able to see the (almost) final program running and we'll talk more about Forex and strategies.

If you have more feedback, ping me at jonromero or signup to the newsletter.

Legal outro. This is an engineering tutorial on how to build an algotrading platform for experimentation and FUN. Any suggestions here are not financial advices. If you lose any (or all) you money because you followed any trading advices or deployed this system in production, you cannot blame this random blog (and/or me). Enjoy at your own risk.