Skip to main content

AlgoAnalyzer is a package for designing your trading strategies and run simulations to backtest your strategies and check their robustness

Project description

AlgoAnalyzer

AlgoAnalyzer is a package for designing your trading strategies and run simulations to backtest your strategies and check their robustness



User Guide

Note for Indian Equtites append .NS to the end of the stock symbol

Eg: For YESBANK enter the Ticker name as YESBANK.NS

You can define multiple strategies and back test them simultaneously

Submit your strategy as a list of dictionary following the below format

[
        {
            "Ticker": "YESBANK.NS", # This is the Symbol Name
            "Capital": 100000, # Define the capital you want to trade with 
            "Method": "EMA", # Define the technical indicator you want to use
            "Short_Term_Period": 20, # Define the short term period for the technical indicator
            "Long_Term_Period": 50, # Define the long term period for the technical indicator
            "look_back_period": "1y",  # Avalible Lookback periods are “1d”, “5d”, “1mo”, “3mo”, “6mo”, “1y”, “2y”, “5y”, “10y”, “ytd”, “max”
            "interval": "1d",
            "stop_loss": 5 # Define stoploss for damage control 
        }

]



Understanding the Keys defined in the Dictionary

  • Ticker: This is the Symbol Name

  • Capital: Define the capital you want to trade with

  • Method: Define the technical indicator you want to use (As of now the package supports these indicators)

    • EMA: Exponential Moving Average - Crossover Strategy

    • SMA: Simple Moving Average - Crossover Strategy

    • MACD: Moving Average Convergence Divergence - Crossover Strategy

  • Short_Term_Period: Define the short term period for the technical indicator(for CrossOver Strategy)

  • Long_Term_Period: Define the long term period for the technical indicator(for CrossOver Strategy)

  • look_back_period: The time period for which you want to backtest your strategy

    • Avalible Lookback periods are “1d”, “5d”, “1mo”, “3mo”, “6mo”, “1y”, “2y”, “5y”, “10y”, “ytd”, “max”

  • interval: Define the data interval for the technical indicator (It is generally advised to use 1d interval unless you to setup an Intraday strategy)

    • Avalible Intervals are “1m”, “5m”, “15m”, “30m”, “1h”, “4h”, “1d”, “1wk”, “1mo”

  • stop_loss: Define stoploss for damage control to override you strategy . This is denoted as % so keep the stop_loss value between 0 and 100


Once you have defined your strategy, you can run the simulation by passing initialzing the runner class and then invoking the get_res() method.

Charts will be generated for each strategy and the charts will be saved as interactive html files in the same directory as the python file.

Final Results will be saved in a {timestamp}_results.json file in the same directory as the python file.


Sample code to demonstrate the whole process

from AlgoAnalyzer import Analyzer  as a

if __name__ == "__main__":

    Jobs = [
        {
            "Ticker": "YESBANK.NS",
            "Capital": 100000,
            "Method": "EMA",
            "Short_Term_Period": 20,
            "Long_Term_Period": 50,
            # Avalible Lookback periods are “1d”, “5d”, “1mo”, “3mo”, “6mo”, “1y”, “2y”, “5y”, “10y”, “ytd”, “max”
            "look_back_period": "1y",
            "interval": "1d",
            # "stop_loss": 5
        },
        
        {
            "Ticker": "ZEEMEDIA.NS",
            "Capital": 100000,
            "Method": "SMA",
            "Short_Term_Period": 5,
            "Long_Term_Period": 10,
            # Avalible Lookback periods are “1d”, “5d”, “1mo”, “3mo”, “6mo”, “1y”, “2y”, “5y”, “10y”, “ytd”, “max”
            "look_back_period": "6mo",
            "interval": "1d",
            # "stop_loss": 5
        },
        {
            "Ticker": "ZOMATO.NS",
            "Capital": 100000,
            "Method": "MACD",
            # Avalible Lookback periods are “1d”, “5d”, “1mo”, “3mo”, “6mo”, “1y”, “2y”, “5y”, “10y”, “ytd”, “max”
            "look_back_period": "1y",
            "interval": "1d",
        },
    ]

    a.Analyzer(Jobs).get_res()


It is important to have this code snippet in your file since multiprocessing module is used internally and not having this could possibly lead to errors

if __name__ == "__main__":

Output as obtained in the {timestamp}_results.json file

{
    "summary": [
        {
            "10020_YESBANK.NS_EMA": {
                "Net_PL": -3487.9485216140747,
                "Buy_Signals": [
                    {
                        "Shares": 7751,
                        "Date": "2021-09-27T00:00:00",
                        "Investment_Value": 99987.89704322815,
                        "Action": "Buy",
                        "Buy_Price": 12.899999618530273
                    },
                    {
                        "Shares": 6893,
                        "Date": "2021-12-09T00:00:00",
                        "Investment_Value": 96502.0,
                        "Action": "Buy",
                        "Buy_Price": 14.0
                    }
                ],
                "Sell_Signals": [
                    {
                        "Shares": 7751,
                        "Date": "2021-11-26T00:00:00",
                        "Investment_Value": 96499.94852161407,
                        "Action": "Sell",
                        "Sell_Price": 12.449999809265137,
                        "Net_PL": -3487.9485216140747
                    }
                ],
                "Job_ID": 10020,
                "Job_details": {
                    "Ticker": "YESBANK.NS",
                    "Capital": 100000,
                    "Method": "EMA",
                    "Short_Term_Period": 20,
                    "Long_Term_Period": 50,
                    "look_back_period": "1y",
                    "interval": "1d"
                },
                "Current_Investment": {
                    "Shares": 6893,
                    "Date": "2021-12-09T00:00:00",
                    "Investment_Value": 96502.0,
                    "Action": "Buy",
                    "Buy_Price": 14.0
                },
                "Chart": [
                    "YESBANK_50_20_EMA_10020_2022-01-14T17_50_02_377762.html"
                ]
            }
        },
        {
            "22996_ZEEMEDIA.NS_SMA": {
                "Net_PL": 41241.543095588684,
                "Buy_Signals": [
                    {
                        "Shares": 11049,
                        "Date": "2021-09-02T00:00:00",
                        "Investment_Value": 99993.4521074295,
                        "Action": "Buy",
                        "Buy_Price": 9.050000190734863
                    },
                    {
                        "Shares": 11597,
                        "Date": "2021-11-11T00:00:00",
                        "Investment_Value": 151920.70442390442,
                        "Action": "Buy",
                        "Buy_Price": 13.100000381469727
                    },
                    {
                        "Shares": 10619,
                        "Date": "2021-12-07T00:00:00",
                        "Investment_Value": 132206.5479745865,
                        "Action": "Buy",
                        "Buy_Price": 12.449999809265137
                    }
                ],
                "Sell_Signals": [
                    {
                        "Shares": 11049,
                        "Date": "2021-10-12T00:00:00",
                        "Investment_Value": 151923.75,
                        "Action": "Sell",
                        "Sell_Price": 13.75,
                        "Net_PL": 51930.297892570496
                    },
                    {
                        "Shares": 11597,
                        "Date": "2021-11-22T00:00:00",
                        "Investment_Value": 132205.79557609558,
                        "Action": "Sell",
                        "Sell_Price": 11.399999618530273,
                        "Net_PL": -19714.908847808838
                    },
                    {
                        "Shares": 10619,
                        "Date": "2021-12-22T00:00:00",
                        "Investment_Value": 141232.7020254135,
                        "Action": "Sell",
                        "Sell_Price": 13.300000190734863,
                        "Net_PL": 9026.154050827026
                    }
                ],
                "Job_ID": 22996,
                "Job_details": {
                    "Ticker": "ZEEMEDIA.NS",
                    "Capital": 100000,
                    "Method": "SMA",
                    "Short_Term_Period": 5,
                    "Long_Term_Period": 10,
                    "look_back_period": "6mo",
                    "interval": "1d"
                },
                "Chart": [
                    "ZEEMEDIA_10_5_SMA_22996_2022-01-14T17_50_01_931633.html"
                ]
            }
        },
        {
            "21828_ZOMATO.NS_MACD": {
                "Net_PL": -16501.861557006836,
                "Buy_Signals": [
                    {
                        "Shares": 706,
                        "Date": "2021-07-29T00:00:00",
                        "Investment_Value": 99934.30215454102,
                        "Action": "Buy",
                        "Buy_Price": 141.5500030517578
                    },
                    {
                        "Shares": 694,
                        "Date": "2021-08-13T00:00:00",
                        "Investment_Value": 95320.90423583984,
                        "Action": "Buy",
                        "Buy_Price": 137.35000610351562
                    },
                    {
                        "Shares": 681,
                        "Date": "2021-08-18T00:00:00",
                        "Investment_Value": 91900.94792175293,
                        "Action": "Buy",
                        "Buy_Price": 134.9499969482422
                    },
                    {
                        "Shares": 644,
                        "Date": "2021-08-31T00:00:00",
                        "Investment_Value": 86650.20196533203,
                        "Action": "Buy",
                        "Buy_Price": 134.5500030517578
                    },
                    {
                        "Shares": 600,
                        "Date": "2021-10-18T00:00:00",
                        "Investment_Value": 86430.00183105469,
                        "Action": "Buy",
                        "Buy_Price": 144.0500030517578
                    },
                    {
                        "Shares": 586,
                        "Date": "2021-11-10T00:00:00",
                        "Investment_Value": 79725.30178833008,
                        "Action": "Buy",
                        "Buy_Price": 136.0500030517578
                    },
                    {
                        "Shares": 645,
                        "Date": "2021-12-31T00:00:00",
                        "Investment_Value": 88622.99606323242,
                        "Action": "Buy",
                        "Buy_Price": 137.39999389648438
                    },
                    {
                        "Shares": 627,
                        "Date": "2022-01-13T00:00:00",
                        "Investment_Value": 83453.7038269043,
                        "Action": "Buy",
                        "Buy_Price": 133.10000610351562
                    }
                ],
                "Sell_Signals": [
                    {
                        "Shares": 706,
                        "Date": "2021-08-05T00:00:00",
                        "Investment_Value": 95274.69784545898,
                        "Action": "Sell",
                        "Sell_Price": 134.9499969482422,
                        "Net_PL": -4659.604309082031
                    },
                    {
                        "Shares": 694,
                        "Date": "2021-08-17T00:00:00",
                        "Investment_Value": 91955.0,
                        "Action": "Sell",
                        "Sell_Price": 132.5,
                        "Net_PL": -3365.9042358398438
                    },
                    {
                        "Shares": 681,
                        "Date": "2021-08-23T00:00:00",
                        "Investment_Value": 86657.25,
                        "Action": "Sell",
                        "Sell_Price": 127.25,
                        "Net_PL": -5243.69792175293
                    },
                    {
                        "Shares": 644,
                        "Date": "2021-09-20T00:00:00",
                        "Investment_Value": 86489.20196533203,
                        "Action": "Sell",
                        "Sell_Price": 134.3000030517578,
                        "Net_PL": -161.0
                    },
                    {
                        "Shares": 600,
                        "Date": "2021-10-25T00:00:00",
                        "Investment_Value": 79619.99816894531,
                        "Action": "Sell",
                        "Sell_Price": 132.6999969482422,
                        "Net_PL": -6810.003662109375
                    },
                    {
                        "Shares": 586,
                        "Date": "2021-12-01T00:00:00",
                        "Investment_Value": 88720.39642333984,
                        "Action": "Sell",
                        "Sell_Price": 151.39999389648438,
                        "Net_PL": 8995.094635009766
                    },
                    {
                        "Shares": 645,
                        "Date": "2022-01-07T00:00:00",
                        "Investment_Value": 83366.25,
                        "Action": "Sell",
                        "Sell_Price": 129.25,
                        "Net_PL": -5256.746063232422
                    }
                ],
                "Job_ID": 21828,
                "Job_details": {
                    "Ticker": "ZOMATO.NS",
                    "Capital": 100000,
                    "Method": "MACD",
                    "look_back_period": "1y",
                    "interval": "1d"
                },
                "Current_Investment": {
                    "Shares": 627,
                    "Date": "2022-01-13T00:00:00",
                    "Investment_Value": 83453.7038269043,
                    "Action": "Buy",
                    "Buy_Price": 133.10000610351562
                },
                "Chart": [
                    "ZOMATO.NS_macd_signal_21828_2022-01-14T17_50_02_041010.html",
                    "ZOMATO_candle_21828_2022-01-14T17_50_02_349608.html"
                ]
            }
        }
    ]
}

Analyzing the Output

  • The Net_PL is the total profit/loss of the strategy.

  • The Buy_Signals is a list of all the buy signals.

    • Each Buy_Signal has the following fields:

      • Shares: The number of shares bought.

      • Date: The date of transaction.

      • Investment_Value: The value of the investment.

      • Action: Buy.

      • Buy_Price`: The price at which the shares are bought.

  • The Sell_Signals is a list of all the sell signals.

    • Each Sell_Signal has the following fields:

      • Shares: The number of shares sold.

      • Date: The date of transaction.

      • Investment_Value: The value of the investment.

      • Action: Sell.

      • Sell_Price: The price at which the shares are sold.

      • Net_PL: The profit/loss of the transaction.

  • The Current_Investment is the investment that is currently being held.

  • The Chart is a list of files, which is file name of charts generated for your strategy

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

AlgoAnalyzer-0.0.6.tar.gz (8.9 kB view details)

Uploaded Source

Built Distribution

AlgoAnalyzer-0.0.6-py3-none-any.whl (11.9 kB view details)

Uploaded Python 3

File details

Details for the file AlgoAnalyzer-0.0.6.tar.gz.

File metadata

  • Download URL: AlgoAnalyzer-0.0.6.tar.gz
  • Upload date:
  • Size: 8.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for AlgoAnalyzer-0.0.6.tar.gz
Algorithm Hash digest
SHA256 27d9ad86c3c1f0ed9904e4624774c8078b6aa70c36d005b31b8ee528aebab1da
MD5 2883a39be792cba28ed8840882c65699
BLAKE2b-256 a3e0aaf4f4e33f777ba788ca4682162319a0a590c4b1a5ff2dd18afc804bbda6

See more details on using hashes here.

File details

Details for the file AlgoAnalyzer-0.0.6-py3-none-any.whl.

File metadata

  • Download URL: AlgoAnalyzer-0.0.6-py3-none-any.whl
  • Upload date:
  • Size: 11.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for AlgoAnalyzer-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 e18f03a14c4a5a53dfe25e3d82c3907a1d5577b58d6995d4ee92797926171aeb
MD5 fc0b60918ba169a68ed41d79de2cc511
BLAKE2b-256 8b4485fd5f7b37ee0901f7324d07bcd387022a9899860d00f1992221694e3f5b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page