Skip to content

Instantly share code, notes, and snippets.

@timrprobocom
Created April 13, 2023 20:19

Revisions

  1. timrprobocom created this gist Apr 13, 2023.
    45 changes: 45 additions & 0 deletions strategy_sum.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,45 @@
    import numpy as np
    from datetime import datetime

    # Define the component prices for each day
    prices = {
    datetime(2020, 1, 31): [197.2525, 253.2126, 653.266, 653.2678],
    datetime(2020, 2, 3): [197.063, 253.2231, 652.3695, 652.3759],
    datetime(2020, 2, 4): [196.6896, 252.9168, 649.9793, 649.9858],
    datetime(2020, 2, 5): [197.3429, 252.8294, 653.5655, 653.5588],
    datetime(2020, 2, 6): [197.4554, 252.7901, 652.3171, 652.3172],
    datetime(2020, 2, 7): [196.7969, 252.944, 653.5571, 653.555],
    datetime(2020, 2, 10): [196.9404, 253.3696, 656.0398, 656.0355],
    datetime(2020, 2, 11): [196.9457, 253.3767, 653.6765, 653.6793],
    datetime(2020, 2, 12): [196.8736, 253.1046, 653.1065, 653.1106]
    }

    # Calculate the strategy value for each day

    I = [100]
    N_tm1 = None
    for date, price_list in prices.items():
    # Calculate the strategy value for this day
    n = (date - max(prices.keys())).days
    N_t = np.array(price_list)
    if N_tm1 is not None:
    ratio = N_t / N_tm1 - 1
    sumratio = 1 + ratio.sum() * (1 - n / (365*200))
    I.append( I[-1] * sumratio )

    N_tm1 = N_t

    # Print the results
    for date, value in zip(prices.keys(), I):
    print(f"{date.strftime('%d-%b-%Y')}: {value:.4f}")

    # Output:
    # 31-Jan-2020: 100.0000
    # 03-Feb-2020: 99.6343
    # 04-Feb-2020: 98.5948
    # 05-Feb-2020: 99.9743
    # 06-Feb-2020: 99.6348
    # 07-Feb-2020: 99.7417
    # 10-Feb-2020: 100.7397
    # 11-Feb-2020: 100.0205
    # 12-Feb-2020: 99.7022