/*********************************************************************/ /* */ /* マルチエージェントシミュレータ Version 1.0 */ /* */ /*********************************************************************/ //------------------ コンポーネントツリー --------------- WORLD { space 市場(10,10),SQUARE_2D(50, 50, LOOP) { agent ANALYST_PESSIMIST(0,0)[1] { dim X(10,10) AS Double = (0.000000); dim Y(100,10) AS Double = (0.000000); dim DIRECTION(190,10) AS Double = (0.000000); dim AR1(10,10) AS Double = (0.000000); } agent PROSPECT(485,111)[0] { dim V1(10,10) AS Double = (0.000000); dim RAMUDA(10,10) AS Double = (0.000000); dim W1(10,10) AS Double = (0.000000); dim ASSET(10,10) AS Double = (0.000000); dim W2(10,10) AS Double = (0.000000); dim A(10,10) AS Double = (0.000000); dim B(10,10) AS Double = (0.000000); dim Z(10,10) AS Double = (0.000000); dim FORECAST(10,10) AS Double = (0.000000); dim W1_OLD(10,10) AS Double = (0.000000); dim 修正係数(10,10) AS Double = (0.000000); dim 修正係数V1(10,10) AS Double = (0.000000); dim 超過収益(10,10) AS Double = (0.000000); dim DIV_MEAN(10,10) AS Double = (0.000000); dim AR1(10,10) AS Double = (0.000000); dim X(10,10) AS Double = (0.000000); dim Y(100,10) AS Double = (0.000000); dim DIRECTION(190,10) AS Double = (0.000000); dim STOCKSHARE(10,10) AS Double = (0.000000); dim PT1(10,10) AS Double = (0.000000); dim DT1(10,10) AS Double = (0.000000); } agent 投資家(274,291)[0] { dim V1(10,10) AS Double = (0.000000); dim RAMUDA(10,10) AS Double = (0.000000); dim W1(10,10) AS Double = (0.000000); dim ASSET(10,10) AS Double = (0.000000); dim W2(10,10) AS Double = (0.000000); dim A(10,10) AS Double = (0.000000); dim B(10,10) AS Double = (0.000000); dim Z(10,10) AS Double = (0.000000); dim FORECAST(10,10) AS Double = (0.000000); dim W1_OLD(10,10) AS Double = (0.000000); dim 修正係数(10,10) AS Double = (0.000000); dim 修正係数V1(10,10) AS Double = (0.000000); dim 超過収益(10,10) AS Double = (0.000000); dim DIV_MEAN(10,10) AS Double = (0.000000); dim AR1(10,10) AS Double = (0.000000); dim STOCKSHARE(10,10) AS Double = (0.000000); dim PT1(10,10) AS Double = (0.000000); dim DT1(10,10) AS Double = (0.000000); dim X(10,10) AS Double = (0.000000); dim Y(100,10) AS Double = (0.000000); dim DIRECTION(190,10) AS Double = (0.000000); } agent NOISE(30,121)[70] { dim V1(10,10) AS Double = (0.000000); dim RAMUDA(10,10) AS Double = (0.000000); dim W1(10,10) AS Double = (0.000000); dim ASSET(10,10) AS Double = (0.000000); dim W2(10,10) AS Double = (0.000000); dim A(10,10) AS Double = (0.000000); dim B(10,10) AS Double = (0.000000); dim Z(10,10) AS Double = (0.000000); dim FORECAST(10,10) AS Double = (0.000000); dim W1_OLD(10,10) AS Double = (0.000000); dim 修正係数(10,10) AS Double = (0.000000); dim 修正係数V1(10,10) AS Double = (0.000000); dim 超過収益(10,10) AS Double = (0.000000); dim DIV_MEAN(10,10) AS Double = (0.000000); dim AR1(10,10) AS Double = (0.000000); dim STOCKSHARE(10,10) AS Double = (0.000000); dim PT1(10,10) AS Double = (0.000000); dim DT1(10,10) AS Double = (0.000000); dim X(10,10) AS Double = (0.000000); dim Y(100,10) AS Double = (0.000000); dim DIRECTION(190,10) AS Double = (0.000000); } agent POSITIVE(354,127)[0] { dim V1(10,10) AS Double = (0.000000); dim RAMUDA(10,10) AS Double = (0.000000); dim W1(10,10) AS Double = (0.000000); dim ASSET(10,10) AS Double = (0.000000); dim W2(10,10) AS Double = (0.000000); dim A(10,10) AS Double = (0.000000); dim B(10,10) AS Double = (0.000000); dim Z(10,10) AS Double = (0.000000); dim FORECAST(10,10) AS Double = (0.000000); dim W1_OLD(10,10) AS Double = (0.000000); dim 修正係数(10,10) AS Double = (0.000000); dim 修正係数V1(10,10) AS Double = (0.000000); dim 超過収益(10,10) AS Double = (0.000000); dim DIV_MEAN(10,10) AS Double = (0.000000); dim AR1(10,10) AS Double = (0.000000); dim STOCKSHARE(10,10) AS Double = (0.000000); dim PT1(10,10) AS Double = (0.000000); dim DT1(10,10) AS Double = (0.000000); dim X(10,10) AS Double = (0.000000); dim Y(100,10) AS Double = (0.000000); dim DIRECTION(190,10) AS Double = (0.000000); } agent MVINVESTOR(49,274)[30] { dim V1(10,10) AS Double = (0.000000); dim RAMUDA(10,10) AS Double = (0.000000); dim W1(10,10) AS Double = (0.000000); dim ASSET(10,10) AS Double = (0.000000); dim W2(10,10) AS Double = (0.000000); dim A(10,10) AS Double = (0.000000); dim B(10,10) AS Double = (0.000000); dim Z(10,10) AS Double = (0.000000); dim FORECAST(10,10) AS Double = (0.000000); dim W1_OLD(10,10) AS Double = (0.000000); dim 修正係数(10,10) AS Double = (0.000000); dim 修正係数V1(10,10) AS Double = (0.000000); dim 超過収益(10,10) AS Double = (0.000000); dim DIV_MEAN(10,10) AS Double = (0.000000); dim AR1(10,10) AS Double = (0.000000); dim STOCKSHARE(10,10) AS Double = (0.000000); dim PT1(10,10) AS Double = (0.000000); dim DT1(10,10) AS Double = (0.000000); dim X(10,10) AS Double = (0.000000); dim Y(100,10) AS Double = (0.000000); dim DIRECTION(190,10) AS Double = (0.000000); } agent ANALYST_OPTIMIST(0,0)[1] { dim AR1(10,10) AS Double = (0.000000); dim X(10,10) AS Double = (0.000000); dim Y(100,10) AS Double = (0.000000); dim DIRECTION(190,10) AS Double = (0.000000); } agent PROSPECT_MV(216,112)[0] { dim V1(10,10) AS Double = (0.000000); dim RAMUDA(10,10) AS Double = (0.000000); dim W1(10,10) AS Double = (0.000000); dim ASSET(10,10) AS Double = (0.000000); dim W2(10,10) AS Double = (0.000000); dim A(10,10) AS Double = (0.000000); dim B(10,10) AS Double = (0.000000); dim Z(10,10) AS Double = (0.000000); dim FORECAST(10,10) AS Double = (0.000000); dim W1_OLD(10,10) AS Double = (0.000000); dim 修正係数(10,10) AS Double = (0.000000); dim 修正係数V1(10,10) AS Double = (0.000000); dim 超過収益(10,10) AS Double = (0.000000); dim DIV_MEAN(10,10) AS Double = (0.000000); dim AR1(10,10) AS Double = (0.000000); dim STOCKSHARE(10,10) AS Double = (0.000000); dim PT1(10,10) AS Double = (0.000000); dim DT1(10,10) AS Double = (0.000000); dim X(10,10) AS Double = (0.000000); dim Y(100,10) AS Double = (0.000000); dim DIRECTION(190,10) AS Double = (0.000000); } } dim 投資家の数(491,226) AS Integer = (0); dim DIVIDEND(10,10) AS Double = (0.000000); dim PRICE(10,10) AS Double = (0.000000); dim 発行数(10,10) AS Integer = (0); dim OLDPRICE(10,10) AS Double = (0.000000); dim RISKFREE(10,10) AS Double = (0.000000); dim DISCOUNTRATE(10,10) AS Double = (0.000000); dim GROWTHRATE(10,10) AS Double = (0.000000); dim SUMA(10,10) AS Double = (0.000000); dim SUMB(10,10) AS Double = (0.000000); dim 取引量(10,10) AS Double = (0.000000); dim VOLUMETEMP(10,10) AS Double = (0.000000); dim 時価総額(10,10) AS Integer = (0); dim ALPHA(10,10) AS Double = (0.000000); dim BETA(10,10) AS Double = (0.000000); dim RAMUDA(10,10) AS Double = (0.000000); dim SIGMA1(10,10) AS Double = (0.000000); dim 株式時価総額(10,10) AS Double = (0.000000); dim 配当変動幅(10,10) AS Double = (0.000000); dim 修正係数(10,10) AS Double = (0.000000); dim 修正係数V1(10,10) AS Double = (0.000000); dim NOISEの数(10,10) AS Integer = (0); dim NORMALの数(10,10) AS Integer = (0); dim INDEX2(10,10) AS Double = (0.000000); dim INDEX3(10,10) AS Double = (0.000000); dim INDEX4(10,10) AS Double = (0.000000); dim INDEX5(10,10) AS Integer = (0); dim INDEX6(10,10) AS Double = (0.000000); dim INDEX7(10,10) AS Double = (0.000000); dim INDEX8(10,10) AS Double = (0.000000); dim INDEX9(10,10) AS Double = (0.000000); dim INDEX10(10,10) AS Double = (0.000000); dim INDEX1(10,10) AS Double = (0.000000); dim INDEX(10,10) AS Double = (0.000000); dim MEAN(10,10) AS Double = (0.000000); dim VOLATILITY(10,10) AS Double = (0.000000); dim POSITIVEの数(10,10) AS Integer = (0); dim PROSPECTの数(10,10) AS Integer = (0); dim DIVIDEND1(10,10) AS Double = (0.000000); dim DIV_MEAN(10,10) AS Double = (0.000000); dim DIV_AR1(10,10) AS Double = (0.000000); dim 予測誤差(46,110) AS Double = (0.000000); dim PI(188,33) AS Double = (0.000000); dim MEAN4(212,37) AS Double = (0.000000); dim ノイズトレーダーの予測誤差(202,175) AS Double = (0.000000); dim MEAN1(10,10) AS Double = (0.000000); } //------------------ コンポーネントパレットツリー --------------- //------------------ エージェント変数初期値データ --------------- INITIAL_VALUE { WORLD.投資家の数 = 1(0); WORLD.DIVIDEND = 1(0.000000); WORLD.PRICE = 1(0.000000); WORLD.発行数 = 1(0); WORLD.RISKFREE = 1(0.000000); WORLD.DISCOUNTRATE = 1(0.000000); WORLD.GROWTHRATE = 1(0.010000); WORLD.配当変動幅 = 1(0.010000); WORLD.NOISEの数 = 1(0); WORLD.予測誤差 = 1(0.000000); WORLD.PI = 1(3.141593); WORLD.ノイズトレーダーの予測誤差 = 1(0.500000); } //------------------ エージェント共通ルール --------------- //------------------ エージェントルール --------------- #begin_rule WORLD Agt_Init{ Dim i as integer // for i = 0 to world.normalの数 - 1 // _CreateAgent(World.市場.投資家) // next i // for i = 0 to world.NOISEの数 - 1 // _CreateAgent(World.市場.noise) // next i // for i = 0 to world.prospectの数 - 1 // _CreateAgent(World.市場.prospect) // next i // for i = 0 to world.positiveの数 - 1 // _CreateAgent(World.市場.positive) // next i // world.normalの数=40 // world.NOISEの数=40 // world.prospectの数=20 // world.positiveの数=25 // world.投資家の数=world.normalの数+ world.NOISEの数+world.prospectの数+world.positiveの数 // world.投資家の数=world.NORMALの数+ world.NOISEの数+world.prospectの数 world.投資家の数=100 _RandomPutAgent(World.市場.投資家, false) _RandomPutAgent(World.市場.noise, false) _RandomPutAgent(World.市場.prospect, false) _RandomPutAgent(World.市場.positive, false) _RandomPutAgent(World.市場.MVINVESTOR, false) _RandomPutAgent(World.市場.PROSPECT_MV, false) world.発行数=100 world.riskfree=0.05 world.ramuda=100 //40 world.sigma1=0.1 //0.25 World.Dividend=20 World.Dividend1=20 World.DISCOUNTRATE=0.1 world.GROWTHRATE=0.00 world.DIV_MEAN=10 world.DIV_AR1=0.5 world.alpha=World.Dividend*(1+World.DISCOUNTRATE)/world.ramuda/world.sigma1/(World.DISCOUNTRATE-world.GROWTHRATE) world.beta=(1+world.RISKFREE)/world.ramuda/world.sigma1 WORLD.suma=world.投資家の数*world.alpha WORLD.sumb=world.投資家の数*world.beta World.OLDPRICE=200 World.PRICE=200 world.volumetemp=0 world.時価総額=40000 world.株式時価総額=20000 // world.配当変動幅=0.01 // world.修正係数=0.05 // world.修正係数V1=0.001 world.index10=1 world.index9=world.index10*(world.price+world.DIVIDEND)/world.OLDPRICE world.index8=world.index9*(world.price+world.DIVIDEND)/world.OLDPRICE world.index7=world.index8*(world.price+world.DIVIDEND)/world.OLDPRICE world.index6=world.index7*(world.price+world.DIVIDEND)/world.OLDPRICE world.index5=world.index6*(world.price+world.DIVIDEND)/world.OLDPRICE world.index4=world.index5*(world.price+world.DIVIDEND)/world.OLDPRICE world.index3=world.index4*(world.price+world.DIVIDEND)/world.OLDPRICE world.index2=world.index3*(world.price+world.DIVIDEND)/world.OLDPRICE world.index1=world.index2*(world.price+world.DIVIDEND)/world.OLDPRICE world.index=world.index1*(world.price+world.DIVIDEND)/world.OLDPRICE world.MEAN=0.1 // world.alpha=0 // world.beta=-(round(world.MEAN*100000)/100000-world.RISKFREE)/world.RAMUDA/world.SIGMA1 } Agt_Step{ WORLD.oldprice=WORLD.PRICE world.price=(world.suma-world.発行数)/(WORLD.sumb) // if world.PRICE<0 then // world.PRICE=world.OLDPRICE*0.7 // end if world.DIVIDEND1=World.Dividend World.Dividend=world.DIV_MEAN+world.DIV_AR1*world.DIVIDEND+sqr(-2*log(rnd()))*cos(2*3.1415926*rnd())/sqr(10)*(world.配当変動幅) world.index10=world.index9 world.index9=world.index8 world.index8=world.index7 world.index7=world.index6 world.index6=world.index5 world.index5=world.index4 world.index4=world.index3 world.index3=world.index2 world.index2=world.index1 world.index1=world.index world.index=world.index*(world.price+world.DIVIDEND)/world.OLDPRICE // world.mean=(world.index/world.index1-1)/10+(world.index1/world.index2-1)/10+(world.index2/world.index3-1)/10+(world.index3/world.index4-1)/10+(world.index4/world.index5-1)/10+(world.index5/world.index6-1)/10+(world.index6/world.index7-1)/10+(world.index7/world.index8-1)/10+(world.index8/world.index9-1)/10+(world.index9/world.index10-1)/10 // world.mean=(world.index/world.index1-1)/4+(world.index1/world.index2-1)/4+(world.index2/world.index3-1)/4+(world.index3/world.index4-1)/4 world.mean=(world.index/world.index1-1)/2+(world.index1/world.index2-1)/2 world.mean1=(world.index/world.index1-1) // world.mean=round(world.MEAN*1000)/1000 // world.mean4=(world.index/world.index1-1)/4+(world.index1/world.index2-1)/4+(world.index2/world.index3-1)/4+(world.index3/world.index4-1)/4 // world.volatility=sqr(((world.index/world.index1-1-mean)*(world.index/world.index1-1-mean)+(world.index1/world.index2-1-mean)*(world.index1/world.index2-1-mean)+(world.index2/world.index3-1-mean)*(world.index2/world.index3-1-mean)+(world.index3/world.index4-1-mean)*(world.index3/world.index4-1-mean)+(world.index4/world.index5-1-mean)*(world.index4/world.index5-1-mean)+(world.index5/world.index6-1-mean)*(world.index5/world.index6-1-mean)+(world.index6/world.index7-1-mean)*(world.index6/world.index7-1-mean)+(world.index7/world.index8-1-mean)*(world.index7/world.index8-1-mean)+(world.index8/world.index9-1-mean)*(world.index8/world.index9-1-mean)+(world.index9/world.index10-1-mean)*(world.index9/world.index10-1-mean))/10) world.volatility=sqr(((world.index/world.index1-1-mean)*(world.index/world.index1-1-mean)+(world.index1/world.index2-1-mean)*(world.index1/world.index2-1-mean)+(world.index2/world.index3-1-mean)*(world.index2/world.index3-1-mean)+(world.index3/world.index4-1-mean)*(world.index3/world.index4-1-mean))/4) // world.volatility=sqr((world.index/world.index1-1-mean)*(world.index/world.index1-1-mean)/2+(world.index1/world.index2-1-mean)*(world.index1/world.index2-1-mean)/2) world.suma=0 world.sumb=0 world.取引量=world.volumetemp world.volumetemp=0 world.時価総額=0 world.株式時価総額=0 } #end_rule WORLD //------------------ エージェントルール --------------- #begin_rule WORLD.市場.ANALYST_PESSIMIST Agt_Init{ // 悲観的なアナリスト My.ar1=0.5-0.1 //0.2+sqr(-2*3.1415926*log(rnd()))*cos(2*3.1415926*rnd()) } Agt_Step{ My.ar1=My.ar1 _MoveToSpace(my.X, my.Y, 5) } #end_rule WORLD.市場.ANALYST_PESSIMIST //------------------ エージェントルール --------------- #begin_rule WORLD.市場.PROSPECT Agt_Init{ // Prospect Theory Investor My.ramuda=world.ramuda // my.z=sqr(-2*3.1415926*log(rnd()))*cos(2*3.1415926*rnd()) My.v1=world.sigma1 My.Div_mean=world.DIV_MEAN My.AR1=world.DIV_AR1+(rnd()-0.5)*0.02 //0.02 My.asset=world.時価総額/world.投資家の数 my.超過収益=0 My.Pt1=my.Div_mean/(1-my.ar1)/(World.DISCOUNTRATE-world.GROWTHRATE) My.Dt1=world.DIV_MEAN+world.DIV_AR1*World.Dividend My.StockShare=1 My.A=1+1*(My.Pt1+My.Dt1)/my.ramuda/my.v1 My.B=1*(1+world.DISCOUNTRATE)/my.ramuda/my.v1 My.w1=(my.a-my.b*World.PRICE)*(World.PRICE+WORLD.DIVIDEND1) My.w1_old=(my.a-my.b*World.PRICE)*(World.PRICE+WORLD.DIVIDEND1) My.W2=My.ASSET-My.W1 my.修正係数=world.修正係数*(sqr(-2*3.1415926*log(rnd()))*cos(2*3.1415926*rnd()))*1 my.修正係数V1=world.修正係数V1*(sqr(-2*3.1415926*log(rnd()))*cos(2*3.1415926*rnd()))*1 } Agt_Step{ // AR1係数の推定値 // My.AR1=(1-my.修正係数)*My.AR1+(my.修正係数)*(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1 My.AR1=(1-world.修正係数)*My.AR1+(world.修正係数)*(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1 // リスク資産の予測誤差 My.v1= (1-My.修正係数)*My.v1+(My.修正係数)*(world.DIVIDEND/(1-world.DIV_AR1))*(world.DIVIDEND/(1-world.DIV_AR1))*(my.ar1-(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1)*(my.ar1-(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1) // 前期の株式保有枚数 My.StockShare=(My.A-My.B*World.PRICE) My.w1_old=my.w1 // 前期の総資産(株価が決まってなかったのでこの時点で決定) My.w1=My.StockShare*(World.PRICE+World.DIVIDEND1) My.W2=My.W2*(1+world.RISKFREE) My.ASSET=My.W1+My.W2 my.超過収益=my.超過収益+My.W1-My.w1_old*(1+World.RISKFREE) // My.ASSET=My.W1*(World.PRICE+world.DIVIDEND)/World.OLDPRICE+My.W2*(1+World.RISKFREE) // 前期の株式保有金額 // My.w1=My.StockShare*World.PRICE // 前期のキャッシュ保有金額 // My.W2=My.ASSET-My.W1 // My.StockShare=(My.A-My.B*World.PRICE) // 来期予想株価 My.Pt1=(my.Div_mean/(1-my.ar1)/(World.DISCOUNTRATE-world.GROWTHRATE)) // 来期予想配当金 My.Dt1=world.DIV_MEAN+world.DIV_AR1*World.Dividend+world.予測誤差*1.5*(rnd()-0.5) // 直近の株式リターンが要求収益率を上回っていた場合。 My.A=1+1*(My.Pt1+My.Dt1)/my.ramuda/my.v1*1 My.B=1*(1+world.DISCOUNTRATE)/my.ramuda/my.v1*1 // 直近の株式リターンが要求収益率を下回っていた場合。 if ((World.PRICE+world.DIVIDEND)/World.OLDPRICE-1-world.DISCOUNTRATE)<0 then My.A=1+2.25*(My.Pt1+My.Dt1)/world.ramuda/my.v1*1 My.B=2.25*(1+world.DISCOUNTRATE)/my.ramuda/my.v1*1 end if World.sumA=World.sumA+My.A World.sumB=World.sumB+My.B World.volumetemp=world.volumetemp+abs(my.w1-my.w1_old) World.時価総額=World.時価総額+My.ASSET World.株式時価総額=World.株式時価総額+My.W1 _MoveToSpace(my.X, my.Y, 1) } #end_rule WORLD.市場.PROSPECT //------------------ エージェントルール --------------- #begin_rule WORLD.市場.投資家 Agt_Init{ // 合理的投資家(アナリストの予測を聞かない) My.ramuda=world.ramuda // my.z=sqr(-2*3.1415926*log(rnd()))*cos(2*3.1415926*rnd()) My.v1=world.sigma1 //*(1+0.1*sqr(rnd())*sin(2*3.1415926*rnd())) // 配当プロセスの定数項は既知。 // 配当プロセスのAR1項は個人差がある。 My.Div_mean=world.DIV_MEAN My.AR1=world.DIV_AR1+(rnd()-0.5)*0.02 //0.02 My.asset=world.時価総額/world.投資家の数 my.超過収益=0 My.Pt1=my.Div_mean/(1-my.ar1)/(World.DISCOUNTRATE-world.GROWTHRATE) My.Dt1=world.DIV_MEAN+world.DIV_AR1*World.Dividend My.A=(My.Pt1+My.Dt1)/world.ramuda/my.v1 My.B=(1+world.RISKFREE)/my.ramuda/my.v1 My.StockShare=1 My.w1=(my.a-my.b*World.PRICE)*(World.PRICE+WORLD.DIVIDEND1) My.w1_old=(my.a-my.b*World.PRICE)*(World.PRICE+WORLD.DIVIDEND1) My.W2=My.ASSET-My.W1 my.修正係数=world.修正係数*(sqr(-2*3.1415926*log(rnd()))*cos(2*3.1415926*rnd()))*1 my.修正係数V1=world.修正係数V1*(sqr(-2*3.1415926*log(rnd()))*cos(2*3.1415926*rnd()))*1 } Agt_Step{ // AR1係数の推定値 // My.AR1=(1-my.修正係数)*My.AR1+(my.修正係数)*(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1 My.AR1=(1-world.修正係数)*My.AR1+(world.修正係数)*(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1 // リスク資産の予測誤差 My.v1= (1-My.修正係数)*My.v1+(My.修正係数)*(world.DIVIDEND/(1-world.DIV_AR1))*(world.DIVIDEND/(1-world.DIV_AR1))*(my.ar1-(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1)*(my.ar1-(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1) // 前期の株式保有枚数 My.StockShare=(My.A-My.B*World.PRICE) My.w1_old=my.w1 // 前期の総資産(株価が決まってなかったのでこの時点で決定) My.w1=My.StockShare*(World.PRICE+World.DIVIDEND1) My.W2=My.W2*(1+world.RISKFREE) My.ASSET=My.W1+My.W2 my.超過収益=my.超過収益+My.W1-My.w1_old*(1+World.RISKFREE) // My.ASSET=My.W1*(World.PRICE+world.DIVIDEND)/World.OLDPRICE+My.W2*(1+World.RISKFREE) // 前期の株式保有金額 // My.w1=My.StockShare*World.PRICE // 前期のキャッシュ保有金額 // My.W2=My.ASSET-My.W1 // My.StockShare=(My.A-My.B*World.PRICE) // 来期予想株価 My.Pt1=(my.Div_mean/(1-my.ar1)/(World.DISCOUNTRATE-world.GROWTHRATE)) // 来期予想配当金 My.Dt1=world.DIV_MEAN+world.DIV_AR1*World.Dividend //+world.予測誤差*(rnd()-0.5) // 直近の株式リターンが要求収益率を上回っていた場合。 My.A=1*(My.Pt1+My.Dt1)/world.ramuda/my.v1 My.B=1*(1+world.RISKFREE)/my.ramuda/my.v1 // 直近の株式リターンが要求収益率を下回っていた場合。 if ((World.PRICE+world.DIVIDEND)/World.OLDPRICE-1-world.DISCOUNTRATE)<0 then My.A=1*(My.Pt1+My.Dt1)/world.ramuda/my.v1 My.B=1*(1+world.RISKFREE)/my.ramuda/my.v1 end if World.sumA=World.sumA+My.A World.sumB=World.sumB+My.B World.volumetemp=world.volumetemp+abs(my.w1-my.w1_old) World.時価総額=World.時価総額+My.ASSET World.株式時価総額=World.株式時価総額+My.W1 _MoveToSpace(my.X, my.Y, 1) } #end_rule WORLD.市場.投資家 //------------------ エージェントルール --------------- #begin_rule WORLD.市場.NOISE Agt_Init{ // Noise Trader My.ramuda=world.ramuda // my.z=sqr(-2*3.1415926*log(rnd()))*cos(2*3.1415926*rnd()) My.v1=world.sigma1//*(1+0.1*sqr(rnd())*sin(2*3.1415926*rnd())) My.Div_mean=world.DIV_MEAN My.AR1=world.DIV_AR1+(rnd()-0.5)*world.ノイズトレーダーの予測誤差 //0.02 My.asset=world.時価総額/world.投資家の数 my.超過収益=0 // My.Pt1=my.Div_mean/(1-my.ar1)/(World.DISCOUNTRATE-world.GROWTHRATE) // My.Dt1=world.DIV_MEAN+world.DIV_AR1*World.Dividend // Noise Trader estimate next dividend as below. // 来期予想配当金 My.Dt1=World.Dividend+world.ノイズトレーダーの予測誤差*((rnd()-0.5)) // My.Dt1=20+world.ノイズトレーダーの予測誤差*((rnd()-0.5)) // 来期予想株価 My.Pt1=(My.Dt1/(World.DISCOUNTRATE-world.GROWTHRATE)) My.A=(My.Pt1+My.Dt1)/world.ramuda/my.v1 My.B=(1+world.RISKFREE)/my.ramuda/my.v1 My.StockShare=1 My.w1=(my.a-my.b*World.PRICE)*(World.PRICE+WORLD.DIVIDEND1) My.w1_old=(my.a-my.b*World.PRICE)*(World.PRICE+WORLD.DIVIDEND1) My.W2=My.ASSET-My.W1 my.修正係数=world.修正係数*(sqr(-2*3.1415926*log(rnd()))*cos(2*3.1415926*rnd()))*1 my.修正係数V1=world.修正係数V1*(sqr(-2*3.1415926*log(rnd()))*cos(2*3.1415926*rnd()))*1 } Agt_Step{ // AR1係数の推定値 // My.AR1=(1-my.修正係数)*My.AR1+(my.修正係数)*(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1 My.AR1=(1-world.修正係数)*My.AR1+(world.修正係数)*(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1 // My.AR1=0.5+(rnd()-0.5)*0.01 // リスク資産の予測誤差 My.v1= (1-My.修正係数)*My.v1+(My.修正係数)*(world.DIVIDEND/(1-world.DIV_AR1))*(world.DIVIDEND/(1-world.DIV_AR1))*(my.ar1-(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1)*(my.ar1-(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1) // 前期の株式保有枚数 My.StockShare=(My.A-My.B*World.PRICE) My.w1_old=my.w1 // 前期の総資産(株価が決まってなかったのでこの時点で決定) My.w1=My.StockShare*(World.PRICE+World.DIVIDEND1) My.W2=My.W2*(1+world.RISKFREE) My.ASSET=My.W1+My.W2 my.超過収益=my.超過収益+My.W1-My.w1_old*(1+World.RISKFREE) // My.ASSET=My.W1*(World.PRICE+world.DIVIDEND)/World.OLDPRICE+My.W2*(1+World.RISKFREE) // 前期の株式保有金額 // My.w1=My.StockShare*World.PRICE // 前期のキャッシュ保有金額 // My.W2=My.ASSET-My.W1 // My.StockShare=(My.A-My.B*World.PRICE) // 来期予想配当金 My.Dt1=World.Dividend+world.ノイズトレーダーの予測誤差*((rnd()-0.5)) // 来期予想株価 My.Pt1=(My.Dt1/(World.DISCOUNTRATE-world.GROWTHRATE)) // 直近の株式リターンが要求収益率を上回っていた場合。 My.A=1*(My.Pt1+My.Dt1)/world.ramuda/my.v1 My.B=1*(1+world.RISKFREE)/my.ramuda/my.v1 // 直近の株式リターンが要求収益率を下回っていた場合。 if ((World.PRICE+world.DIVIDEND)/World.OLDPRICE-1-world.DISCOUNTRATE)<0 then My.A=1*(My.Pt1+My.Dt1)/world.ramuda/my.v1 My.B=1*(1+world.RISKFREE)/my.ramuda/my.v1 end if World.sumA=World.sumA+My.A World.sumB=World.sumB+My.B World.volumetemp=world.volumetemp+abs(my.w1-my.w1_old) World.時価総額=World.時価総額+My.ASSET World.株式時価総額=World.株式時価総額+My.W1 _MoveToSpace(my.X, my.Y, 1) } #end_rule WORLD.市場.NOISE //------------------ エージェントルール --------------- #begin_rule WORLD.市場.POSITIVE Agt_Init{ // 合理的投資家(アナリストの予測を聞く) My.ramuda=world.ramuda // my.z=sqr(-2*3.1415926*log(rnd()))*cos(2*3.1415926*rnd()) My.v1=world.sigma1//*(1+0.1*sqr(rnd())*sin(2*3.1415926*rnd())) My.Div_mean=world.DIV_MEAN My.AR1=world.DIV_AR1+(rnd()-0.5)*0.02 //0.02 My.asset=world.時価総額/world.投資家の数 my.超過収益=0 My.Pt1=my.Div_mean/(1-my.ar1)/(World.DISCOUNTRATE-world.GROWTHRATE) My.Dt1=world.DIV_MEAN+world.DIV_AR1*World.Dividend My.A=(My.Pt1+My.Dt1)/world.ramuda/my.v1 My.B=(1+world.RISKFREE)/my.ramuda/my.v1 My.StockShare=1 My.w1=(my.a-my.b*World.PRICE)*(World.PRICE+WORLD.DIVIDEND1) My.w1_old=(my.a-my.b*World.PRICE)*(World.PRICE+WORLD.DIVIDEND1) My.W2=My.ASSET-My.W1 my.修正係数=world.修正係数*(sqr(-2*3.1415926*log(rnd()))*cos(2*3.1415926*rnd()))*1 my.修正係数V1=world.修正係数V1*(sqr(-2*3.1415926*log(rnd()))*cos(2*3.1415926*rnd()))*1 } Agt_Step{ // AR1係数の推定値 // My.AR1=(1-my.修正係数)*My.AR1+(my.修正係数)*(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1 My.AR1=(1-world.修正係数)*My.AR1+(world.修正係数)*(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1 // リスク資産の予測誤差 My.v1= (1-My.修正係数)*My.v1+(My.修正係数)*(world.DIVIDEND/(1-world.DIV_AR1))*(world.DIVIDEND/(1-world.DIV_AR1))*(my.ar1-(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1)*(my.ar1-(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1) /// 回りの投資家の意見を聴取 Dim aColle As Collection Dim aNum As Integer Dim aIndex As Integer Dim aObj As Object dim i as integer // aColle = _collectAround(MY.X, MY.Y, 3, World.市場, all) aColle = _collectAround(MY.X, MY.Y, 3, World.市場, world.市場.POSITIVE) aNum = _CountCollection(aColle) For i = 1 To aNum Step 1 // ランダムに抽出する相手のインデックスを得る //aIndex = (Rnd() * (aNum - i + 1)) + 1 // 取引相手を確定 //aObj = _GetObject(aColle, aIndex -1) aObj = _GetObject(aColle, i-1) My.AR1=(1-world.修正係数)*My.AR1+world.修正係数*aObj.ar1 // +world.修正係数*aObj.AR1 Next i aColle = _collectAround(MY.X, MY.Y, 3, World.市場, world.市場.投資家) aNum = _CountCollection(aColle) For i = 1 To aNum Step 1 // ランダムに抽出する相手のインデックスを得る //aIndex = (Rnd() * (aNum - i + 1)) + 1 // 取引相手を確定 //aObj = _GetObject(aColle, aIndex -1) aObj = _GetObject(aColle, i-1) My.AR1=(1-world.修正係数)*My.AR1+world.修正係数*aObj.ar1 // +world.修正係数*aObj.AR1 Next i aColle = _collectAround(MY.X, MY.Y, 3, World.市場, world.市場.PROSPECT) aNum = _CountCollection(aColle) For i = 1 To aNum Step 1 // ランダムに抽出する相手のインデックスを得る //aIndex = (Rnd() * (aNum - i + 1)) + 1 // 取引相手を確定 //aObj = _GetObject(aColle, aIndex -1) aObj = _GetObject(aColle, i-1) My.AR1=(1-world.修正係数)*My.AR1+world.修正係数*aObj.ar1 // +world.修正係数*aObj.AR1 Next i aColle = _collectAround(MY.X, MY.Y, 3, World.市場, world.市場.ANALYST_OPTIMIST) aNum = _CountCollection(aColle) For i = 1 To aNum Step 1 // ランダムに抽出する相手のインデックスを得る //aIndex = (Rnd() * (aNum - i + 1)) + 1 // 取引相手を確定 //aObj = _GetObject(aColle, aIndex -1) aObj = _GetObject(aColle, i-1) My.AR1=(1-world.修正係数)*My.AR1+world.修正係数*aObj.ar1 // +world.修正係数*aObj.AR1 Next i aColle = _collectAround(MY.X, MY.Y, 3, World.市場, world.市場.ANALYST_PESSIMIST) aNum = _CountCollection(aColle) For i = 1 To aNum Step 1 // ランダムに抽出する相手のインデックスを得る //aIndex = (Rnd() * (aNum - i + 1)) + 1 // 取引相手を確定 //aObj = _GetObject(aColle, aIndex -1) aObj = _GetObject(aColle, i-1) My.AR1=(1-world.修正係数)*My.AR1+world.修正係数*aObj.ar1 // +world.修正係数*aObj.AR1 Next i // 前期の株式保有枚数 My.StockShare=(My.A-My.B*World.PRICE) My.w1_old=my.w1 // 前期の総資産(株価が決まってなかったのでこの時点で決定) My.w1=My.StockShare*(World.PRICE+World.DIVIDEND1) My.W2=My.W2*(1+world.RISKFREE) My.ASSET=My.W1+My.W2 my.超過収益=my.超過収益+My.W1-My.w1_old*(1+World.RISKFREE) // My.ASSET=My.W1*(World.PRICE+world.DIVIDEND)/World.OLDPRICE+My.W2*(1+World.RISKFREE) // 前期の株式保有金額 // My.w1=My.StockShare*World.PRICE // 前期のキャッシュ保有金額 // My.W2=My.ASSET-My.W1 // My.StockShare=(My.A-My.B*World.PRICE) // 来期予想株価 My.Pt1=(my.Div_mean/(1-my.ar1)/(World.DISCOUNTRATE-world.GROWTHRATE)) // 来期予想配当金 My.Dt1=world.DIV_MEAN+world.DIV_AR1*World.Dividend+world.予測誤差*(rnd()-0.5) // 直近の株式リターンが要求収益率を上回っていた場合。 My.A=1*(My.Pt1+My.Dt1)/world.ramuda/my.v1 My.B=1*(1+world.RISKFREE)/my.ramuda/my.v1 // 直近の株式リターンが要求収益率を下回っていた場合。 if ((World.PRICE+world.DIVIDEND)/World.OLDPRICE-1-world.DISCOUNTRATE)<0 then My.A=1*(My.Pt1+My.Dt1)/world.ramuda/my.v1 My.B=1*(1+world.RISKFREE)/my.ramuda/my.v1 end if World.sumA=World.sumA+My.A World.sumB=World.sumB+My.B World.volumetemp=world.volumetemp+abs(my.w1-my.w1_old) World.時価総額=World.時価総額+My.ASSET World.株式時価総額=World.株式時価総額+My.W1 _MoveToSpace(my.X, my.Y, 1) } #end_rule WORLD.市場.POSITIVE //------------------ エージェントルール --------------- #begin_rule WORLD.市場.MVINVESTOR Agt_Init{ // Trend Chaser My.ramuda=world.ramuda // my.z=sqr(-2*3.1415926*log(rnd()))*cos(2*3.1415926*rnd()) My.v1=world.sigma1 My.Div_mean=world.DIV_MEAN My.AR1=world.DIV_AR1+(rnd()-0.5)*0.02 //0.02 My.asset=world.時価総額/world.投資家の数 my.超過収益=0 My.Pt1=my.Div_mean/(1-my.ar1)/(World.DISCOUNTRATE-world.GROWTHRATE) My.Dt1=world.DIV_MEAN+world.DIV_AR1*World.Dividend // My.A=1+1*(My.Pt1+My.Dt1)/world.ramuda/my.v1 // My.B=1*(1+world.DISCOUNTRATE)/my.ramuda/my.v1 // My.A=0 // My.B=(world.mean-world.RISKFREE)/my.RAMUDA/my.V1 // My.B=(round(1000*world.MEAN)/1000-world.RISKFREE)/my.RAMUDA/my.V1 // My.B=-(world.MEAN-world.RISKFREE)/my.RAMUDA/my.V1 // My.A=(world.MEAN+(rnd()-0.5)*0.001*world.予測誤差-world.RISKFREE)*20 // My.B=0 My.A=(1+world.MEAN)*((1+world.MEAN)*world.PRICE-world.DIVIDEND)/my.ramuda/my.v1 My.B=(1+world.RISKFREE)/my.RAMUDA/my.V1 My.StockShare=1 // My.w1=(my.a-my.b*World.PRICE)*(World.PRICE+WORLD.DIVIDEND1) // My.w1_old=(my.a-my.b*World.PRICE)*(World.PRICE+WORLD.DIVIDEND1) // My.W2=My.ASSET-My.W1 My.w1=My.StockShare*(World.PRICE+World.DIVIDEND1) My.W2=My.W2*(1+world.RISKFREE) my.修正係数=world.修正係数*(sqr(-2*3.1415926*log(rnd()))*cos(2*3.1415926*rnd()))*1 my.修正係数V1=world.修正係数V1*(sqr(-2*3.1415926*log(rnd()))*cos(2*3.1415926*rnd()))*1 } Agt_Step{ // AR1係数の推定値 // My.AR1=(1-my.修正係数)*My.AR1+(my.修正係数)*(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1 My.AR1=(1-world.修正係数)*My.AR1+(world.修正係数)*(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1 // リスク資産の予測誤差 My.v1= (1-My.修正係数)*My.v1+(My.修正係数)*(world.DIVIDEND/(1-world.DIV_AR1))*(world.DIVIDEND/(1-world.DIV_AR1))*(my.ar1-(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1)*(my.ar1-(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1) // 前期の株式保有枚数 My.StockShare=(My.A-My.B*World.PRICE) My.w1_old=my.w1 // 前期の総資産(株価が決まってなかったのでこの時点で決定) My.w1=My.StockShare*(World.PRICE+World.DIVIDEND1) My.W2=My.W2*(1+world.RISKFREE) My.ASSET=My.W1+My.W2 my.超過収益=my.超過収益+My.W1-My.w1_old*(1+World.RISKFREE) // My.ASSET=My.W1*(World.PRICE+world.DIVIDEND)/World.OLDPRICE+My.W2*(1+World.RISKFREE) // 前期の株式保有金額 // My.w1=My.StockShare*World.PRICE // 前期のキャッシュ保有金額 // My.W2=My.ASSET-My.W1 // My.StockShare=(My.A-My.B*World.PRICE) // 来期予想株価 My.Pt1=(my.Div_mean/(1-my.ar1)/(World.DISCOUNTRATE-world.GROWTHRATE)) // 来期予想配当金 My.Dt1=world.DIV_MEAN+world.DIV_AR1*World.Dividend+world.予測誤差*(rnd()-0.5) // MV最適化により計算 // My.A=0 My.A=(1+world.MEAN+(rnd()-0.5)*0.001*world.予測誤差)*((1+world.MEAN+(rnd()-0.5)*0.001*world.予測誤差)*world.PRICE-world.DIVIDEND)/my.ramuda/my.v1 // My.B=(round(1000*world.MEAN)/1000+(rnd()-0.5)*0.001-world.RISKFREE)/my.RAMUDA/my.V1 // My.B=(round(1000*world.MEAN)/1000-1+(rnd()-0.5)*0.001*world.予測誤差-world.RISKFREE)/my.RAMUDA/my.V1 // My.B=-(world.MEAN+(rnd()-0.5)*0.001*world.予測誤差-world.RISKFREE)/my.RAMUDA/my.V1 // My.B=(0.1+(rnd()-0.5)*0.001*world.予測誤差-world.RISKFREE)/my.RAMUDA/my.V1 My.B=1*(1+world.RISKFREE)/my.ramuda/my.v1 World.sumA=World.sumA+My.A World.sumB=World.sumB+My.B World.volumetemp=world.volumetemp+abs(my.w1-my.w1_old) World.時価総額=World.時価総額+My.ASSET World.株式時価総額=World.株式時価総額+My.W1 _MoveToSpace(my.X, my.Y, 1) } #end_rule WORLD.市場.MVINVESTOR //------------------ エージェントルール --------------- #begin_rule WORLD.市場.ANALYST_OPTIMIST Agt_Init{ // 楽観的なアナリスト My.ar1=0.5+0.1 //0.2+sqr(-2*3.1415926*log(rnd()))*cos(2*3.1415926*rnd()) } Agt_Step{ My.ar1=My.ar1 _MoveToSpace(my.X, my.Y, 5) } #end_rule WORLD.市場.ANALYST_OPTIMIST //------------------ エージェントルール --------------- #begin_rule WORLD.市場.PROSPECT_MV Agt_Init{ My.ramuda=world.ramuda my.z=(0.9+0.2*rnd()) My.v1=world.sigma1 My.Div_mean=world.DIV_MEAN My.AR1=world.DIV_AR1+(rnd()-0.5)*0.02 //0.02 // My.AR1=world.DIV_AR1 My.asset=world.時価総額/world.投資家の数 my.超過収益=0 My.Pt1=my.Div_mean/(1-my.ar1)/(World.DISCOUNTRATE-world.GROWTHRATE) My.Dt1=world.DIV_MEAN+world.DIV_AR1*World.Dividend My.StockShare=1 My.A=1+1*(My.Pt1+My.Dt1)/my.ramuda/my.v1 My.B=1*(1+world.DISCOUNTRATE)/my.ramuda/my.v1 My.w1=(my.a-my.b*World.PRICE)*(World.PRICE+WORLD.DIVIDEND1) My.w1_old=(my.a-my.b*World.PRICE)*(World.PRICE+WORLD.DIVIDEND1) My.W2=My.ASSET-My.W1 my.修正係数=world.修正係数*(sqr(-2*3.1415926*log(rnd()))*cos(2*3.1415926*rnd()))*1 my.修正係数V1=world.修正係数V1*(sqr(-2*3.1415926*log(rnd()))*cos(2*3.1415926*rnd()))*1 } Agt_Step{ // AR1係数の推定値 // My.AR1=(1-my.修正係数)*My.AR1+(my.修正係数)*(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1 // My.AR1=(1-world.修正係数)*My.AR1+(world.修正係数)*(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1 My.AR1=My.AR1+(world.INDEX/world.INDEX1-1-world.DISCOUNTRATE)*rnd() // リスク資産の予測誤差 My.v1= (1-My.修正係数)*My.v1+(My.修正係数)*(world.DIVIDEND/(1-world.DIV_AR1))*(world.DIVIDEND/(1-world.DIV_AR1))*(my.ar1-(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1)*(my.ar1-(world.DIVIDEND-world.DIV_MEAN)/world.DIVIDEND1) // 前期の株式保有枚数 My.StockShare=(My.A-My.B*World.PRICE) My.w1_old=my.w1 // 前期の総資産(株価が決まってなかったのでこの時点で決定) My.w1=My.StockShare*(World.PRICE+World.DIVIDEND1) My.W2=My.W2*(1+world.RISKFREE) My.ASSET=My.W1+My.W2 my.超過収益=my.超過収益+My.W1-My.w1_old*(1+World.RISKFREE) // My.ASSET=My.W1*(World.PRICE+world.DIVIDEND)/World.OLDPRICE+My.W2*(1+World.RISKFREE) // 前期の株式保有金額 // My.w1=My.StockShare*World.PRICE // 前期のキャッシュ保有金額 // My.W2=My.ASSET-My.W1 // My.StockShare=(My.A-My.B*World.PRICE) // 来期予想株価 My.Pt1=(my.Div_mean/(1-my.ar1)/(World.DISCOUNTRATE-world.GROWTHRATE)) // 来期予想配当金 // My.Dt1=world.DIV_MEAN+world.DIV_AR1*World.Dividend+(world.MEAN-0.1)*50+world.予測誤差*1.5*(rnd()-0.5) My.Dt1=world.DIV_MEAN+world.DIV_AR1*World.Dividend+world.予測誤差*1.5*(rnd()-0.5) // My.Dt1=world.DIV_MEAN+world.DIV_AR1*World.Dividend+((my.Div_mean/(1-my.ar1)/(World.DISCOUNTRATE-world.GROWTHRATE)+My.Dt1)/world.OLDPRICE-world.INDEX/world.INDEX1)*(rnd()-0.5)*100+world.予測誤差*1.5*(rnd()-0.5) // my.z=(0.9+0.2*rnd()) // 直近の株式リターンが要求収益率を上回っていた場合。 // My.A=1+1*(My.Pt1+My.Dt1)/my.ramuda/my.v1*1 // My.A=1+1*my.z*(My.Pt1+My.Dt1)/my.ramuda/my.v1*0.1 My.A=1+1*my.z*(My.Pt1+My.Dt1)/my.ramuda/my.v1*0.1 // My.A=My.StockShare+1*(My.Pt1+My.Dt1)/my.ramuda/my.v1*0.001 // My.A=1+1*(1+world.MEAN+(rnd()-0.5)*0.001*world.予測誤差)*((1+world.MEAN+(rnd()-0.5)*0.001*world.予測誤差)*world.PRICE-world.DIVIDEND)/my.ramuda/my.v1 // My.A=1+0.09*(My.Pt1+My.Dt1)/my.ramuda/my.v1*1+0.01*(1+world.MEAN+(rnd()-0.5)*0.001*world.予測誤差)*((1+world.MEAN+(rnd()-0.5)*0.001*world.予測誤差)*world.PRICE-world.DIVIDEND)/my.ramuda/my.v1 My.B=1*(1+world.DISCOUNTRATE)/my.ramuda/my.v1*0.1 // 直近の株式リターンが要求収益率を下回った場合。 if ((World.PRICE+world.DIVIDEND1)/World.OLDPRICE-1-world.DISCOUNTRATE)<0 then // My.A=1+(1+1.25*My.z)*(My.Pt1+My.Dt1)/world.ramuda/my.v1*1 My.A=1+(1+1.25*My.z)*(My.Pt1+My.Dt1)/world.ramuda/my.v1*0.1 // My.A=My.StockShare+2.25*My.z*(My.Pt1+My.Dt1)/world.ramuda/my.v1*0.001 // My.A=1+2.25*1*(My.Pt1+My.Dt1)/world.ramuda/my.v1*1 // My.A=1+2.25*(1+world.MEAN+(rnd()-0.5)*0.001*world.予測誤差)*((1+world.MEAN+(rnd()-0.5)*0.001*world.予測誤差)*world.PRICE-world.DIVIDEND)/my.ramuda/my.v1 // My.A=1+0.05*2.25*(My.Pt1+My.Dt1)/world.ramuda/my.v1*1+0.05*2.25*(1+world.MEAN+(rnd()-0.5)*0.001*world.予測誤差)*((1+world.MEAN+(rnd()-0.5)*0.001*world.予測誤差)*world.PRICE-world.DIVIDEND)/my.ramuda/my.v1 My.B=(1+1.25*My.z)*(1+world.DISCOUNTRATE)/my.ramuda/my.v1*0.1 end if World.sumA=World.sumA+My.A World.sumB=World.sumB+My.B World.volumetemp=world.volumetemp+abs(my.w1-my.w1_old) World.時価総額=World.時価総額+My.ASSET World.株式時価総額=World.株式時価総額+My.W1 _MoveToSpace(my.X, my.Y, 1) } #end_rule WORLD.市場.PROSPECT_MV //------------------ シミュレーション設定部 --------------- SINGLE_SIMULATION { STEP_MAX = 2500; TIME_MAX = 0; END_CONDITION = ""; EXEC_WAIT = 0; EXEC_ORDER = RANDOM; RANDOM_SEED = 0; LOG_FILE = "",DATE,OVERWRITE,0; } //------------------ ループ設定部 --------------- REPEAT_SIMULATION { VALUE_CHANGE = NONE; REPEAT_MAX = 10; VARIABLES = ""; START_VALUE = 0.000000; STEP_VALUE = 1.000000; END_VALUE = 1.000000; EXEC_TIMES_SAME = 1; RANDOM_RANGE = 0.000000, 1.000000; SAME_VALUE = YES; EXEC_TIMES_DIFFERENT = 1; } //------------------ 二次元マップ表示出力設定部 --------------- MAP_OUTPUT { MAP_SPACE_NAME = "WORLD.市場"; MAP_NAME = "二次元表示マップ_1"; TITLE = "市場"; AXIS_LABEL = "", ""; DRAW_RANGE = 0, 0, 49, 49; RULED_LINE = NO; REMARKS = YES; SPACE_KIND = SQUARE_2D; BG_PICT = NO; BG_TYPE = 0; BG_VAR_NAME = ""; BG_FILE_NAME = ""; DISABLE = NO; POSITION_X = 0; POSITION_Y = 0; SIZE_X = 510; SIZE_Y = 327; OUTPUT { MAP_ELEMENT_NAME = "合理的投資家"; MAP_ELEMENT = AGENT_VARIABLE; OUTPUT_EXPRESSION = "WORLD.市場.投資家"; SPACE_DRAW_RANGE = 0.000000, 0.000000; SPACE_COLOR_MIN = 255,255,255; SPACE_COLOR_MAX = 0,0,255; AGENT_COLOR = 0,0,255; MARKER_ID = 1; ICON_TYPE = 0; ICON_VAR_NAME = ""; ICON_FILE_NAME = ""; MAP_COLOR = 0,0,0; NUM_DISPLAY = NO; NUM_VAR_NAME = ""; } OUTPUT { MAP_ELEMENT_NAME = "合理的投資家(アナリストの意見を聞く)"; MAP_ELEMENT = AGENT_VARIABLE; OUTPUT_EXPRESSION = "WORLD.市場.POSITIVE"; SPACE_DRAW_RANGE = 0.000000, 0.000000; SPACE_COLOR_MIN = 255,255,255; SPACE_COLOR_MAX = 0,255,0; AGENT_COLOR = 0,255,0; MARKER_ID = 1; ICON_TYPE = 0; ICON_VAR_NAME = ""; ICON_FILE_NAME = ""; MAP_COLOR = 0,0,0; NUM_DISPLAY = NO; NUM_VAR_NAME = ""; } OUTPUT { MAP_ELEMENT_NAME = "Trend Chaser"; MAP_ELEMENT = AGENT_VARIABLE; OUTPUT_EXPRESSION = "WORLD.市場.MVINVESTOR"; SPACE_DRAW_RANGE = 0.000000, 0.000000; SPACE_COLOR_MIN = 255,255,255; SPACE_COLOR_MAX = 127,127,127; AGENT_COLOR = 127,127,127; MARKER_ID = 1; ICON_TYPE = 0; ICON_VAR_NAME = ""; ICON_FILE_NAME = ""; MAP_COLOR = 0,0,0; NUM_DISPLAY = NO; NUM_VAR_NAME = ""; } OUTPUT { MAP_ELEMENT_NAME = "Noise Trader"; MAP_ELEMENT = AGENT_VARIABLE; OUTPUT_EXPRESSION = "WORLD.市場.NOISE"; SPACE_DRAW_RANGE = 0.000000, 0.000000; SPACE_COLOR_MIN = 255,255,255; SPACE_COLOR_MAX = 255,0,0; AGENT_COLOR = 255,0,0; MARKER_ID = 1; ICON_TYPE = 0; ICON_VAR_NAME = ""; ICON_FILE_NAME = ""; MAP_COLOR = 0,0,0; NUM_DISPLAY = NO; NUM_VAR_NAME = ""; } OUTPUT { MAP_ELEMENT_NAME = "Prospect Theory"; MAP_ELEMENT = AGENT_VARIABLE; OUTPUT_EXPRESSION = "WORLD.市場.PROSPECT"; SPACE_DRAW_RANGE = 0.000000, 0.000000; SPACE_COLOR_MIN = 255,255,255; SPACE_COLOR_MAX = 255,0,255; AGENT_COLOR = 255,0,255; MARKER_ID = 1; ICON_TYPE = 0; ICON_VAR_NAME = ""; ICON_FILE_NAME = ""; MAP_COLOR = 0,0,0; NUM_DISPLAY = NO; NUM_VAR_NAME = ""; } OUTPUT { MAP_ELEMENT_NAME = "Analyst(Optimist)"; MAP_ELEMENT = AGENT_VARIABLE; OUTPUT_EXPRESSION = "WORLD.市場.ANALYST_optimist"; SPACE_DRAW_RANGE = 0.000000, 0.000000; SPACE_COLOR_MIN = 255,255,255; SPACE_COLOR_MAX = 255,255,0; AGENT_COLOR = 255,255,0; MARKER_ID = 1; ICON_TYPE = 0; ICON_VAR_NAME = ""; ICON_FILE_NAME = ""; MAP_COLOR = 0,0,0; NUM_DISPLAY = NO; NUM_VAR_NAME = ""; } OUTPUT { MAP_ELEMENT_NAME = "Analyst(Pessimist)"; MAP_ELEMENT = AGENT_VARIABLE; OUTPUT_EXPRESSION = "WORLD.市場.ANALYST_pessimist"; SPACE_DRAW_RANGE = 0.000000, 0.000000; SPACE_COLOR_MIN = 255,255,255; SPACE_COLOR_MAX = 0,255,255; AGENT_COLOR = 0,255,255; MARKER_ID = 1; ICON_TYPE = 0; ICON_VAR_NAME = ""; ICON_FILE_NAME = ""; MAP_COLOR = 0,0,0; NUM_DISPLAY = NO; NUM_VAR_NAME = ""; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "価格推移グラフ"; TITLE = "価格推移グラフ"; AXIS_LABEL = "時間", "価格"; SCALE = 0.000000, 199.000000, 1000.000000, 201.000000, 50.000000, 0.500000; REMARKS = YES; DISABLE = NO; POSITION_X = 510; POSITION_Y = 0; SIZE_X = 510; SIZE_Y = 327; OUTPUT { GRAPH_ELEMENT_NAME = "price"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.PRICE"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "投資家の資産総額(二人)"; TITLE = ""; AXIS_LABEL = "", ""; SCALE = 0.000000, 0.000000, 1000.000000, 1000.000000, 0.000000, 200.000000; REMARKS = YES; DISABLE = YES; POSITION_X = 680; POSITION_Y = 0; SIZE_X = 340; SIZE_Y = 218; OUTPUT { GRAPH_ELEMENT_NAME = "投資家1"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.投資家(1).ASSET"; } OUTPUT { GRAPH_ELEMENT_NAME = "投資家2"; LINE_COLOR = 255,0,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.投資家(2).ASSET"; } OUTPUT { GRAPH_ELEMENT_NAME = "投資家3"; LINE_COLOR = 0,255,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.投資家(3).ASSET"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "リターン系列"; TITLE = ""; AXIS_LABEL = "", ""; SCALE = 0.000000, 0.000000, 1000.000000, 0.200000, 50.000000, 0.050000; REMARKS = YES; DISABLE = YES; POSITION_X = 0; POSITION_Y = 327; SIZE_X = 510; SIZE_Y = 327; OUTPUT { GRAPH_ELEMENT_NAME = "リターン系列"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "(world.PRICE+world.DIVIDEND)/world.OLDPRICE-1"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "取引量の割合"; TITLE = "時価総額に対する取引量の割合"; AXIS_LABEL = "", "割合"; SCALE = 0.000000, 0.000000, 1000.000000, 1.000000, 0.000000, 0.100000; REMARKS = YES; DISABLE = YES; POSITION_X = 368; POSITION_Y = 329; SIZE_X = 340; SIZE_Y = 327; OUTPUT { GRAPH_ELEMENT_NAME = "取引量"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.取引量/world.時価総額"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "時系列グラフ_5"; TITLE = "時価総額"; AXIS_LABEL = "", ""; SCALE = 0.000000, 0.000000, 1000.000000, 1.000000, 0.000000, 0.000000; REMARKS = YES; DISABLE = YES; POSITION_X = 398; POSITION_Y = 243; SIZE_X = 398; SIZE_Y = 243; OUTPUT { GRAPH_ELEMENT_NAME = "時価総額"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.時価総額"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "株式の割合推移"; TITLE = "株式の割合推移"; AXIS_LABEL = "", ""; SCALE = 0.000000, 0.000000, 1000.000000, 2.000000, 0.000000, 0.500000; REMARKS = YES; DISABLE = YES; POSITION_X = 0; POSITION_Y = 327; SIZE_X = 510; SIZE_Y = 327; OUTPUT { GRAPH_ELEMENT_NAME = "投資家1"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.投資家(1).A-world.市場.投資家(1).B*world.PRICE"; } OUTPUT { GRAPH_ELEMENT_NAME = "投資家2"; LINE_COLOR = 255,0,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.投資家(2).A-world.市場.投資家(2).B*world.PRICE "; } OUTPUT { GRAPH_ELEMENT_NAME = "投資家3"; LINE_COLOR = 0,255,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.投資家(3).A-world.市場.投資家(3).B*world.PRICE "; } OUTPUT { GRAPH_ELEMENT_NAME = "Trend1"; LINE_COLOR = 127,127,127; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.MVINVESTOR(1).A-world.市場.MVINVESTOR(1).B*world.PRICE"; } OUTPUT { GRAPH_ELEMENT_NAME = "Trend2"; LINE_COLOR = 127,127,127; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.MVINVESTOR(2).A-world.市場.MVINVESTOR(2).B*world.PRICE "; } OUTPUT { GRAPH_ELEMENT_NAME = "Trend3"; LINE_COLOR = 127,127,127; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.MVINVESTOR(3).A-world.市場.MVINVESTOR(3).B*world.PRICE "; } OUTPUT { GRAPH_ELEMENT_NAME = "positive1"; LINE_COLOR = 255,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.positive(1).A-world.市場.positive(1).B*world.PRICE"; } OUTPUT { GRAPH_ELEMENT_NAME = "positive2"; LINE_COLOR = 255,255,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.positive(2).A-world.市場.positive(2).B*world.PRICE"; } OUTPUT { GRAPH_ELEMENT_NAME = "positive3"; LINE_COLOR = 0,255,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.positive(3).A-world.市場.positive(3).B*world.PRICE"; } OUTPUT { GRAPH_ELEMENT_NAME = "Prospect1"; LINE_COLOR = 127,127,127; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.PROSPECT_MV(1).StockShare"; } OUTPUT { GRAPH_ELEMENT_NAME = "Prospect2"; LINE_COLOR = 127,127,127; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.PROSPECT_MV(2).StockShare"; } OUTPUT { GRAPH_ELEMENT_NAME = "Prospect3"; LINE_COLOR = 127,127,127; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.PROSPECT_MV(3).StockShare"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "suma,sumb"; TITLE = "suma,sumb"; AXIS_LABEL = "", ""; SCALE = 0.000000, 0.000000, 1000.000000, 1.000000, 0.000000, 0.000000; REMARKS = YES; DISABLE = YES; POSITION_X = 0; POSITION_Y = 0; SIZE_X = 398; SIZE_Y = 243; OUTPUT { GRAPH_ELEMENT_NAME = "suma"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.SUMA"; } OUTPUT { GRAPH_ELEMENT_NAME = "sumb"; LINE_COLOR = 255,0,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.SUMB"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "株式時価総額"; TITLE = "株式時価総額"; AXIS_LABEL = "", ""; SCALE = 0.000000, 15000.000000, 1000.000000, 35000.000000, 0.000000, 5000.000000; REMARKS = YES; DISABLE = YES; POSITION_X = 340; POSITION_Y = 218; SIZE_X = 340; SIZE_Y = 218; OUTPUT { GRAPH_ELEMENT_NAME = "株式時価総額"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.株式時価総額"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "株式保有額"; TITLE = ""; AXIS_LABEL = "", ""; SCALE = 0.000000, 0.000000, 1000.000000, 500.000000, 20.000000, 100.000000; REMARKS = YES; DISABLE = YES; POSITION_X = 340; POSITION_Y = 218; SIZE_X = 340; SIZE_Y = 218; OUTPUT { GRAPH_ELEMENT_NAME = "株式保有額"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.投資家.W1"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "株式取引量"; TITLE = "株式取引量"; AXIS_LABEL = "", ""; SCALE = 0.000000, 0.000000, 1000.000000, 2000.000000, 50.000000, 500.000000; REMARKS = YES; DISABLE = NO; POSITION_X = 0; POSITION_Y = 327; SIZE_X = 510; SIZE_Y = 327; OUTPUT { GRAPH_ELEMENT_NAME = "株式取引量"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.取引量"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "配当金推移"; TITLE = "配当金推移"; AXIS_LABEL = "", ""; SCALE = 0.000000, 15.000000, 1000.000000, 25.000000, 50.000000, 5.000000; REMARKS = YES; DISABLE = NO; POSITION_X = 509; POSITION_Y = 328; SIZE_X = 510; SIZE_Y = 327; OUTPUT { GRAPH_ELEMENT_NAME = "配当金推移"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.DIVIDEND"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "w1,w1_old"; TITLE = "w1,w1_old"; AXIS_LABEL = "", ""; SCALE = 0.000000, 150.000000, 1000.000000, 250.000000, 50.000000, 10.000000; REMARKS = YES; DISABLE = YES; POSITION_X = 0; POSITION_Y = 218; SIZE_X = 340; SIZE_Y = 218; OUTPUT { GRAPH_ELEMENT_NAME = "w1"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.投資家(1).w1"; } OUTPUT { GRAPH_ELEMENT_NAME = "w2"; LINE_COLOR = 255,0,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.投資家(1).w2"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "時価総額"; TITLE = "時価総額"; AXIS_LABEL = "", ""; SCALE = 0.000000, 30000.000000, 1000.000000, 50000.000000, 50.000000, 10000.000000; REMARKS = YES; DISABLE = YES; POSITION_X = 0; POSITION_Y = 0; SIZE_X = 340; SIZE_Y = 218; OUTPUT { GRAPH_ELEMENT_NAME = "時価総額"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.時価総額"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "超過収益"; TITLE = "超過収益"; AXIS_LABEL = "", ""; SCALE = 0.000000, 0.000000, 1000.000000, 5000.000000, 50.000000, 1000.000000; REMARKS = YES; DISABLE = YES; POSITION_X = 0; POSITION_Y = 243; SIZE_X = 265; SIZE_Y = 243; OUTPUT { GRAPH_ELEMENT_NAME = "投資家(1).超過収益"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.投資家(1).超過収益"; } OUTPUT { GRAPH_ELEMENT_NAME = "投資家(2).超過収益"; LINE_COLOR = 255,0,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.投資家(2).超過収益 "; } OUTPUT { GRAPH_ELEMENT_NAME = "投資家(3).超過収益"; LINE_COLOR = 0,255,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.投資家(3).超過収益 "; } OUTPUT { GRAPH_ELEMENT_NAME = "投資家(4).超過収益"; LINE_COLOR = 255,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.投資家(4).超過収益 "; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "株式index"; TITLE = "株式index"; AXIS_LABEL = "", ""; SCALE = 0.000000, 0.000000, 1000.000000, 50.000000, 50.000000, 10.000000; REMARKS = YES; DISABLE = YES; POSITION_X = 680; POSITION_Y = 327; SIZE_X = 340; SIZE_Y = 327; OUTPUT { GRAPH_ELEMENT_NAME = "株式index(対数変換)"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "log(world.index)"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "mean,volatility"; TITLE = "mean,volatility"; AXIS_LABEL = "", ""; SCALE = 0.000000, 0.000000, 1000.000000, 10.000000, 50.000000, 5.000000; REMARKS = YES; DISABLE = YES; POSITION_X = 33; POSITION_Y = 327; SIZE_X = 481; SIZE_Y = 315; OUTPUT { GRAPH_ELEMENT_NAME = "mean(x10)"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.mean*10"; } OUTPUT { GRAPH_ELEMENT_NAME = "volatility(x100)"; LINE_COLOR = 255,0,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.volatility*100"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "投資家ar1"; TITLE = "投資家ar1"; AXIS_LABEL = "", ""; SCALE = 0.000000, 0.480000, 1000.000000, 0.520000, 0.000000, 0.010000; REMARKS = YES; DISABLE = YES; POSITION_X = 214; POSITION_Y = 405; SIZE_X = 661; SIZE_Y = 316; OUTPUT { GRAPH_ELEMENT_NAME = "投資家1"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.投資家(1).AR1"; } OUTPUT { GRAPH_ELEMENT_NAME = "投資家2"; LINE_COLOR = 255,0,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.投資家(2).AR1"; } OUTPUT { GRAPH_ELEMENT_NAME = "投資家3"; LINE_COLOR = 0,255,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "world.市場.投資家(3).AR1"; } } //------------------ 数値画面出力設定部 --------------- NUMERIC_OUTPUT { NUMERIC_NAME = "return"; TITLE = "return"; DISABLE = YES; POSITION_X = 460; POSITION_Y = 173; SIZE_X = 340; SIZE_Y = 110; OUTPUT { OUTPUT_ELEMENT_NAME = "return"; FIGURES = 4; FORMAT_ID = 0; OUTPUT_EXPRESSION = "mean"; } } //------------------ 二次元マップ表示出力設定部 --------------- MAP_OUTPUT { MAP_SPACE_NAME = "WORLD.市場"; MAP_NAME = "二次元表示マップ_2"; TITLE = "市場"; AXIS_LABEL = "", ""; DRAW_RANGE = 0, 0, 49, 49; RULED_LINE = NO; REMARKS = YES; SPACE_KIND = SQUARE_2D; BG_PICT = NO; BG_TYPE = 0; BG_VAR_NAME = ""; BG_FILE_NAME = ""; DISABLE = YES; POSITION_X = 30; POSITION_Y = 17; SIZE_X = 448; SIZE_Y = 312; OUTPUT { MAP_ELEMENT_NAME = "合理的投資家"; MAP_ELEMENT = AGENT_VARIABLE; OUTPUT_EXPRESSION = "WORLD.市場.投資家"; SPACE_DRAW_RANGE = 0.000000, 0.000000; SPACE_COLOR_MIN = 255,255,255; SPACE_COLOR_MAX = 0,0,255; AGENT_COLOR = 64,255,0; MARKER_ID = 1; ICON_TYPE = 0; ICON_VAR_NAME = ""; ICON_FILE_NAME = ""; MAP_COLOR = 0,0,0; NUM_DISPLAY = NO; NUM_VAR_NAME = ""; } OUTPUT { MAP_ELEMENT_NAME = "アナリスト(楽観的)"; MAP_ELEMENT = AGENT_VARIABLE; OUTPUT_EXPRESSION = "WORLD.市場.ANALYST_OPTIMIST"; SPACE_DRAW_RANGE = 0.000000, 0.000000; SPACE_COLOR_MIN = 255,255,255; SPACE_COLOR_MAX = 255,0,0; AGENT_COLOR = 0,0,255; MARKER_ID = 1; ICON_TYPE = 0; ICON_VAR_NAME = ""; ICON_FILE_NAME = ""; MAP_COLOR = 0,0,0; NUM_DISPLAY = NO; NUM_VAR_NAME = ""; } OUTPUT { MAP_ELEMENT_NAME = "アナリスト(悲観的)"; MAP_ELEMENT = AGENT_VARIABLE; OUTPUT_EXPRESSION = "WORLD.市場.ANALYST_PESSIMIST"; SPACE_DRAW_RANGE = 0.000000, 0.000000; SPACE_COLOR_MIN = 255,255,255; SPACE_COLOR_MAX = 0,255,0; AGENT_COLOR = 255,0,0; MARKER_ID = 1; ICON_TYPE = 0; ICON_VAR_NAME = ""; ICON_FILE_NAME = ""; MAP_COLOR = 0,0,0; NUM_DISPLAY = NO; NUM_VAR_NAME = ""; } } //------------------ コントロールパネルデータ設定部 --------------- CONTROL_PANEL { PANEL_ITEM { ITEM_NAME = "リターンの修正係数"; ITEM_TYPE = SLIDER; VAR_NAME = WORLD.修正係数; CONTROL_ON = NO; CONTROL_ON_INT = 0; CONTROL_ON_DOUBLE = 1.000000; CONTROL_ON_STRING = ""; CONTROL_OFF = NO; CONTROL_OFF_INT = 0; CONTROL_OFF_DOUBLE = 0.000000; CONTROL_OFF_STRING = ""; SLIDER_RANGE_MAX = 20; SLIDER_VALUE_MIN = 0.000000; SLIDER_VALUE_STEP = 0.010000; } PANEL_ITEM { ITEM_NAME = "配当変動幅"; ITEM_TYPE = SLIDER; VAR_NAME = WORLD.配当変動幅; CONTROL_ON = NO; CONTROL_ON_INT = 0; CONTROL_ON_DOUBLE = 1.000000; CONTROL_ON_STRING = ""; CONTROL_OFF = NO; CONTROL_OFF_INT = 0; CONTROL_OFF_DOUBLE = 0.000000; CONTROL_OFF_STRING = ""; SLIDER_RANGE_MAX = 100; SLIDER_VALUE_MIN = 0.000000; SLIDER_VALUE_STEP = 0.100000; } PANEL_ITEM { ITEM_NAME = "予測誤差"; ITEM_TYPE = SLIDER; VAR_NAME = WORLD.予測誤差; CONTROL_ON = NO; CONTROL_ON_INT = 0; CONTROL_ON_DOUBLE = 1.000000; CONTROL_ON_STRING = ""; CONTROL_OFF = NO; CONTROL_OFF_INT = 0; CONTROL_OFF_DOUBLE = 0.000000; CONTROL_OFF_STRING = ""; SLIDER_RANGE_MAX = 1000; SLIDER_VALUE_MIN = 0.000000; SLIDER_VALUE_STEP = 0.010000; } PANEL_ITEM { ITEM_NAME = "ノイズトレーダーの予測誤差"; ITEM_TYPE = SLIDER; VAR_NAME = WORLD.ノイズトレーダーの予測誤差; CONTROL_ON = NO; CONTROL_ON_INT = 0; CONTROL_ON_DOUBLE = 1.000000; CONTROL_ON_STRING = ""; CONTROL_OFF = NO; CONTROL_OFF_INT = 0; CONTROL_OFF_DOUBLE = 0.000000; CONTROL_OFF_STRING = ""; SLIDER_RANGE_MAX = 10; SLIDER_VALUE_MIN = 0.000000; SLIDER_VALUE_STEP = 0.100000; } PANEL_ITEM { ITEM_NAME = "分散の修正係数"; ITEM_TYPE = SLIDER; VAR_NAME = WORLD.修正係数V1; CONTROL_ON = NO; CONTROL_ON_INT = 0; CONTROL_ON_DOUBLE = 1.000000; CONTROL_ON_STRING = ""; CONTROL_OFF = NO; CONTROL_OFF_INT = 0; CONTROL_OFF_DOUBLE = 0.000000; CONTROL_OFF_STRING = ""; SLIDER_RANGE_MAX = 999; SLIDER_VALUE_MIN = 0.000000; SLIDER_VALUE_STEP = 0.000010; } } //------------------ 説明用HTMLテキスト --------------- #begin_html #end_html //------------------ 空間初期値データ設定部 --------------- SPACE_INITIAL { SPACE_ITEM { COMPO_PATH_NAME = "WORLD.市場.投資家"; MARKER_ID = 0; COMPO_KIND = COMPO_AGENT; SPACE_COLOR_MIN = 0,0,255; SPACE_COLOR_MAX = 0,0,0; SPACE_DRAW_RANGE = 0.000000, 0.000000; SPACE_DISPLAY = 1; } } //------------------ レポート出力情報設定部 --------------- REPORT_INFO { REPORT_NAME = "normal.prn"; FIELD_DELIMITER = ","; REPORT_ELEMENT { ELEMENT_NAME = "return"; FIGURES = 5; FORMAT_ID = 176; REPORT_EXPRESSION = "((world.PRICE+world.DIVIDEND)/world.OLDPRICE-1)*100"; REPORT_INTERVAL = 1; REPORT_STEP = 0; REPORT_TYPE = 4; } } //------------------ その他のデータ設定部 --------------- OTHERS_DATA { INDENT = 1; FONT_NAME = "MS ゴシック"; FONT_WIDTH = 0; FONT_HEIGHT = -13; FONT_WEIGHT = 200; FONT_ITALIC = 0; FONT_CHARSET = 128; WINDOW_HIDE_RUN = 0; POSITION_X = 22; POSITION_Y = 22; SIZE_X = 642; SIZE_Y = 333; } //------------------ 再生用ログデータ ---------------