로드 중...
검색 중...
일치하는 항목 없음
Form1.cs
1사용 중시스템;
2사용 중System.Collections.Generic;
3사용 중System.ComponentModel;
4사용 중시스템.데이터;
5사용 중시스템.드로잉;
6사용 중System.Linq;
7사용 중시스템.텍스트;
8사용 중System.Windows.Forms;
9사용 중슬롯 사이트;
10사용 중시스템.IO;
11사용 중시스템.반사;
12사용 중System.Windows.Forms.DataVisualization.Charting;
13
14네임스페이스마코위츠
15{
23 공개 부분 클래스양식1: 양식
24{
25 공개 양식1()
26{
28 if(Environment.GetCommandLineArgs().Length > 1)
29ws =신규 슬롯 사이트작업공간(systemDirectory: Environment.GetCommandLineArgs()[1]);
30 그밖에
32
33 GAMSJob직업 = ws.AddJobFromString(GetModelText());
35opt.AllModelTypes ="conopt";
36선택.정의.추가("데이터", "\""+ Path.Combine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),@"..\..\..\..\Data\Markowitz.gdx") +"\"");
37
39직업.실행(선택, cp);
40
43mi.인스턴스화("markowitz는 nlp max z를 사용합니다", 신규 GAMSModifier(l));
44
45 // 데이터 포인트 수집 목록
46목록<Tuple<double, double>> 데이터포인트 =신규리스트<튜플<더블, 더블>>();
47
48 // 최소 및 최대 수익 얻기 (람다=0/1)
49l.AddRecord().= 0;
50mi.해결();
51 더블minRet = mi.SyncDB.GetVariable("ret").첫 번째 레코드().레벨;
52dataPoints.Add(Tuple.Create(minRet, mi.SyncDB.GetVariable("var").첫 번째 레코드().레벨));
53l.기록 찾기().= 1;
54mi.해결();
55 더블maxRet = mi.SyncDB.GetVariable("ret").첫 번째 레코드().레벨;
56dataPoints.Add(Tuple.Create(maxRet, mi.SyncDB.GetVariable("var").첫 번째 레코드().레벨));
57
58 // 두 데이터 포인트 사이의 최대 거리(반환)를 지정하는 간격
59 더블간격 = 0.02;
60
61 // 간격 스택, 여기서 간격은 두 개의 데이터 포인트를 포함하는 2-튜플로 표시됩니다.
62 // 각각은 2-튜플로 표현됩니다(람다, 반환)
63스택<튜플<튜플<더블, 더블>, 튜플<더블, 더블>>> 간격 =신규스택<튜플<튜플<더블, 더블>, 튜플<더블, 더블>>>();
64intervals.Push(Tuple.Create(Tuple.Create(0.0, minRet), Tuple.Create(1.0, maxRet)));
65
66 // 여러 람다 값에 대한 모델 인스턴스를 해결하는 알고리즘
67 // 부드러운 그래프를 얻기 위해 두 데이터 포인트 사이의 최대 간격을 사용합니다.
68 // Lambda는 데이터 포인트의 균일한 분포를 위해 동적으로 계산됩니다.
69 그동안(간격.수 > 0)
70 // 첫 번째 간격을 선택하고 람다의 새 값을 계산합니다.
71var i = 간격.Pop();
72 더블minL = i.Item1.Item1;
73minRet = i.Item1.Item2;
74 더블maxL = i.Item2.Item1;
75maxRet = i.Item2.Item2;
76
77 더블lVal = (최소L+최대L)/2;
79 // 새로운 람다 값으로 모델 인스턴스를 해결합니다.
80mi.해결();
81 // 반환 및 차이 결과 검색
82 더블curRet = mi.SyncDB.GetVariable("ret").첫 번째 레코드().레벨;
83dataPoints.Add(Tuple.Create(curRet, mi.SyncDB.GetVariable("var").첫 번째 레코드().레벨));
84 // 간격이 여전히 큰 경우 새 간격을 추가
85 if(curRet - minRet > 간격)
86intervals.Push(Tuple.Create(Tuple.Create(minL, minRet), Tuple.Create(lVal, curRet)));
87 if(Math.Abs(curRet - maxRet) > gap)
88intervals.Push(Tuple.Create(Tuple.Create(lVal, curRet), Tuple.Create(maxL, maxRet)));
89}
90
91 // 데이터 포인트 정렬
92dataPoints.Sort((a, b) => a.Item1.CompareTo(b.Item1));
93
94초기화구성요소();
95this.chart1.Series.Clear();
96시리즈 s = this.chart1.Series.Add("들");
97s.ChartType = SeriesChartType.Line;
98s.MarkerStyle = MarkerStyle.Circle;
99s.MarkerSize = 5;
100this.chart1.ChartAreas[0].AxisX.Title ="반환";
101this.chart1.ChartAreas[0].AxisY.Title ="변수";
102this.chart1.ChartAreas[0].AxisX.Interval = 0.1;
103this.chart1.ChartAreas[0].AxisX.Minimum = 0;
104
105 foreach(튜플<더블,더블> p데이터포인트)
106s.Points.AddXY(p.Item1, p.Item2);
107}
108
109 정적문자열 GetModelText()
110{
111문자열 모델 =@"
112$title 표준 Markowitz 포트폴리오 선택 모델
113
114선택한 주식을 설정
115코바르 행렬의 위쪽(들,들), 아래쪽(들,들) 부분;
116별칭(s,t);
117
118매개변수 평균 일일 수익률 평균
119covar(s,s) 수익의 공분산 행렬(상위);
120
121$데이터가 설정되지 않은 경우 $abort '제공된 데이터 파일에 대한 포함 파일 이름이 없습니다'
122$gdxin %data%
123$load s covar 상하 평균
124
125변수 z 목적 변수
126반환 반환
127var 변동
128x(s) 투자;
129
130양수 변수 x;
131
132방정식 obj 목표
133예산
134varcon 분산 제약조건
135retcon 반환 제약조건;
136
137스칼라 람다 /0/;
138
139obj.. z =e= 람다*ret - (1-람다)*var;
140예산.. 합계(s, x(s)) =e= 1.0;
141varcon.. var =e= sum(upper(s,t), x(s)*covar(s,t)*x(t)) +
142sum(lower(s,t), x(s)*covar(t,s)*x(t));
143retcon..ret =e= 합계(들, 평균(들)*x(들));
144
145모델 마코비츠 /all/
146";
147 반환모델;
148}
149}
150}
GAMSModelInstance AddModelInstance(string modelInstanceName=null)
GAMSVariable GetVariable(문자열 변수 식별자)
GAMSParameter AddParameter(문자열 식별자, 정수 차원, 문자열 설명텍스트="")
void Run(GAMSOptions gamsOptions=null, GAMSCheckpoint 체크포인트=null, TextWriter 출력=null, Boolean createOutDB=true)
슬롯 사이트데이터베이스 SyncDB
void Solve(SymbolUpdateType 업데이트 유형=SymbolUpdateType.BaseCase, TextWriter 출력=null, GAMSModelInstanceOpt miOpt=null)
void 인스턴스화(문자열 모델 정의, params GAMSModifier[] 수정자)
사전< 문자열, 문자열 > 정의
새 GAMSParameterRecord FindRecord(params 문자열[] 키)
새 GAMSParameterRecord FirstRecord()
새 GAMSParameterRecord AddRecord(params 문자열[] 키)
새 GAMSVariableRecord FirstRecord()
GAMSJob AddJobFromString(문자열 gamsSource, GAMSCheckpoint 체크포인트=null, 문자열 jobName=null)
GAMSCheckpoint AddCheckpoint(string checkpointName=null)
GAMSOptions AddOptions(GAMSOptions optFrom=null)
이것은 Markowitz의 포트폴리오 선택의 효율적인 경계를 표시하는 작은 그래픽 프로그램입니다...