<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Tahoma;
panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
{mso-style-priority:99;
mso-style-link:"Plain Text Char";
margin:0in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri","sans-serif";}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
{mso-style-priority:99;
mso-style-link:"Balloon Text Char";
margin:0in;
margin-bottom:.0001pt;
font-size:8.0pt;
font-family:"Tahoma","sans-serif";}
span.PlainTextChar
{mso-style-name:"Plain Text Char";
mso-style-priority:99;
mso-style-link:"Plain Text";
font-family:"Calibri","sans-serif";}
span.BalloonTextChar
{mso-style-name:"Balloon Text Char";
mso-style-priority:99;
mso-style-link:"Balloon Text";
font-family:"Tahoma","sans-serif";}
.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri","sans-serif";}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:1122335977;
mso-list-type:hybrid;
mso-list-template-ids:-1617951026 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l0:level2
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l0:level3
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
@list l0:level4
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l0:level5
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l0:level6
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
@list l0:level7
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l0:level8
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l0:level9
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
@list l1
{mso-list-id:1491365631;
mso-list-type:hybrid;
mso-list-template-ids:-2129464680 -49912540 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l1:level1
{mso-level-number-format:bullet;
mso-level-text:\F0D8;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;
mso-fareast-font-family:Calibri;
mso-bidi-font-family:"Times New Roman";}
@list l1:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l1:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
@list l1:level4
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l1:level5
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l1:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
@list l1:level7
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l1:level8
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l1:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>-----Original Message-----<br>From: gsoc-porta-bounces@lists.r-forge.r-project.org [mailto:gsoc-porta-bounces@lists.r-forge.r-project.org] On Behalf Of Kris Boudt<br>Sent: Tuesday, June 18, 2013 1:35 AM<br>To: PortfolioAnalytics; gsoc-porta@r-forge.wu-wien.ac.at<br>Subject: Re: [GSoC-PortA] structure of the specification objects</p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Intrinsically, it means that what we used to call "soft constraints" (the constraints that can be violated) are classified as "objectives". Seems good to me, but we need to make sure that each objective has then its multiplier/scaling factor, which by default is 1, but for soft constraints will typically be higher. <o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText style='margin-left:.5in;text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'> </span></span><![endif]>I would also include a turnover objective, whereby there seem to be two possibilities:<o:p></o:p></p><p class=MsoPlainText style='margin-left:.25in'><o:p> </o:p></p><p class=MsoPlainText><b><i>[Doug] It should be noted that turnover can be handled through either through constraints or a penalty in the objective (see the attached slides). Last summer I was not very happy with the objective penalty behavior but need to revisit it.<o:p></o:p></i></b></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>- provide directly the weights at the time of rebalancing<o:p></o:p></p><p class=MsoPlainText>- provide the weights at the previous rebalancing data and include a function that, uses the return data to calculate the weights at the time of rebalancing. <o:p></o:p></p><p class=MsoPlainText><b><i><span style='color:black'>[Doug] We definitely need both of the above options, the second obviously for back-testing. <o:p></o:p></span></i></b></p><p class=MsoPlainText><span style='color:black'><o:p> </o:p></span></p><p class=MsoPlainText style='margin-left:.5in'>2. In practical work, I work with a price data file that has all possible constituents and for each selection date a list of allowed constituents. Typically an xts with in row the selection dates and columns the assets with 1 if included and 0 otherwise. Such a constituents check could be in the constraints object.<o:p></o:p></p><p class=MsoPlainText><b><i><o:p> </o:p></i></b></p><p class=MsoPlainText><b><i>[Doug] </i></b> <b><i>This is a good idea</i></b>. <b><i><o:p></o:p></i></b></p><p class=MsoPlainText><b><i><span style='color:black'>[Doug] Thanks.</span></i></b><span style='color:black'><o:p></o:p></span></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Thanks,<o:p></o:p></p><p class=MsoPlainText>Kris <o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>-----Original Message-----<o:p></o:p></p><p class=MsoPlainText>From: <a href="mailto:gsoc-porta-bounces@lists.r-forge.r-project.org"><span style='color:windowtext;text-decoration:none'>gsoc-porta-bounces@lists.r-forge.r-project.org</span></a> [<a href="mailto:gsoc-porta-bounces@lists.r-forge.r-project.org"><span style='color:windowtext;text-decoration:none'>mailto:gsoc-porta-bounces@lists.r-forge.r-project.org</span></a>] On Behalf Of Brian G. Peterson<o:p></o:p></p><p class=MsoPlainText>Sent: Monday, June 17, 2013 1:51 PM<o:p></o:p></p><p class=MsoPlainText>To: <a href="mailto:gsoc-porta@r-forge.wu-wien.ac.at"><span style='color:windowtext;text-decoration:none'>gsoc-porta@r-forge.wu-wien.ac.at</span></a><o:p></o:p></p><p class=MsoPlainText>Subject: [GSoC-PortA] structure of the specification objects<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>I've been thinking a lot about this over the last week, and I'm going to propose an architecture for discussion.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Right now, we have an object of type 'constraints' which also includes 'objectives'.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>I have always logically separated objectives from constraints in my head by saying that<o:p></o:p></p><p class=MsoPlainText>- constraints are something that are:<o:p></o:p></p><p class=MsoPlainText> 1. operable only on the weight vector and<o:p></o:p></p><p class=MsoPlainText> 2. metadata information about the portfolio (e.g. groups, asset names)<o:p></o:p></p><p class=MsoPlainText> 3. describe the *inputs* to the objective function<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>- objectives are part of the *objective function* that<o:p></o:p></p><p class=MsoPlainText> 1. you calculate on the weight vector<o:p></o:p></p><p class=MsoPlainText> 2. describe business objectives for the *outcome* of the optimization<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>I think we need to split these apart explicitly, and make the distinctions, and why they exist, more obvious to the user.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>First, I think we need a container object of type 'portfolio' or 'portfoliospec' that know what assets you have, and how you want to group them (e.g. sectors, size, whatever). This is data about the portfolio, and is *independent* of and constraints or objectives you might have on that portfolio.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Next, I think we need a constraints object. Constraints, by their nature, are tied to the portfolio that they are created for. They require knowledge of the portfolio metadata, or at the very least things like box constraints are typically derived from the size of the portfolio.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Finally, I think we need a separate 'objectives' object. To have objectives objects, with names, that specify things like minimum variance, maximum Sharpe ratio, or risk parity objectives. These can be completely separate from the assets in the portfolio, and we could provide a number of template objective objects with the package. I think the current way objectives are added and manipulated is fine, we just need to break it off a bit.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>For the template objectives that can be acted on by specific more efficient solvers, I think separating the objectives out will make it easier to identify that.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>optimize.portfolio needs all three of these components, even today, to do anything. So I think we need to sort out how to specify them, then how to combine them.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>I suggest that we start by getting these specifications right first. <o:p></o:p></p><p class=MsoPlainText>Then we can start surgery in other parts of the code to use the new specification forms.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>My current thoughts are that a portfolio *contains* one or more constraints objects, since the constraints objects are dependent on the portfolio composition. Then you optimize a portfolio by passing a portfolio specification into the optimizer, and telling it which constraints object to use (if you have more than one attached to the<o:p></o:p></p><p class=MsoPlainText>portfolio) and what objectives object you want to apply.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Hopefully this is clear. It's a proposal, so comments/critique/ideas always welcome.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Today is officially the first day of coding, so we need to get moving.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Regards,<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Brian<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>On 06/06/2013 06:54 AM, Ross Bennett wrote:<o:p></o:p></p><p class=MsoPlainText>> Professor Martin,<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Thank you for the feedback. Based on the suggestions from yourself and <o:p></o:p></p><p class=MsoPlainText>> Brian Peterson, I will start with the constraints portion. I'll spend <o:p></o:p></p><p class=MsoPlainText>> some more time looking at Kirk Li's code to understand it better and <o:p></o:p></p><p class=MsoPlainText>> think about how to best integrate into PortfolioAnalytics. I should be <o:p></o:p></p><p class=MsoPlainText>> able to use some ideas from it.<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> I have been reviewing the code for PortfolioAnalytics and it seems <o:p></o:p></p><p class=MsoPlainText>> that there is already a lot of the infrastructure in place for the <o:p></o:p></p><p class=MsoPlainText>> constraint object and the optimizer so I don't want to maintain the <o:p></o:p></p><p class=MsoPlainText>> interface to the optimize.portfolio function as much as possible.<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> As an example, here is a code snippet of how box constraints and group <o:p></o:p></p><p class=MsoPlainText>> constraints are currently specified.<o:p></o:p></p><p class=MsoPlainText>> # General constraints object<o:p></o:p></p><p class=MsoPlainText>> # Box constraints of minimum weight = 0.1 and maximum weight = 0.5 for <o:p></o:p></p><p class=MsoPlainText>> assets gen.constr <- constraint(assets = colnames(edhec), min=0.1, max <o:p></o:p></p><p class=MsoPlainText>> =0.5, min_sum=1, max_sum=1)<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> # Add group constraints to the gen.constr object groups <- c(3,3,3,4) <o:p></o:p></p><p class=MsoPlainText>> gen.constr$groups <- groups gen.constr$cLO <- rep(0.15,length(groups)) <o:p></o:p></p><p class=MsoPlainText>> gen.constr$cUP <- rep(0.30,length(groups))<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Following the outline on the GSOC2013 PortfolioAnalytics rwiki page, <o:p></o:p></p><p class=MsoPlainText>> we would remove box constraints from the constraint() function and <o:p></o:p></p><p class=MsoPlainText>> create an add.constraint() function to add/update box, group, and <o:p></o:p></p><p class=MsoPlainText>> other constraint types as applicable.<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> # Create the initial constraint object # Pass in a character vector of <o:p></o:p></p><p class=MsoPlainText>> asset names for assets # Portfolio weights must sum to 1 (min_sum=1 <o:p></o:p></p><p class=MsoPlainText>> and max_sum=1) gen.constr <- constraint(assets = colnames(edhec), <o:p></o:p></p><p class=MsoPlainText>> min_sum=1, max_sum=1)<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> # Add box constraints with asset weights greater than 0.1 and less <o:p></o:p></p><p class=MsoPlainText>> than 0.5 gen.constr <- add.constraint(constraints=gen.constr, type="box",<o:p></o:p></p><p class=MsoPlainText>> min=0.1, max=0.5)<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> # Group constraints for 10 assets<o:p></o:p></p><p class=MsoPlainText>> # Separate assets into groups of 3, 3, and 4 assets # Specify the <o:p></o:p></p><p class=MsoPlainText>> group weights as a vector # The first 3 assets shall have a group <o:p></o:p></p><p class=MsoPlainText>> weight of greater than 0.15 and less than 0.3 # The next 3 assets <o:p></o:p></p><p class=MsoPlainText>> shall have a group weight of greater than 0.1 and less than 0.35 # The <o:p></o:p></p><p class=MsoPlainText>> last 4 assets shall have a group weight greater than 0 and less than<o:p></o:p></p><p class=MsoPlainText>> 0.4 constr <- add.constraint(constraints=constr, type="group",<o:p></o:p></p><p class=MsoPlainText>> groups=c(3, 3, 4),<o:p></o:p></p><p class=MsoPlainText>> group_min=c(0.15, 0.1, 0),<o:p></o:p></p><p class=MsoPlainText>> group_max=c(0.3, 0.35, 0.4))<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> This keeps the constraint object and interface to optimize.portfolio() <o:p></o:p></p><p class=MsoPlainText>> consistent with the existing code, but simplifies it and makes adding <o:p></o:p></p><p class=MsoPlainText>> box and group constraints very similar.<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> I will continue to review the PortfolioAnalytics source code and we <o:p></o:p></p><p class=MsoPlainText>> can revisit this so that I can hit the ground running when finals are <o:p></o:p></p><p class=MsoPlainText>> over and start as soon as possible.<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Regards,<o:p></o:p></p><p class=MsoPlainText>> Ross Bennett<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> On Wed, Jun 5, 2013 at 9:23 AM, Doug Martin <martinrd@comcast.net <o:p></o:p></p><p class=MsoPlainText>> <<a href="mailto:martinrd@comcast.net"><span style='color:windowtext;text-decoration:none'>mailto:martinrd@comcast.net</span></a>>> wrote:<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Ross and all,____<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> __ __<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> I think starting with the constraints is a good idea. But I think a<o:p></o:p></p><p class=MsoPlainText>> review of where PortfolioAnalytics functionality is as of last<o:p></o:p></p><p class=MsoPlainText>> year's GSoC should be the first priority. How planning on that week<o:p></o:p></p><p class=MsoPlainText>> after next (Guy, Eric and I all have finals week to get out of the<o:p></o:p></p><p class=MsoPlainText>> way next week).____<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> __ __<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> With regard to constraints, that approach that Kirk Li (UW<o:p></o:p></p><p class=MsoPlainText>> Statistics Ph.D. student and AMATH 543 TA this spring) developed<o:p></o:p></p><p class=MsoPlainText>> looks useful. Ross you already have the code which I posted to the<o:p></o:p></p><p class=MsoPlainText>> class web site. I have attached it here for others on this project<o:p></o:p></p><p class=MsoPlainText>> to have a look at. Let's review that after the end of next week<o:p></o:p></p><p class=MsoPlainText>> when final exams and the spring quarter are completely behind <o:p></o:p></p><p class=MsoPlainText>> us.____<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> __ __<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Doug____<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> __ __<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> __ __<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> *From:*gsoc-porta-bounces@lists.r-forge.r-project.org<o:p></o:p></p><p class=MsoPlainText>> <<a href="mailto:gsoc-porta-bounces@lists.r-forge.r-project.org"><span style='color:windowtext;text-decoration:none'>mailto:gsoc-porta-bounces@lists.r-forge.r-project.org</span></a>><o:p></o:p></p><p class=MsoPlainText>> [mailto:gsoc-porta-bounces@lists.r-forge.r-project.org<o:p></o:p></p><p class=MsoPlainText>> <<a href="mailto:gsoc-porta-bounces@lists.r-forge.r-project.org"><span style='color:windowtext;text-decoration:none'>mailto:gsoc-porta-bounces@lists.r-forge.r-project.org</span></a>>] *On Behalf<o:p></o:p></p><p class=MsoPlainText>> Of *Ross Bennett<o:p></o:p></p><p class=MsoPlainText>> *Sent:* Wednesday, June 05, 2013 4:22 AM<o:p></o:p></p><p class=MsoPlainText>> *To:* <a href="mailto:gsoc-porta@lists.r-forge.r-project.org"><span style='color:windowtext;text-decoration:none'>gsoc-porta@lists.r-forge.r-project.org</span></a><o:p></o:p></p><p class=MsoPlainText>> <<a href="mailto:gsoc-porta@lists.r-forge.r-project.org"><span style='color:windowtext;text-decoration:none'>mailto:gsoc-porta@lists.r-forge.r-project.org</span></a>><o:p></o:p></p><p class=MsoPlainText>> *Subject:* [GSoC-PortA] Schedule for PortfolioAnalytics Coding____<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> __ __<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> All,____<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> __ __<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> In my GSOC proposal, the order of what components I planned to write<o:p></o:p></p><p class=MsoPlainText>> code for was as follows:____<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> 1. Utility Functions (print, summary, plot, etc.)____<o:p></o:p></p><p class=MsoPlainText>> 2. Constraints____<o:p></o:p></p><p class=MsoPlainText>> 3. Example Functionality____<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> In speaking with Brian Peterson at R/Finance, he suggested that the<o:p></o:p></p><p class=MsoPlainText>> constraints portion be done first. I am fine with doing constraints<o:p></o:p></p><p class=MsoPlainText>> first. Would you like me to submit a revised schedule and<o:p></o:p></p><p class=MsoPlainText>> implementation plan with constraints first?____<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> __ __<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Thanks,____<o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>> Ross Bennett____<o:p></o:p></p><p class=MsoPlainText>_______________________________________________<o:p></o:p></p><p class=MsoPlainText>GSoC-PortA mailing list<o:p></o:p></p><p class=MsoPlainText><a href="mailto:GSoC-PortA@lists.r-forge.r-project.org"><span style='color:windowtext;text-decoration:none'>GSoC-PortA@lists.r-forge.r-project.org</span></a><o:p></o:p></p><p class=MsoPlainText><a href="http://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/gsoc-porta"><span style='color:windowtext;text-decoration:none'>http://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/gsoc-porta</span></a><o:p></o:p></p><p class=MsoPlainText>_______________________________________________<o:p></o:p></p><p class=MsoPlainText>GSoC-PortA mailing list<o:p></o:p></p><p class=MsoPlainText><a href="mailto:GSoC-PortA@lists.r-forge.r-project.org"><span style='color:windowtext;text-decoration:none'>GSoC-PortA@lists.r-forge.r-project.org</span></a><o:p></o:p></p><p class=MsoPlainText><a href="http://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/gsoc-porta"><span style='color:windowtext;text-decoration:none'>http://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/gsoc-porta</span></a><o:p></o:p></p></div></body></html>