+1 (315) 557-6473 

Calculate Drawdown in Python Language Assignment Solution.


Instructions

Objective
Write a program to calculate drawdown in python language.

Requirements and Specifications

Program to calculate drawdown in python language

Source Code

#!/bin/python3

import math

import os

import random

import re

import sys

#

# Complete the 'drawdowncalc' function below.

#

# The function is expected to return a FLOAT.

# The function accepts following parameters:

# 1. FLOAT_ARRAY rets

# 2. INTEGER N

#

def findmax(all_amounts):

    maxdrawdowncalc = None

    maxdrawdowncalc_int = None

    maxdrawdowncalc_index = -1

    for k in range(len(all_amounts)):

        amounts = all_amounts[k]

        l = len(amounts)

        for i in range(l-1):

            for j in range(i+1,l):

                drawdown = (amounts[i]-amounts[j])/amounts[i]

                if drawdown > 0:

                    if (maxdrawdowncalc is None) or (drawdown > maxdrawdowncalc):

                        maxdrawdowncalc = drawdown

                        maxdrawdowncalc_int = [i,j]

                        maxdrawdowncalc_index = k

    new_amounts = []

    for k in range(len(all_amounts)):

        if k != maxdrawdowncalc_index:

            new_amounts.append(all_amounts[k])

        else:

            new_amounts.append(all_amounts[k][:maxdrawdowncalc_int[0]+1])

            new_amounts.append(all_amounts[k][maxdrawdowncalc_int[1]:])

    return maxdrawdowncalc, new_amounts

def drawdowncalc(rets, N):

    curr = 1

    amounts = [curr]

    for i in range(len(rets)):

        curr *= (1 + rets[i])

        amounts.append(curr)

    result = None

    new_amounts = [amounts]

    for i in range(N):

        result, new_amounts = findmax(new_amounts)

        if result is None:

            return i

    return -round(result, 4)

if __name__ == '__main__':

    l = int(input())

    rets = []

    for _ in range(l):

        rets.append(float(input()))

    n = int(input())

    print(drawdowncalc(rets, n))

    # test cases

    # print(drawdowncalc([0.01, -0.01, 0.004, -0.02, 0.01], 1))

    # print(drawdowncalc([0.01, -0.01, -0.01, 0.05, -0.04, 0.01], 2))

    # print(drawdowncalc([0.01, -0.04, 0.05, -0.01, -0.01, 0.01], 3))

    # print(drawdowncalc([0.01, 0.01, 0.01, -0.01, 0.01, 0.01], 1))

    # print(drawdowncalc([0.01, 0.02, 0.03, -0.01, -0.02, 0.04, 0.05, -0.02, -0.02, 0.03], 2))