Show
Ignore:
Timestamp:
08/14/08 00:33:40 (5 months ago)
Author:
rezoo
Message:

引数をより扱いやすい形になるように整理。

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/python/option_tools/alpha.py

    r17588 r17600  
    55import random,math 
    66 
    7 def effectiveWeight_Call(S0,C0,K,T,R,V1,V=None,mu=None,cacheNum=10000,newtonNum=10,seed=0): 
    8         """対数効用関数に基づいた、無リスク資産とコールオプションの対数最適成長比率を求めます。 
     7def effectiveWeight_Call(S0,C0,K,T,DT,R,V1=None,V=None,mu=None,cacheNum=10000,newtonNum=10,seed=0): 
     8        """対数最適戦略に基づいた、無リスク資産とコールオプションのポートフォリオにおける最適比率を求めます。 
    99         
    1010        引数: 
     
    1212                C0:現在のコール価格 
    1313                K:権利行使価格 
    14                 T:満期までの残り時間(ただし1期間後) 
     14                T:現在における、満期までの残り時間 
     15                DT:1期間の長さ 
    1516                R:無リスク利率 
    1617                V1:1期間における原資産のボラティリティ 
     18                        (指定されない場合は原資産のボラティリティから推定します。) 
    1719                V:原資産のボラティリティ 
    1820                        (指定されない場合はコール価格からインプライドボラティリティを算出します。) 
    1921                mu:原資産の1期間後における予想成長率 
    20                         (指定されない場合は期待値が0となるような値に調整されます) 
     22                        (指定されない場合は原資産の変動の期待値が0となるような値に調整されます。) 
    2123                cacheNum:キャッシュする量 
    2224                newtonNum:ニュートン法を行なう回数 
     
    2931        cache = [] 
    3032        random.seed(seed) 
    31         avg = -0.5*V1*V1 if not mu else mu #指定されなかったらマルチンゲールにする。 
    32         vol = BS_Call_IV(S0,K,T,R,C0,HV=0.2,maxNum=200) if not V else V #FIXME:1期間後のTが用いられている。 
     33        avg = -0.5*V1*V1 if not mu else mu 
     34        vol = BS_Call_IV(S0,K,T,R,C0,HV=0.2,maxNum=200) if not V else V 
     35        vol1 = vol*math.sqrt(DT) if not V1 else V1 
    3336 
    3437        for i in range(cacheNum): 
    3538                #対数正規分布に基づいて未来の価格を算出 
    36                 S = S0*random.lognormvariate(avg, V1) 
    37                 cnd = C0 / (BS_Call(S,K,T,R,vol)-C0) 
     39                S = S0*random.lognormvariate(avg, vol1) 
     40                cnd = C0 / (BS_Call(S,K,T-DT,R,vol)-C0) 
    3841                cache.append(cnd) 
    3942         
     
    4144        best_m = _m(best_alpha,cache) 
    4245        return (best_alpha,best_m,math.exp(best_m)) 
    43          
    4446 
    4547def _newtonsMethod(num,init_alpha,cache,i=1):