ether-camp / virtual-accelerator

17 stars 19 forks source link

Price graph #1

Open miohtama opened 7 years ago

miohtama commented 7 years ago

Plotted out HackerGold price graph.

Looks ok

screen shot 2016-10-15 at 13 25 14

Code - Notebook:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import datetime

start_date = datetime.datetime.now()
end_date = datetime.datetime.now() + datetime.timedelta(days=90)

class milestones:
    p1 = 1476972000  # P1: GMT: 20-Oct-2016 14:00  => The Sale Starts
    p2 = 1478181600  # P2: GMT: 03-Nov-2016 14:00  => 1st Price Ladder 
    p3 = 1479391200  # P3: GMT: 17-Nov-2016 14:00  => Price Stable, 
                      #                                Hackathon Starts
    p4 = 1480600800  # P4: GMT: 01-Dec-2016 14:00  => 2nd Price Ladder
    p5 = 1481810400  # P5: GMT: 15-Dec-2016 14:00  => Price Stable
    p6 = 1482415200   # P6: GMT: 22-Dec-2016 14:00  => Sale Ends, Hackathon Ends

BASE_PRICE = 200

def price(now):

    if now < milestones.p1:
        return 0;

    if now >= milestones.p1 and now < milestones.p2:    
        return BASE_PRICE;

    if now >= milestones.p2 and now < milestones.p3:
        days_in = 1 + (now - milestones.p2) // (60 * 60 *24); 
        return BASE_PRICE - days_in * 25 // 7

    if  now >= milestones.p3 and now < milestones.p4:
        return BASE_PRICE // 4 * 3;

    if now >= milestones.p4 and now < milestones.p5:        
        days_in = 1 + (now - milestones.p4) // (60 * 60 *24); 
        return (BASE_PRICE // 4 * 3) - days_in * 25 // 7;  # daily decrease 3.5

    if now >= milestones.p5 and now < milestones.p6:    
        return BASE_PRICE // 2;

    if now >= milestones.p6:
        return 0;

print("Start date {}, end date {}".format(start_date, end_date))
# Step one day at a time
y = []
x_range = []
current = start_date
while current < end_date:
    x_range.append(current)
    now = current.timestamp()
    p = int(price(now))
    assert type(p) == int
    y.append(p)
    current += datetime.timedelta(days=1)

line, = plt.plot(x_range, y, "--", linewidth=2)

plt.ylim(0, 200)
plt.show()