• Custom User Avatar

    The check_list test function always returns True if one of the arrays is empty.

  • Custom User Avatar

    Description for VAR is extremely dense; it definitely requires much more description on what should be used for the calculation of predicted gain/loss. Even the description in Investopedia provides a formula and denotes each term, which is infinitely easier to understand than the current kata description (which is hopeless to grasp).

  • Custom User Avatar

    The method should be named "get_shift", and should take 1 argument: Name of the Equity/Currency Using our previously imported data

    The argument name in the code is misleading:

    def get_shift(self, asset):

    It is not an asset, it's asset | currency.

    Similarly, typo:

    def get_var(self, asset, risk_class, convidence):

    convidence -> confidence. Tests also uses conv when conf should be the correct term.

  • Custom User Avatar

    Test messages are kind of unacceptable:

    MartyCorp un-ordered relative shift should be [0.044444, -0.010638, -0.021505, -0.010989, 0.111111, 0.04, -0.009615, -0.019417, -0.019802, 0.010101]: False should equal True

    it only shows the expected value, but not the actual value.

  • Custom User Avatar

    This comment is hidden because it contains spoiler information about the solution

  • Custom User Avatar

    permutation tests is passing in a tuple instead of a list.

  • Default User Avatar

    Thanks for your kind words.

    i happy the the sheer length of the kata-description-text did not scare you away from this kata ( since i think the that the underlying topic is pretty interesting ).

    Have a nice day :-)

  • Custom User Avatar

    I would say this kata is pretty tough to solve, but I'm glad I finally completed it after 3 days of thoughts.

    I liked this kata, but some parts of kata were pretty unclear to deal with. Still, I managed to resolve them and, with some accuracy tricks, I passed this problem.

    Thanks for the kata! :)

  • Custom User Avatar

    No lists were harmed in this solution!

  • Default User Avatar

    i think that carloscerro is right.

    The valuation-test seems to rely on an unchanged input variable.

    please check the following code. It will fail for the first basic test (One toggle), but will succeed if you out-commend the lines 2 and 3:

    def solve(puzzle):
      if 0 < len(puzzle):
        puzzle[0][0] = (puzzle[0][0] + 1) % 2
      return [(1, 1)]
  • Default User Avatar

    Hi Reswin,

    thanks for the feedback.
    In fact, uttumuttu did a good job and seems to be very clever in general.

    This kind of approach ( using past or self-defined relative shifts for the risk-factors ) is not only used to calculate Vaule-at-Risk, but also other by risk-measures like "expected shortfall", or scenarios ( e.g. black friday ) or sensitivities ( checking how much win/loss e.g. a yield shift of 1% would induce ).

  • Default User Avatar

    @uttumuttu's second suggestion to describe VAR was helfpul for me: "The simplest explanation (of VAR) is that each equity's total shifts are obtained as the relative shifts of its currency-converted price series." I enjoyed the kata because it not only allowed me to practice Python but also to learn about VAR.

  • Default User Avatar

    Sorry have written, before thinking:

    VAR is not sub-additive in both dimensions ( over Risk-Classes and over sub-Positions ).

    Will modify th desciption accordingly.

  • Default User Avatar

    Hi uttumttu,

    thanks a lot for your input.
    Since i am very new to writing kata, i do need some help indeed.
    It's in fact a thin line between spoiling too much of the algorythm/implementation or potentially frustrate someone trying to solve it.

    i don't know, if that is common practise, but feel free to apply some your suggestions to the description, as well.

    I added the following section ( it's near the end ), but i do get the feeling, that the whole kata description may be too long now ( distracting interested people ) for such a relative simple calculation :

    We had no Forex risk involved in this example, since the equity was listed in your base-currency.
    Please ensure that the shifts of the foreign currency are taken into account, as well, when calculating the 'Total'-VAR for a foreign-currency-equity-positions.

    You then might notice some kind of strange behaviour of your VAR-results:
    VAR is not additive !

    So neither

    total VAR = equity VAR + currency VAR


    VAR(EQ_all) = VAR(EQ1) + VAR(EQ2)
    for an Equity position EQ_all that consists fo Equity position 1 ( EQ1 ) + Equity position 2 ( EQ2 )

    In fact, the VAR for a given position might be lower or equal than the sum of the VAR of it's parts.

    When looking at the different Riskclasses, it's even 'worse': The total-VAR can be lower, equal or bigger than the sum of equity-VAR and currency-VAR.

    Keep in mind, that the Value-at-Risk measurement is based on the potential top losses (relative shifts) only. And these top losses ( for individual equities or riskclasses ) may have occurred on different historical days ( for the equities/riskclasses ) involved.

  • Custom User Avatar

    Two suggestions related to the issues faced by Reswin, aimed to make the kata more accessible to people without a quantitative finance background:

    1. The non-additive nature of VAR could be incorporated into the description. That is, the reader should understand that they are to first construct the daily gain-loss distribution summed across equities, and only then calculate the quantile.

    2. Calculation of total (equity plus currency) shifts could be described more clearly. The simplest explanation is that each equity's total shifts are obtained as the relative shifts of its currency-converted price series. An even simpler alternative is to simply spell out the geometric compounding formula (or, less spoilerly, the equations leading to it), which is equivalent but easier to code on top of existing equity and currency shifts calculated by get_shift).

  • Loading more items...