Book Image

Python Algorithmic Trading Cookbook

By : Pushpak Dagade
Book Image

Python Algorithmic Trading Cookbook

By: Pushpak Dagade

Overview of this book

If you want to find out how you can build a solid foundation in algorithmic trading using Python, this cookbook is here to help. Starting by setting up the Python environment for trading and connectivity with brokers, you’ll then learn the important aspects of financial markets. As you progress, you’ll learn to fetch financial instruments, query and calculate various types of candles and historical data, and finally, compute and plot technical indicators. Next, you’ll learn how to place various types of orders, such as regular, bracket, and cover orders, and understand their state transitions. Later chapters will cover backtesting, paper trading, and finally real trading for the algorithmic strategies that you've created. You’ll even understand how to automate trading and find the right strategy for making effective decisions that would otherwise be impossible for human traders. By the end of this book, you’ll be able to use Python libraries to conduct key tasks in the algorithmic trading ecosystem. Note: For demonstration, we're using Zerodha, an Indian Stock Market broker. If you're not an Indian resident, you won't be able to use Zerodha and therefore will not be able to test the examples directly. However, you can take inspiration from the book and apply the concepts across your preferred stock market broker of choice.
Table of Contents (16 chapters)

Placing a simple INTRADAY order

This recipe demonstrates how to place an INTRADAY order via the broker API. An INTRADAY order is not delivered to the user's Demat account. Positions created by intraday orders have a lifetime of a single day. The positions are explicitly squared off by the broker at the end of a trading session and are not carried forward to the next trading session. After trying out this recipe, check your broking account by logging into the broker's website; you will find that an order has been placed there. You can match the order ID with the one that's returned in the last code snippet shown in this recipe.

Getting ready

Make sure the broker_connection object is available in your Python namespace. Refer to the first recipe of this chapter to learn how to set up this object.

How to do it…

We execute the following steps to complete this recipe:

  1. Import the necessary modules:
>>> from pyalgotrading.constants import *
  1. Fetch an instrument for a specific trading symbol and exchange:
>>> instrument = broker_connection.get_instrument(segment='NSE', 
tradingsymbol='HDFCBANK')
  1. Fetch the last traded price of the instrument:
>>> ltp = broker_connection.get_ltp(instrument)
  1. Place a simple INTRADAY order – a SELL, BRACKET, INTRADAY, LIMIT order:
>>> order_id = broker_connection.place_order(
instrument=instrument,
order_transaction_type= \
BrokerOrderTransactionTypeConstants.SELL,
order_type=BrokerOrderTypeConstants.BRACKET,
order_code=BrokerOrderCodeConstants.INTRADAY,
order_variety=BrokerOrderVarietyConstants.LIMIT,
quantity=1, price=ltp+1, stoploss=2, target=2)
>>> order_id

We'll get the following output:

191212001269042
If you get the following error while executing this code, it would mean that Bracket orders are blocked by the broker due to high volatility in the markets:

InputException: Due to expected higher volatility in the markets, Bracket orders are blocked temporarily.

You should try the recipe later when the broker starts allowing Bracket orders. You can check for updates on the Broker site from time to time to know when Bracket orders would be allowed.

How it works…

In step 1, you import the constants from pyalgotrading. In step 2, you fetch the financial instrument with segment = 'NSE' and tradingsymbol = 'HDFCBANK' using the get_instrument() method of broker_connection. In step 3, you fetch the LTP of the instrument. (LTP will be explained in detail in the Last traded price of a financial instrument recipe of Chapter 3, Analyzing Financial Data.) In step 4, you place a BRACKET order using the place_order() method of the broker_connection. The descriptions of the parameters accepted by the place_order() method are as follows:

  • instrument: The financial instrument for which the order must be placed. Should be an instance of the Instrument class. You pass instrument here.
  • order_transaction_type: The order transaction type. Should be an enum of type BrokerOrderTransactionTypeConstants. You pass BrokerOrderTransactionTypeConstants.SELL here.
  • order_type: The order type. Should be an enum of type BrokerOrderTypeConstants. You pass BrokerOrderTypeConstants.BRACKET here.
  • order_code: The order code. Should be an enum of type BrokerOrderCodeConstants. You pass BrokerOrderCodeConstants.INTRADAY here.
  • order_variety: The order variety. Should be an enum of type BrokerOrderVarietyConstants. You pass BrokerOrderVarietyConstants.LIMIT here.
  • quantity: The number of shares to be traded for the given instrument. Should be a positive integer. You pass 1 here.
  • price: The limit price at which the order should be placed. You pass ltp+1 here, which means 1 unit price above the ltp value.
  • stoploss: The price difference from the initial order price, at which the stoploss order should be placed. Should be a positive integer or float value. You pass 2 here.
  • target: The price difference from the initial order price, at which the target order should be placed. Should be a positive integer or float value. You pass 2 here.

If the order placement is successful, the method returns an order ID which you can use at any point in time later on for querying the status of the order.

A detailed explanation of the different types of parameters will be covered in Chapter 6, Placing Trading Orders on the Exchange. This recipe is intended to give you an idea of how to place an INTRADAY order, one of the various types of possible orders.