模拟纳指stock的小例子

一个模拟纳指stock的小例子:

#include <stdio.h>
#include <stdlib.h>

#define MAX_YEAR          100 
#define ONE_YEAR_DAYS     240

#define BEGIN_YUAN        10000
#define ONE_ADD_YUAN     4000
#define ONE_ADD_DAY      20
#define GOLD_FLOW_TIMES  3
#define GOLD_ADD_TIMES   1

#define GOLD_POS          0.618

// 2000 年开始
int arrBgn[100] = {0};

int main(int argc, char* argv[])
{
	arrBgn[0] = 4000;
	arrBgn[1] = 3000;
	arrBgn[2] = 2000;
	arrBgn[3] = 1000;
	arrBgn[4] = 2000;
	arrBgn[5] = 2100;
	arrBgn[6] = 2300;
	arrBgn[7] = 2500;
	arrBgn[8] = 2400;
	arrBgn[9] = 1400;

	arrBgn[10] = 2200;
	arrBgn[11] = 2600;
	arrBgn[12] = 2600;
	arrBgn[13] = 3100;
	arrBgn[14] = 4100;
	arrBgn[15] = 4500;
	arrBgn[16] = 4300;
	arrBgn[17] = 5300;
	arrBgn[18] = 7400;
	arrBgn[19] = 6600;
	arrBgn[20] = 9100;
	arrBgn[21] = 9100;

	int iOwnYuan = BEGIN_YUAN;
	float iTotalYuan = BEGIN_YUAN;
	int iYearNum = MAX_YEAR;
	int iOneAddYuan = ONE_ADD_YUAN;
	int iOndAddDayNum = ONE_ADD_DAY;

	if (2 == argc)
	{
		iYearNum = atoi(argv[1]);
	}
	else if (3 == argc)
	{
		iYearNum = atoi(argv[1]);
		iOneAddYuan = atoi(argv[2]);
	}
	else if (4 == argc)
	{
		iYearNum = atoi(argv[1]);
		iOneAddYuan = atoi(argv[2]);
		iOndAddDayNum = atoi(argv[3]);
	}

	printf("-----------------------------stock------------------------------------\n");
	printf("stock.exe 1 1000 5                                         -----------\n");
	printf("iBeginYuan:%d             \n", BEGIN_YUAN);
	printf("iYearNum:%d\n", iYearNum);
	printf("iOneAddYuan:%d              ", iOneAddYuan);
	printf("iOndAddDayNum:%d\n", iOndAddDayNum);
	printf("------------------------------------------------------------------------\n");

	// 算法1
	//for (int i = 0; i < iYearNum; i++)
	//{
	//	
	//	if (0 != arrBgn[i+1])
	//	{
	//		float iAdd = arrBgn[i+1] - arrBgn[i];
	//		float fFlow = (iAdd *100 / ONE_YEAR_DAYS)/arrBgn[i];
	//
	//		for (int j = 0; j < ONE_YEAR_DAYS; j++)
	//		{
	//			if (0 == j % iOndAddDayNum)
	//			{
	//				for (int k = 0; k < iOndAddDayNum; k++)
	//				{
	//					iTotalYuan = iTotalYuan + iTotalYuan *fFlow / 100;
	//				}
	//
	//				iTotalYuan += iOneAddYuan;
	//				iOwnYuan += iOneAddYuan;
	//			}
	//		}
	//
	//		iTotalYuan = iTotalYuan * 99 /100;
	//
	//		printf("year:%d; iTotalYuan:%d, iOwnYuan:%d, rate:%d!\n\n", i+1, iTotalYuan, iOwnYuan, (iTotalYuan-iOwnYuan)*100/iOwnYuan);
	//	
	//
	//	}
	//}


	// 算法2
	for (int i = 0; i < iYearNum; i++)
	{
	
		if (0 != arrBgn[i + 1])
		{
			float iAdd = arrBgn[i + 1] - arrBgn[i];
			float fFlow = (iAdd * 100 / ONE_YEAR_DAYS) / arrBgn[i];
	
			int iGoldDay = ONE_YEAR_DAYS * GOLD_POS;
			float iGoldAdd = iAdd / GOLD_POS;
			float fGoldFlow = (iGoldAdd * 1000 / iGoldDay) / arrBgn[i];
			int nGoldtime = 0;
	
			float iGoldAdd2 = arrBgn[i + 1] - (iGoldAdd + arrBgn[i]);
			float fGoldFlow2 = (iGoldAdd2 * 1000 / (ONE_YEAR_DAYS- iGoldDay)) / arrBgn[i];
			int nGoldtime2 = 0;

			int iPreOwnYuan = iOwnYuan;
	
	
			for (int j = 0; j < iGoldDay; j++)
			{
				if (0 == j % iOndAddDayNum)
				{
					for (int k = 0; k < iOndAddDayNum; k++)
					{
						iTotalYuan = iTotalYuan + iTotalYuan *fGoldFlow / 1000;
					}
	
					if (fGoldFlow < 0)
					{
						iTotalYuan += iOneAddYuan * GOLD_FLOW_TIMES;
						iOwnYuan += iOneAddYuan * GOLD_FLOW_TIMES;
					}
					else
					{
						iTotalYuan += iOneAddYuan * GOLD_ADD_TIMES;
						iOwnYuan += iOneAddYuan * GOLD_ADD_TIMES;
					}	
					nGoldtime++;
	
				}
			}

			printf("yearPos:%d: iTotalYuan:%0.f, iOwnYuan:%d, rate:%0.1f,flow1:%.1f, flow2:%.1f, add:%d!\n", i + 1, iTotalYuan, iOwnYuan, (iTotalYuan - iOwnYuan) * 100 / iOwnYuan, fGoldFlow, fGoldFlow2, iOwnYuan - iPreOwnYuan);
			iPreOwnYuan = iOwnYuan;
	
			for (int j = iGoldDay; j < ONE_YEAR_DAYS; j++)
			{
				if (0 == j % iOndAddDayNum)
				{
					for (int k = 0; k < iOndAddDayNum; k++)
					{
						iTotalYuan = iTotalYuan + iTotalYuan *fGoldFlow2 / 1000;
					}
	
					if (fGoldFlow < 0)
					{
						iTotalYuan += iOneAddYuan * GOLD_FLOW_TIMES;
						iOwnYuan += iOneAddYuan * GOLD_FLOW_TIMES;
					}
					else
					{
						iTotalYuan += iOneAddYuan * GOLD_ADD_TIMES;
						iOwnYuan += iOneAddYuan * GOLD_ADD_TIMES;
					}
	
				}
				nGoldtime2++;
			}
	
			iTotalYuan = iTotalYuan * 99 / 100;
	
			printf("year:%d: iTotalYuan:%0.0f, iOwnYuan:%d, rate:%0.1f, add:%d, bgn:%d, end:%d,\n\n", i + 1, iTotalYuan, iOwnYuan, (iTotalYuan - iOwnYuan) * 100 / iOwnYuan, iOwnYuan - iPreOwnYuan, arrBgn[i], arrBgn[i + 1]);
	
	
		}
	}


	// 算法3
	//for (int i = 0; i < iYearNum; i++)
	//{
    //
	//	if (0 != arrBgn[i + 1])
	//	{
	//		float iAdd = arrBgn[i + 1] - arrBgn[i];
	//		float fFlow = (iAdd * 100 / ONE_YEAR_DAYS) / arrBgn[i];
    //
	//		int iGoldDay = ONE_YEAR_DAYS * GOLD_POS;
	//		float iGoldAdd = iAdd / GOLD_POS;
	//		float fGoldFlow = (iGoldAdd * 1000 / iGoldDay) / arrBgn[i];
	//		int nGoldtime = 0;
    //
	//		float iGoldAdd2 = arrBgn[i + 1] - (iGoldAdd + arrBgn[i]);
	//		float fGoldFlow2 = (iGoldAdd2 * 1000 / (ONE_YEAR_DAYS - iGoldDay)) / arrBgn[i];
	//		int nGoldtime2 = 0;
	//
	//
	//		int nFlowAddYuan = iOneAddYuan;
	//		bool bFlowAddYuan = false;
	//
	//
	//		for (int j = 0; j < iGoldDay; j++)
	//		{
	//			if (0 == j % iOndAddDayNum)
	//			{
	//				for (int k = 0; k < iOndAddDayNum; k++)
	//				{
	//					iTotalYuan = iTotalYuan + iTotalYuan *fGoldFlow / 1000;
	//				}
	//
	//				if (fGoldFlow < 0)
	//				{
	//					iTotalYuan += nFlowAddYuan;
	//					iOwnYuan += nFlowAddYuan;
	//					bFlowAddYuan = true;
	//				}
	//				else
	//				{
	//					iTotalYuan += iOneAddYuan * GOLD_ADD_TIMES;
	//					iOwnYuan += iOneAddYuan * GOLD_ADD_TIMES;
	//					bFlowAddYuan = false;
	//				}
	//				nGoldtime++;
	//
	//				if (bFlowAddYuan)
	//				{
	//					if (nFlowAddYuan <= 2000)
	//					{
	//						nFlowAddYuan = 2000;
	//					}
	//					else if (nFlowAddYuan <= 3000)
	//					{
	//						nFlowAddYuan = 3000;
	//					}
	//					else if (nFlowAddYuan <= 5000)
	//					{
	//						nFlowAddYuan = 5000;
	//					}
	//					else
	//					{
	//						nFlowAddYuan = iOneAddYuan;
	//					}						
	//				}
	//				else
	//				{
	//					nFlowAddYuan = iOneAddYuan;
	//				}
	//
	//			}
	//		}
	//
	//		printf("yearPos:%d; iTotalYuan:%0.f, iOwnYuan:%d, rate:%0.1f,flow1:%.1f, flow2:%.1f!\n", i + 1, iTotalYuan, iOwnYuan, (iTotalYuan - iOwnYuan) * 100 / iOwnYuan, fGoldFlow, fGoldFlow2);
	//
	//		for (int j = iGoldDay; j < ONE_YEAR_DAYS; j++)
	//		{
	//			if (0 == j % iOndAddDayNum)
	//			{
	//				for (int k = 0; k < iOndAddDayNum; k++)
	//				{
	//					iTotalYuan = iTotalYuan + iTotalYuan *fGoldFlow2 / 1000;
	//				}
	//
	//				if (fGoldFlow < 0)
	//				{
	//					iTotalYuan += nFlowAddYuan;
	//					iOwnYuan += nFlowAddYuan;
	//					bFlowAddYuan = true;
	//				}
	//				else
	//				{
	//					iTotalYuan += iOneAddYuan * GOLD_ADD_TIMES;
	//					iOwnYuan += iOneAddYuan * GOLD_ADD_TIMES;
	//					bFlowAddYuan = false;
	//				}
	//
	//			}
	//			nGoldtime2++;
	//
	//			if (bFlowAddYuan)
	//			{
	//				if (nFlowAddYuan <= 2000)
	//				{
	//					nFlowAddYuan = 2000;
	//				}
	//				else if (nFlowAddYuan <= 3000)
	//				{
	//					nFlowAddYuan = 3000;
	//				}
	//				else if (nFlowAddYuan <= 5000)
	//				{
	//					nFlowAddYuan = 5000;
	//				}
	//				else
	//				{
	//					nFlowAddYuan = iOneAddYuan;
	//				}
	//			}
	//			else
	//			{
	//				nFlowAddYuan = iOneAddYuan;
	//			}
	//		}
	//
	//		iTotalYuan = iTotalYuan * 99 / 100;
	//
	//		printf("year:%d; iTotalYuan:%0.0f, iOwnYuan:%d, rate:%0.1f!\n\n", i + 1, iTotalYuan, iOwnYuan, (iTotalYuan - iOwnYuan) * 100 / iOwnYuan);
	//
	//
	//	}
	//}



getchar();
return 0;
}

运行结果如下:

-----------------------------stock------------------------------------
stock.exe 1 1000 5                                         -----------
iBeginYuan:10000
iYearNum:100
iOneAddYuan:4000              iOndAddDayNum:20
------------------------------------------------------------------------
yearPos:1: iTotalYuan:86340, iOwnYuan:106000, rate:-18.5,flow1:-2.7, flow2:1.7, add:96000!
year:1: iTotalYuan:147768, iOwnYuan:154000, rate:-4.0, add:48000, bgn:4000, end:3000,

yearPos:2: iTotalYuan:157785, iOwnYuan:250000, rate:-36.9,flow1:-3.6, flow2:2.2, add:96000!
year:2: iTotalYuan:237703, iOwnYuan:298000, rate:-20.2, add:48000, bgn:3000, end:2000,

yearPos:3: iTotalYuan:166375, iOwnYuan:394000, rate:-57.8,flow1:-5.5, flow2:3.4, add:96000!
year:3: iTotalYuan:268097, iOwnYuan:442000, rate:-39.3, add:48000, bgn:2000, end:1000,

yearPos:4: iTotalYuan:1604507, iOwnYuan:474000, rate:238.5,flow1:10.9, flow2:-6.7, add:32000!
year:4: iTotalYuan:939397, iOwnYuan:490000, rate:91.7, add:16000, bgn:1000, end:2000,

yearPos:5: iTotalYuan:1058497, iOwnYuan:522000, rate:102.8,flow1:0.5, flow2:-0.3, add:32000!
year:5: iTotalYuan:1035802, iOwnYuan:538000, rate:92.5, add:16000, bgn:2000, end:2100,

yearPos:6: iTotalYuan:1257928, iOwnYuan:570000, rate:120.7,flow1:1.0, flow2:-0.6, add:32000!
year:6: iTotalYuan:1198725, iOwnYuan:586000, rate:104.6, add:16000, bgn:2100, end:2300,

yearPos:7: iTotalYuan:1429801, iOwnYuan:618000, rate:131.4,flow1:1.0, flow2:-0.6, add:32000!
year:7: iTotalYuan:1366413, iOwnYuan:634000, rate:115.5, add:16000, bgn:2300, end:2500,

yearPos:8: iTotalYuan:1367174, iOwnYuan:730000, rate:87.3,flow1:-0.4, flow2:0.3, add:96000!
year:8: iTotalYuan:1430819, iOwnYuan:778000, rate:83.9, add:48000, bgn:2500, end:2400,

yearPos:9: iTotalYuan:760419, iOwnYuan:874000, rate:-13.0,flow1:-4.6, flow2:2.8, add:96000!
year:9: iTotalYuan:993269, iOwnYuan:922000, rate:7.7, add:48000, bgn:2400, end:1400,

yearPos:10: iTotalYuan:2742086, iOwnYuan:954000, rate:187.4,flow1:6.2, flow2:-3.8, add:32000!
year:10: iTotalYuan:2009748, iOwnYuan:970000, rate:107.2, add:16000, bgn:1400, end:2200,

yearPos:11: iTotalYuan:2798365, iOwnYuan:1002000, rate:179.3,flow1:2.0, flow2:-1.2, add:32000!
year:11: iTotalYuan:2527575, iOwnYuan:1018000, rate:148.3, add:16000, bgn:2200, end:2600,

yearPos:12: iTotalYuan:2559575, iOwnYuan:1050000, rate:143.8,flow1:0.0, flow2:0.0, add:32000!
year:12: iTotalYuan:2549820, iOwnYuan:1066000, rate:139.2, add:16000, bgn:2600, end:2600,

yearPos:13: iTotalYuan:3605498, iOwnYuan:1098000, rate:228.4,flow1:2.1, flow2:-1.3, add:32000!
year:13: iTotalYuan:3233944, iOwnYuan:1114000, rate:190.3, add:16000, bgn:2600, end:3100,

yearPos:14: iTotalYuan:5721794, iOwnYuan:1146000, rate:399.3,flow1:3.5, flow2:-2.2, add:32000!
year:14: iTotalYuan:4776810, iOwnYuan:1162000, rate:311.1, add:16000, bgn:3100, end:4100,

yearPos:15: iTotalYuan:5699752, iOwnYuan:1194000, rate:377.4,flow1:1.1, flow2:-0.7, add:32000!
year:15: iTotalYuan:5369920, iOwnYuan:1210000, rate:343.8, add:16000, bgn:4100, end:4500,

yearPos:16: iTotalYuan:5060957, iOwnYuan:1306000, rate:287.5,flow1:-0.5, flow2:0.3, add:96000!
year:16: iTotalYuan:5179411, iOwnYuan:1354000, rate:282.5, add:48000, bgn:4500, end:4300,

yearPos:17: iTotalYuan:7814111, iOwnYuan:1386000, rate:463.8,flow1:2.5, flow2:-1.6, add:32000!
year:17: iTotalYuan:6841427, iOwnYuan:1402000, rate:388.0, add:16000, bgn:4300, end:5300,

yearPos:18: iTotalYuan:13706282, iOwnYuan:1434000, rate:855.8,flow1:4.3, flow2:-2.7, add:32000!
year:18: iTotalYuan:10977905, iOwnYuan:1450000, rate:657.1, add:16000, bgn:5300, end:7400,

yearPos:19: iTotalYuan:9173795, iOwnYuan:1546000, rate:493.4,flow1:-1.2, flow2:0.7, add:96000!
year:19: iTotalYuan:9673800, iOwnYuan:1594000, rate:506.9, add:48000, bgn:7400, end:6600,

yearPos:20: iTotalYuan:18783782, iOwnYuan:1626000, rate:1055.2,flow1:4.1, flow2:-2.5, add:32000!
year:20: iTotalYuan:15181152, iOwnYuan:1642000, rate:824.6, add:16000, bgn:6600, end:9100,

yearPos:21: iTotalYuan:15213152, iOwnYuan:1674000, rate:808.8,flow1:0.0, flow2:0.0, add:32000!
year:21: iTotalYuan:15076860, iOwnYuan:1690000, rate:792.1, add:16000, bgn:9100, end:9100,

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值