cnywj
发表于 2008-1-14 02:40
最后一段代码 不知是显示的问题 没有显示
//-------输出市场测试的每个人的帐户 begin
for (i=0;i<peoplenumber;i++)
{
Memo1->Lines->Add(IntToStr(i)+" "+FloatToStr(mktpeople.money)+" M S "+FloatToStr(mktpeople.stock));
}
//-------输出市场测试的每个人的帐户 end
cnywj
发表于 2008-1-14 02:42
论坛的 语言把 [ i ]翻译成了 斜体, 所以搞得程序 显示的缺东西了 例如 (mktpeople[ i ].money)
cnywj
发表于 2008-1-14 02:49
int i;
int upordown=1;
int j; //-----市场的循环次数
float price=10; //----------股票初始价格
float tempstock=0;
float tempmoney=0;
int temppeople=0;
//-------市场参与者的信息定义在头文件中 全局变量
int peoplenumber=5; //-------参与者的数量 必须与上面的参与者信息的人数相等
float buymoney=0;
float sellstock=0;
//----------------市场股票资金初始化 begin
for (i=0;i<peoplenumber;i++)
{
mktpeople.money=10000;
mktpeople.stock=1000;
mktpeople.option=random(2);
}
//----------------市场股票资金初始化 end
//-------输出市场测试的每个人的帐户 begin
for (i=0;i<peoplenumber;i++)
{
Memo1->Lines->Add(IntToStr(i)+" "+FloatToStr(mktpeople.money)+" M S "+FloatToStr(mktpeople.stock));
}
//-------输出市场测试的每个人的帐户 end
//----------市场的循环次数 begin
for (j=0;j<StrToInt(Edit1->Text);j++)
{
//------统计市场的当前状态买卖资金股数清零 begin
buymoney=0;
sellstock=0;
//------统计市场的当前状态买卖资金股数清零 end
//-----------随即产生市场的参与人的买卖状态 begin
for (i=0;i<peoplenumber;i++)
{
mktpeople.option=random(2);
//----------查询资金或股票是否足额 begin
if (mktpeople.option==0&&mktpeople.money/price>=1)//---买入状态 begin
mktpeople.permite=1;
else ;
if (mktpeople.option==0&&mktpeople.money/price<1)
mktpeople.permite=0;
else ; //---买入状态 end
if (mktpeople.option==1&&mktpeople.stock>0) //----卖出状态 begin
mktpeople.permite=1;
else ;
if (mktpeople.option==1&&mktpeople.stock<=0)
mktpeople.permite=0;
else ; //-------卖出状态 end
//Memo1->Lines->Add(IntToStr(mktpeople.option)+IntToStr(mktpeople.permite)+" "+FloatToStr(mktpeople.money/price));
//----------查询资金或股票是否足额 end
}
//-----------随即产生市场的参与人的买卖状态 end
//-------------计算市场中买入数量和卖出数量 begin
for (i=0;i<peoplenumber;i++)
{
if (mktpeople.option==0&&mktpeople.permite==1) //----有效买入统计
buymoney=buymoney+mktpeople.money;
else ;
if (mktpeople.option==1&&mktpeople.permite==1) //----有效卖出统计
sellstock=sellstock+mktpeople.stock;
else ;
}
//--------输出买入卖出数量 begin
/* Memo1->Lines->Add("买入股数"+FloatToStr(buymoney/price));
Memo1->Lines->Add("买入资金"+FloatToStr(buymoney));
Memo1->Lines->Add("卖出股数"+FloatToStr(sellstock));
Memo1->Lines->Add("卖出资金"+FloatToStr(sellstock*price)); */
//--------输出买入卖出数量 end
//-------------计算市场中买入数量和卖出数量 end
//--------确定价格是上涨还是下跌 begin
if(buymoney>sellstock*price)
upordown=1;
else if (buymoney<sellstock*price)
upordown=-1;
else
upordown=0;
//--------确定价格是上涨还是下跌 end
//---------吃蛋糕法则之取走蛋糕 begin
if (buymoney>=sellstock*price)//------买方资金足够买入所有的卖掉的股票
for (i=0;i<peoplenumber;i++)
{
if (mktpeople.option==1&&mktpeople.permite==1) //--满足所有要卖的人
{
mktpeople.money=mktpeople.money+mktpeople.stock*price;
mktpeople.stock=0;
}
else ;
}
else ;
if (buymoney<sellstock*price)//------卖方股票足够卖给所有的买入资金
for (i=0;i<peoplenumber;i++)
{
if (mktpeople.option==0&&mktpeople.permite==1) //--满足所有要买的人
{
mktpeople.stock=mktpeople.stock+mktpeople.money/price;
mktpeople.money=0;
}
else ;
}
else ;
//---------吃蛋糕法则之取走蛋糕 end
//---------吃蛋糕法则之分蛋糕 begin
if (buymoney>=sellstock*price)//------买方资金足够买入所有的卖掉的股票
{
for (i=0;i<peoplenumber;i++)
{
if (mktpeople.option==0&&mktpeople.permite==1)//--要买的人分蛋糕b
{
if (sellstock>=mktpeople.money/price)
{
mktpeople.stock=mktpeople.stock+mktpeople.money/price;
mktpeople.money=0;
sellstock=sellstock-mktpeople.money/price;
}
else if (sellstock<mktpeople.money/price&&sellstock>0)
{
mktpeople.stock=mktpeople.stock+sellstock;
mktpeople.money=mktpeople.money-sellstock*price;
sellstock=0;
}
else ;
}
else ; //--要买的人分蛋糕 e
}
//------------价格变动 begin
price=price+0.01*upordown;
//------------价格变动 end
}
else ;
if (buymoney<sellstock*price)//------卖方股票足够卖给所有的买入资金
{
for (i=0;i<peoplenumber;i++)
{
if (mktpeople.option==1&&mktpeople.permite==1) //--要卖的人分蛋糕b
{
if(buymoney>=mktpeople.stock*price)
{
mktpeople.money=mktpeople.money+mktpeople.stock*price;
mktpeople.stock=0;
buymoney=buymoney-mktpeople.stock*price;
}
else if (buymoney<mktpeople.stock*price&&buymoney>0)
{
mktpeople.money=mktpeople.money+buymoney;
mktpeople.stock=mktpeople.stock-buymoney/price;
buymoney=0;
}
else ;
}
else ; //--要卖的人分蛋糕e
}
//------------价格变动 begin
price=price+0.01*upordown;
//------------价格变动 end
}
else ;
//---------吃蛋糕法则之分蛋糕 end
//--------交换先吃蛋糕的人的优先级 begin
for(i=0;i<peoplenumber;i++)
{
temppeople=random(peoplenumber);
tempmoney=mktpeople.money;
tempstock=mktpeople.stock;
mktpeople.money=mktpeople.money;
mktpeople.stock=mktpeople.stock;
mktpeople.money=tempmoney;
mktpeople.stock=tempstock;
}
//--------交换先吃蛋糕的人的优先级 end
//-------绘制价格变动图 begin
Series1->AddY(price);
//-------绘制价格变动图 end
}
//----------市场的循环次数 end
//-------输出市场测试的每个人的帐户 begin
for (i=0;i<peoplenumber;i++)
{
Memo1->Lines->Add(IntToStr(i)+" "+FloatToStr(mktpeople.money)+" M S "+FloatToStr(mktpeople.stock));
}
//-------输出市场测试的每个人的帐户 end
野狐禅
发表于 2008-1-14 07:51
原帖由 cnywj 于 2008-1-14 02:23 发表
what the computing language is used? I changed program to Java, and guess that based on the design, the final results might be half the people lose all their money.
package ui;
public class Market
{
public static void main(String [] argv)
{
int i;
int j; //-----市场的循环次数
double price =10; //----------股票初始价格
double tempstock =0;
double tempmoney =0;
int upordown=1;
int temppeople=0;
//-------市场参与者的信息定义在头文件中 全局变量
int peoplenumber = 100; //-------参与者的数量 必须与上面的参与者信息的人数相等
int tradingDays= 1000;
double buymoney = 0;
double sellstock = 0;
person [] mktpeople = new person;
//----------------市场股票资金初始化 begin
for (i=0;i<peoplenumber;i++)
{
mktpeople = new person();
mktpeople.money=10000;
mktpeople.stock=1000;
mktpeople.option=(int) (2*Math.random());
}
//----------------市场股票资金初始化 end
//-------输出市场测试的每个人的帐户 begin
for (i=0; i<peoplenumber;i++)
System.out.println(i +"\t"+ mktpeople.money +" M S "+ mktpeople.stock);
//-------输出市场测试的每个人的帐户 end
//----------市场的循环次数 begin
for (j=0; j<tradingDays; j++)
{
//------统计市场的当前状态买卖资金股数清零 begin
buymoney =0;
sellstock=0;
//------统计市场的当前状态买卖资金股数清零 end
//-----------随即产生市场的参与人的买卖状态 begin
for (i=0; i<peoplenumber; i++)
{
mktpeople.option = (int) (2*Math.random());
//----------查询资金或股票是否足额 begin
//---买入状态 begin
if (mktpeople.option==0 &&
mktpeople.money/price>=1) mktpeople.permite=1;
if (mktpeople.option==0 &&
mktpeople.money/price<1) mktpeople.permite=0;
//----卖出状态 begin
if (mktpeople.option==1 &&
mktpeople.stock>0) mktpeople.permite=1;
//-------卖出状态 end
if (mktpeople.option==1 &&
mktpeople.stock<=0) mktpeople.permite=0;
System.out.println(mktpeople.option +"\t"+ mktpeople.permite +"\t"+mktpeople.money /price);
//----------查询资金或股票是否足额 end
}
//-----------随即产生市场的参与人的买卖状态 end
//-------------计算市场中买入数量和卖出数量 begin
for (i=0; i<peoplenumber; i++)
{
if (mktpeople.option ==0 &&
mktpeople.permite==1) //----有效买入统计
buymoney=buymoney+mktpeople.money;
if (mktpeople.option ==1 &&
mktpeople.permite==1) //----有效卖出统计
sellstock=sellstock+mktpeople.stock;
}
//--------输出买入卖出数量 begin
/* Memo1->Lines->Add("买入股数"+FloatToStr(buymoney/price));
Memo1->Lines->Add("买入资金"+FloatToStr(buymoney));
Memo1->Lines->Add("卖出股数"+FloatToStr(sellstock));
Memo1->Lines->Add("卖出资金"+FloatToStr(sellstock*price)); */
//--------输出买入卖出数量 end
//-------------计算市场中买入数量和卖出数量 end
//--------确定价格是上涨还是下跌 begin
if (buymoney>sellstock*price) upordown=1;
else if (buymoney<sellstock*price) upordown=-1;
else upordown=0;
//--------确定价格是上涨还是下跌 end
//---------吃蛋糕法则之取走蛋糕 begin
if (buymoney>=sellstock*price)//------买方资金足够买入所有的卖掉的股票
for (i=0;i<peoplenumber;i++)
{
if (mktpeople.option==1 &&
mktpeople.permite==1) //--满足所有要卖的人
{
mktpeople.money=mktpeople.money+mktpeople.stock*price;
mktpeople.stock=0;
}
}
if (buymoney<sellstock*price)//------卖方股票足够卖给所有的买入资金
for (i=0; i<peoplenumber; i++)
{
if (mktpeople.option==0 &&
mktpeople.permite==1) //--满足所有要买的人
{
mktpeople.stock = mktpeople.stock+mktpeople.money/price;
mktpeople.money=0;
}
}
//---------吃蛋糕法则之取走蛋糕 end
//---------吃蛋糕法则之分蛋糕 begin
if (buymoney>=sellstock*price)//------买方资金足够买入所有的卖掉的股票
{
for (i=0;i<peoplenumber;i++)
{
if (mktpeople.option==0 &&
mktpeople.permite==1)//--要买的人分蛋糕b
{
if (sellstock>=mktpeople.money/price)
{
mktpeople.stock=mktpeople.stock+mktpeople.money/price;
mktpeople.money=0;
sellstock=sellstock-mktpeople.money/price;
}
else if (sellstock<mktpeople.money/price&&sellstock>0)
{
mktpeople.stock=mktpeople.stock+sellstock;
mktpeople.money=mktpeople.money-sellstock*price;
sellstock=0;
}
}
}
//------------价格变动 begin
price = price+0.01*upordown;
//------------价格变动 end
}
if (buymoney<sellstock*price)//------卖方股票足够卖给所有的买入资金
{
for (i=0;i<peoplenumber;i++)
{
if (mktpeople.option==1 &&
mktpeople.permite==1) //--要卖的人分蛋糕b
{
if(buymoney>=mktpeople.stock*price)
{
mktpeople.money=mktpeople.money+mktpeople.stock*price;
mktpeople.stock=0;
buymoney=buymoney-mktpeople.stock*price;
}
else if (buymoney<mktpeople.stock*price&&buymoney>0)
{
mktpeople.money=mktpeople.money+buymoney;
mktpeople.stock=mktpeople.stock-buymoney/price;
buymoney=0;
}
}
}
//------------价格变动 begin
price=price+0.01*upordown;
//------------价格变动 end
}
//---------吃蛋糕法则之分蛋糕 end
//--------交换先吃蛋糕的人的优先级 begin
for(i=0; i<peoplenumber; i++)
{
temppeople=(int) (peoplenumber*Math.random());
tempmoney = mktpeople.money;
tempstock = mktpeople.stock;
mktpeople.money=mktpeople.money;
mktpeople.stock=mktpeople.stock;
mktpeople.money=tempmoney;
mktpeople.stock=tempstock;
}
//--------交换先吃蛋糕的人的优先级 end
//-------绘制价格变动图 begin
System.out.println("Price: "+ price);
//-------绘制价格变动图 end
}
//----------市场的循环次数 end
//-------输出市场测试的每个人的帐户 begin
for (i=0;i<peoplenumber;i++)
System.out.println(i +"\t"+ mktpeople.money +" M S "+ mktpeople.stock);
//-------输出市场测试的每个人的帐户 end
}
}
/**
*
*/
class person
{
double money;
double stock;
int option;
int permite;
}
野狐禅
发表于 2008-1-14 07:53
原帖由 cnywj 于 2008-1-14 02:42 发表 http://bbs.macd.cn/static/image/common/back.gif
论坛的 语言把 [ i ]翻译成了 斜体, 所以搞得程序 显示的缺东西了 例如 (mktpeople[ i ].money)
saw the problem. when i past the java program, those things also got lost.
野狐禅
发表于 2008-1-14 07:57
原帖由 cnywj 于 2008-1-14 02:33 发表 http://bbs.macd.cn/static/image/common/back.gif
:*22*:是要准备加上的,但是程序写到这里觉得有点问题,怎么会循环100000次后资金和股票集中了呢,不知道是程序的问题,还是一个潜在规律
by chance if someone loses all his money, in your program he would not be able to do the trading anymore. so chance by chance, money will move to few luck persons.
liza012
发表于 2008-1-14 08:25
原帖由 野狐禅 于 2008-1-14 02:11 发表 http://bbs.macd.cn/static/image/common/back.gif
袈裟常在换,和尚还是那一个。:*22*:
是一个爱整洁的和上. :*22*:
cnywj
发表于 2008-1-14 20:28
用 Borland C++ Builder 写的,总觉得最终a luck person将聚集所有财富我这个市场建模也就没意思了:)
cnywj
发表于 2008-1-14 20:32
给定一个池子里的水,用盆舀出来,倒到缸里又从缸里流到池子里,怎么来来回回的,水蒸发了些
野狐禅
发表于 2008-1-14 21:52
1/14/2008:
Day Price Change
0 344.68 1.25%
1 340.41 -0.16%
2 340.94 1.02%
3 337.50 2.18%
4 330.32 -1.55%
cnywj
发表于 2008-1-15 02:17
找到池子水蒸发的虫子了
贴上正确代码
//---------吃蛋糕法则之分蛋糕 begin
if (buymoney>=sellstock*price)//------买方资金足够买入所有的卖掉的股票
{
for (i=0;i<peoplenumber;i++)
{
if (mktpeople.option==0&&mktpeople.permite==1)//--要买的人分蛋糕b
{
//Memo1->Lines->Add("sellstock1 "+FloatToStr(sellstock));
if (sellstock>=mktpeople.money/price)
{
mktpeople.stock=mktpeople.stock+mktpeople.money/price;
sellstock=sellstock-mktpeople.money/price;
mktpeople.money=0;
}
else if (sellstock<mktpeople.money/price&&sellstock>0)
{
mktpeople.stock=mktpeople.stock+sellstock;
mktpeople.money=mktpeople.money-sellstock*price;
sellstock=0;
}
else ;
//Memo1->Lines->Add("sellstock2 "+FloatToStr(sellstock));
}
else ; //--要买的人分蛋糕 e
}
//------------价格变动 begin
price=price+0.01*upordown;
//------------价格变动 end
}
else ;
if (buymoney<sellstock*price)//------卖方股票足够卖给所有的买入资金
{
for (i=0;i<peoplenumber;i++)
{
if (mktpeople.option==1&&mktpeople.permite==1) //--要卖的人分蛋糕b
{
if(buymoney>=mktpeople.stock*price)
{
mktpeople.money=mktpeople.money+mktpeople.stock*price;
buymoney=buymoney-mktpeople.stock*price;
mktpeople.stock=0;
}
else if (buymoney<mktpeople.stock*price&&buymoney>0)
{
mktpeople.money=mktpeople.money+buymoney;
mktpeople.stock=mktpeople.stock-buymoney/price;
buymoney=0;
}
else ;
}
else ; //--要卖的人分蛋糕e
}
//------------价格变动 begin
price=price+0.01*upordown;
//------------价格变动 end
}
else ;
//---------吃蛋糕法则之分蛋糕 end
cnywj
发表于 2008-1-15 02:21
sellstock=sellstock-mktpeople.money/price;
mktpeople.money=0;
buymoney=buymoney-mktpeople.stock*price;
mktpeople.stock=0;
这两段的次序原来翻掉了,没给钱就把股票清空了,或者没给股票就把钱给清空了:)
cnywj
发表于 2008-1-15 02:24
程序结论 封闭市场的随鸡游走, 财富会最终集中到一个人的手中,看这个概率会落在谁的头上 :*22*:
cnywj
发表于 2008-1-15 02:41
东西不大,穿上来 :)
无聊嘛
发表于 2008-1-15 07:48
原帖由 cnywj 于 2008-1-15 02:24 发表 http://bbs.macd.cn/static/image/common/back.gif
程序结论 封闭市场的随鸡游走, 财富会最终集中到一个人的手中,看这个概率会落在谁的头上 :*22*:
:*22*: :*19*:
野狐禅
发表于 2008-1-15 09:13
原帖由 cnywj 于 2008-1-15 02:21 发表 http://bbs.macd.cn/static/image/common/back.gif
sellstock=sellstock-mktpeople.money/price;
mktpeople.money=0;
buymoney=buymoney-mktpeople.stock*price;
mktpeople.stock=0;
如果钱不会到一个人手里去,还是有毛毛虫。
野狐禅
发表于 2008-1-15 09:20
原帖由 cnywj 于 2008-1-15 02:24 发表 http://bbs.macd.cn/static/image/common/back.gif
程序结论 封闭市场的随鸡游走, 财富会最终集中到一个人的手中,看这个概率会落在谁的头上
所以完全有必要请没了裤衩的去安息,然后把新人请进来。:*22*:
liza012
发表于 2008-1-15 11:40
看不懂啊 :funk:是不是理解为当股价远高于它的价值时,(很可能是基金们都大量争持的?)
要找机会把它卖掉重新找股价远低于它的价值的票?(很可能是基金们还没来的及抬高
它的股价的?)
[ 本帖最后由 liza012 于 2008-1-15 11:43 编辑 ]
cnywj
发表于 2008-1-15 12:51
原帖由 野狐禅 于 2008-1-15 09:20 发表 http://bbs.macd.cn/static/image/common/back.gif
没了裤衩的去安息,新人请进来
接着输裤衩的说? :*22*: 没有资金的涌入和涌出的市场像是一滩死水,前面好长一段都只是小波动的震荡,看来得把借钱买股票和拿钱出去买房置车的人搞进这个市场里去 :*22*:
cnywj
发表于 2008-1-15 12:56
原帖由 liza012 于 2008-1-15 11:40 发表 http://bbs.macd.cn/static/image/common/back.gif
理解为当股价远高于它的价值时,(很可能是基金们都大量争持的?)
要找机会把它卖掉重新找股价远低于它的价值的票?
是不是这样理解:在一直有资金涌入的市场,股价永远都是不够高的,在一直有资金涌出的市场股价永远都是不够低的。