为什么我的代码看起来不随机?

时间:2015-12-13 06:05:02

标签: python python-3.x random

我正在尝试创建一个基本代码来模拟股票市场行为,作为我的编程课程中的练习。它基于加权随机性并通过pylab显示。 在大多数情况下它看起来不错,但无论我跑多少次试验,似乎都有点不随意。从每个随机更新的1-50开始,似乎有一个明确的向上趋势,不会反映在该系列的其他任何地方。代码中的任何其他地方的加权值都没有改变,所以这种趋势应该是一种失常,因为我确保给出的结果是许多试验的平均值。有谁知道我的代码导致这种情况发生了什么问题?谢谢!

class Simulation(object):

    def __init__(self, netPos=300, downChance=.1, downTrend=.06, start = 1285.85, time = 0, recession = False):

        self.netPos = netPos
        self.downChance = downChance
        self.downTrend = downTrend
        self.value = start
        self.time = time
        self.recession = False

    def getValue(self):
        return self.value

    def update(self):
        if not self.recession:
            if random.random() < self.downTrend:
                self.recession = True
            if random.random() > self.downChance:
                self.value += random.random() * self.netPos 
            else:
                self.value -= random.random() * self.netPos 
        else:
            if random.random() < self.downTrend:
                self.recession = False
            if random.random() < self.downChance:
                self.value += random.random() * self.netPos 
            else:
                self.value -= random.random() * self.netPos 

times = 5000
values = []  
for i in range(1200):  
    values += [0]  
for x in range(times):  
    runOnce = Simulation()  
    for y in range(1200):  
        values[y] += runOnce.getValue()  
        runOnce.update()  
for i in range(1200):  
    values[i] = values[i] / times  
def plottem(x,y):  
    pylab.plot(range(1200), values[x:y-1], label="Trend")   
    pylab.title("Simulated Trend")  
    pylab.xlabel("Time")  
    pylab.ylabel("Relative Value")  
    pylab.legend(loc = 1)  
    pylab.show()  
def getChange(x,y):  
    print (values[x] - values[y-1])/(x-y-1)  

plottem(0,1999)  

结果:

the surprising results

1 个答案:

答案 0 :(得分:1)

完全可以预料到这一点。你已经运行了一系列模拟,这些模拟都是以上升趋势开始并平均结果。由于它们都是从一个上升开始,平均值开始上升。之后,它们会不同步,平均值没有太大的趋势。