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 hashes)

Uploaded Source

Built Distribution

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

Uploaded Python 3

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