投资组合所得到的组合资产的风险是最小的,而收益并不是最大的。因为风险越高,收益越大。 6.8.3 关于该算法的实际不确定性
1、该算法是建立在假设月平均收益率作为预期收益率的基础之上的,而实际的预期收益率是结合该股票对市场收益率波动的敏感度即贝塔值,以及该股票独立于市场波动的值,综合计算得出; 2、关于贝塔值的预测能力问题
表6-12 个资产组合贝塔值的相关系数
资产组合中资产的数量 1 3 4 7 10 20 35 50
相关系数 0.60 0.73 0.84 0.88 0.92 0.97 0.97 0.98 判定系数是相关系数的平方,由表6-12可看出,对单只股票来说,贝塔值得预测能力比较差,在
相关系数为0.6时,历史贝塔值只能反映未来贝塔值的36%。而在资产组合组件增大的情况下,贝塔值得预测能力才有所改善。
3、在实际中,计算马科维茨方差是比较困难的。当组合资产中的股票数量n逐渐增大时,各股票之间的协方差矩阵也在以n的平方在增加,所以这导致该应用中组合投资的股票数量有一定的限度。
关键代码如下:
41
#pragma mark – 获取数据并封装
NSString *content = [[NSStringalloc] initWithData:_data_marketencoding:NSUTF8StringEncoding]; NSLog(@\大盘content.lenght=%ld\,content.length);
NSArray *lines = [content componentsSeparatedByCharactersInSet:[NSCharacterSetnewlineCharacterSet]]; NSLog(@\大盘lines.lenght=%ld\,lines.count); if (lines.count NSLog(@\数据加载失败\); [KVNProgressshowErrorWithStatus:@\数据加载失败\]; flag = NO; return; } [_dataArray_marketremoveAllObjects]; _dataArray_market = [selfchangeData:lines]; #pragma mark - 计算月平均收益值 double sum = 0.0; for (int i = 0; i <_dataArray_market.count; i ++) { NSArray *item = _dataArray_market[i]; double income = ([item[4] doubleValue] - [item[1] doubleValue]) / [item[1] doubleValue]; [_incomeArray_marketaddObject:[NSStringstringWithFormat:@\,income]]; sum += income; // NSLog(@\ } //期望回报率 avgValue_market = sum / (double)_dataArray_market.count; #pragma mark - 计算方差及标准差 for (int i = 0; i <_dataArray_market.count; i ++) { sum += ([_incomeArray_market[i] doubleValue] - avgValue_market) * ([_incomeArray_market[i] doubleValue] - avgValue_market); } variance_market = sum / _incomeArray_market.count; standardDeviation_market = sqrt(variance_market);} #pragma mark - 计算贝塔值 for (int i = 0; i <_incomeArray_market.count; i ++) { sum += ([_incomeArray_stock1[i] doubleValue] - avgValue_stock1) * ([_incomeArray_market[i] doubleValue] - avgValue_market); } NSLog(@\股票1收益与市场收益的协方差=%f\,sum / (_incomeArray_market.count - 1)); beta = sum / (_incomeArray_market.count - 1) / variance_market;} #pragma mark - 遍历权重,寻找最小马科维茨方差 double Min = 1; for (int i = 0; i <= 100; i ++) { for (int j = 0; j <= 100- i; j ++) { int k = 100 - i - j; double vm = (i * i * V1 + j * j * V2 + k * k * V3 + 2 * i * j * C12 + 2 * i * k * C13 + 2 * j * k * C23) / 10000.0; if (Min > vm) { Min = vm; index = [NSStringstringWithFormat:@\,i,j,k]; } } 42 7系统测试 7.1 兼容性测试 该应用需要iOS7.1或更高版本。与iPhone、iPad。iPod touch兼容,已针对iPhone5、iPhone6 和iPhone6 Plus优化。 表7-1 兼容性测试 iPhone4s iPhone5 iPhone5s iPhone6 iPhone6 Plus iOS6.0 × × × × × iOS7.0 √ √ √ × × iOS8.0 √ √ √ √ √ 7.2 性能测试 对爱炒股软件的性能测试,主要对其做了快速启动测试和Activity Monitor测试。 1、快速启动测试(网络稳定的情况) 快速启动测试主要是以使用Instruments中的TimeProfile来分析软件启动时的CPU消耗,并且 以消耗CPU的数据为依据进行优化。从下图中,可以看到按炒股软件在整个启动过程中总共耗时537.0毫秒,其中最主要的耗时部分为: - (BOOL)application:(UIApplication *) applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions该函数。在该方法中,生成当前UI以及对系统进行相关的全局设置等操作。 图7-1 快速启动测试结果 43 2、Activity Monitor测试 Activity Monitor会监控测试对象的运行环境,记录CPU、内存和I/O的一些指标,用于对比分 析。在监控运行中可以得到当前时刻的CPU占用率、实际内训和虚拟内存等信息。同时使用Activity Monitor可以进行多次运行结果对比,以此来对比当前运行结果和之前运行结果的差异。将爱炒股软件移植到手机,连接手机至Mac上,通过Activity Monitor测试爱炒股.app,测试结果如下图: 在1分20的测试时间内,其CPU暂用率为15%,占用时长为1分06秒。 图7-2 CPU和内存使用率概要图 7.3 稳定性测试 稳定性测试涉及硬件平台、软件系统和具体的应用程序。在iOS测试领域中,猴子测试被作为稳 定性测试的主要手段。该测试所使用的测试脚本来源于:https://github.com/douban/ynm3k/blob/master/robot4ios/util/iOSMonkey2.js。猴子测试即像猴子一样随意的没有规律的操作应用程序,其在每个操作后都做了截图保存,并且输出了被操作空间所有的父空间,因此,可以根据截图和空间之间的关系,很快的定位到问题。 正因为猴子测试是随意没有规律的操作应用程序,那么该测试花费的时间也较长,以下为爱炒股 软件经过稳定性测试后的结果,尚未出现崩溃的情况。 44 图7-3 猴子测试结果 8 总结 该应用包含自选股、大盘指数、我的帐户、模拟委托交易、决策、股票资讯和设置七大模块,基本实现模拟交易功能,具有新浪微博、微信好友、微信朋友圈等社交平台的分享功能,能够实现远程推送通知,同时实现资产组合最小马科维茨方差算法。应用中使用XIB和代码混合的方式设计UI界面,运用MVC模型视图控制器设计模式,使用通知、代理、单例等传值方式,通过数据库、NSUserDefault进行数据的存储,以异步数据加载和多线程的编程方式提升应用的运行效率和用户的使用体验。开发过程中对应用版本控制做了良好的记录,详情可见附录三。iStock1.0.4版已成功上线至苹果AppStore应用商店,该应用需要iOS7.1或更高版本。与iPhone、iPad、iPod touch兼容,已针对iPhone5、iPhone6和iPhone6 Plus优化。 iStock应用针对的用户群体为刚接触股市或者准备接触股市的特定群体,iStock 的模拟炒股和资产组合分析计算能够有效的帮助该群体迅速了解真实股票交易流程以及增加选股交易的经验。在后续的迭代开发中,将进一步完善模拟交易的功能,使之与真实交易更加吻合,以及不断验证马科维茨资产组合模型在实际运用中的正确性,并不断地优化算法。 参考文献 [1] zhun36. SDWebImage缓存图片的机制[EB/OL].http://blog.csdn.net/zhun36 /article/details/8900327, 2013/5/8. 45