2009-11-23 5 views
0

Я хочу, чтобы имитировать биномиальное распределение, где цена чего-то может идти только вверх или вниз с вероятностью p, которая составляет 50% на этот раз.Имитация биномиального распределения

Мои переменные:

S = 100 (базовое значение)

и = 1,1 (сколько значение идет вверх в каждом эксперименте, если он идет вверх)

д = 1/U (сколько значение идет вниз в каждом эксперименте, если он идет вниз)

р = 0,5 (вероятность)

п = 400 (число экспериментов)

Я не объявлял эти переменные, потому что я хочу прочитать эти значения из определенных ячеек.

Моего код (для первого шага):

Sub BINOM() 

    S = Range("L4").Value 
    u = Range("M4").Value 
    d = Range("N4").Value 
    p = Range("O4").Value 
    n = Range("P4").Value 
    v = Rnd() 

    If v > p Then 
     Range("B2").Value = S * u 
    Else 
     Range("B2").Value = S * d 
    End If 

End Sub 

В результате второго эксперимента (который должен быть записан в B3 ячейке) должен быть рассчитан из результата первого эксперимента, и так далее но не с использованием одного и того же случайного числа.

+1

Я думаю, что мы туманны, каков должен быть результат эксперимента. То, что вы определили, и то, что определено Джеффом ниже, приведет к S * U или S * D, для которых ваши значения всегда будут равны 100. (или 400, если у вас 400 в L4). Какова математика вывода для каждого эксперимента/итерации? – theo

ответ

0

Я постараюсь изо всех сил, но я просто удалил Excel в пользу Calc, который, насколько я могу судить, не поддерживает один и тот же тип языка.

Sub BINOM() 
    Dim intCounter, v 

    S = Range("L4").Value 
    u = Range("M4").Value 
    d = Range("N4").Value 
    p = Range("O4").Value 
    n = Range("P4").Value 

    Range("B1").Value = s  

    For intCounter = 2 to n 

    '//If this creates an error then just remove it. 
    '//It should keep the same random number from appearing over and over. 
    Randomize 

    '//Create new Random number in v 
    v = Rnd() 

    If v > p Then 
     Range("B" & intCounter).Value = Range("B" & (intCounter - 1)).Value * u 
    Else 
     Range("B" & intCounter).Value = Range("B" & (intCounter - 1)).Value * d 
    End If 

    Next intCounter 
End Sub 

Сообщите мне, если это поможет вам или возникнут какие-либо ошибки. Обновлено для каждой ячейки из данных, данных предыдущей ячейки.

+0

Спасибо, Джефф! Хорошо, теперь у меня 400 значений, но они все 110s (S * u) и 90,90909s (S * d), так что это результаты 400 первых экспериментов. Второй результат должен быть рассчитан по результатам первого эксперимента, поэтому он может быть S * u * u или S * d * d или просто S (S * u * d) ... – 2009-11-23 19:40:24

+0

Jeff! Вы сделали это! Ты ЛУЧШИЙ !;) – 2009-11-23 19:49:18

+0

Мое удовольствие. Наслаждайтесь! Наверное, я до сих пор не совсем понимаю, что вы делаете, но мне не нужно, если это сработает. :) – Jeff

Смежные вопросы