• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Aucun tag

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

OmegaChartのソースコードの保守


Commit MetaInfo

Révision9850eb177d43ed9d8e9fbd89ef909dd091222a20 (tree)
l'heure2014-07-12 21:02:42
Auteurpanacoran <panacoran@user...>
Commiterpanacoran

Message de Log

Change Summary

Modification

--- a/DownloadOrder.cs
+++ b/DownloadOrder.cs
@@ -31,12 +31,13 @@ namespace Zanetti.DataSource
3131 {
3232 Mujinzou,
3333 KdbCom,
34- Yahoo
34+ Yahoo,
35+ Edatalab
3536 }
3637
3738 static public string[] StockDataSourceNames
3839 {
39- get { return new[] {"無尽蔵", "k-db.com", "Yahoo時系列"}; }
40+ get { return new[] {"無尽蔵", "k-db.com", "Yahoo時系列", "edatalab.net"}; }
4041 }
4142
4243 private string _name; //名前をつけていなければnull
@@ -170,6 +171,9 @@ namespace Zanetti.DataSource
170171 case StockDataSource.Yahoo:
171172 stock_ds = new Specialized.YahooDataSource(_dateArray);
172173 break;
174+ case StockDataSource.Edatalab:
175+ stock_ds = new Specialized.EdatalabDataSource(_dateArray);
176+ break;
173177 }
174178 break;
175179 }
--- /dev/null
+++ b/Edatalab.cs
@@ -0,0 +1,134 @@
1+// Copyright (c) 2014 panacoran <panacoran@users.sourceforge.jp>
2+// This program is part of OmegaChart.
3+// OmegaChart is licensed under the Apache License, Version 2.0.
4+
5+using System.Collections.Generic;
6+using System.Diagnostics;
7+using System.IO;
8+using System.Text;
9+using Zanetti.Data;
10+
11+namespace Zanetti.DataSource.Specialized
12+{
13+ internal class EdatalabDataSource : DailyDataSource
14+ {
15+ public EdatalabDataSource(int[] dates) : base(dates)
16+ {
17+ }
18+
19+ public override void Run()
20+ {
21+ var newdata = new Dictionary<int, Dictionary<int, NewDailyData>>();
22+ foreach (var date in _dates)
23+ {
24+ newdata[date] = FillData(date);
25+ SendMessage(AsyncConst.WM_ASYNCPROCESS, (date | DATE_MASK), AsyncConst.LPARAM_PROGRESS_SUCCESSFUL);
26+ }
27+ foreach (AbstractBrand br in Env.BrandCollection.Values)
28+ {
29+ if (br.Market == MarketType.B && !IsIndex(br.Code) || br.Market == MarketType.Custom)
30+ continue;
31+ using (var farm = (DailyDataFarm)br.CreateDailyFarm(_dates.Length))
32+ {
33+ var traceFlag = false;
34+ foreach (var date in _dates)
35+ {
36+ NewDailyData td;
37+ if (newdata[date].TryGetValue(br.Code, out td))
38+ {
39+ farm.UpdateDataFarm(date, td);
40+ }
41+ else
42+ {
43+ if (traceFlag)
44+ continue;
45+ traceFlag = true;
46+ Debug.WriteLine("Data not found(edatalab.net) : code=" + br.Code + " market=" + br.Market);
47+ }
48+ }
49+ farm.Save(Util.GetDailyDataFileName(br.Code));
50+ SendMessage(AsyncConst.WM_ASYNCPROCESS, br.Code, AsyncConst.LPARAM_PROGRESS_SUCCESSFUL);
51+ }
52+ }
53+ }
54+
55+ private Dictionary<int, NewDailyData> FillData(int date)
56+ {
57+ var result = new Dictionary<int, NewDailyData>();
58+ var d2 = Util.IntToDate(date);
59+ var url = "http://www.edatalab.net/kabu/data" +
60+ d2.ToString(d2.Year < 2006 ? "yyyy/yyyyMMdd" : "yyyy/DyyMMdd") + ".LZH";
61+ using (var reader = new StreamReader(Util.ExtractData(url), Encoding.GetEncoding("shift_jis")))
62+ {
63+ string line;
64+ while ((line = reader.ReadLine()) != null)
65+ {
66+ var tokens = line.Split(',');
67+ var code = int.Parse(tokens[1]);
68+ if (code > 1002 && code < 1300) // 各種指数を無視する。
69+ continue;
70+ code = code == 1001 ? (int)BuiltInIndex.Nikkei225 : code == 1002 ? (int)BuiltInIndex.TOPIX : code;
71+ var br = Env.BrandCollection.FindBrand(code) as BasicBrand;
72+ if (br == null ||
73+ (d2.Year < 2006 ? !CheckMarketOld(br.Market, tokens[8]) : !CheckMarket(br.Market, tokens[2])))
74+ continue;
75+ var vv = IsIndex(code) ? 0.001 : 1;
76+ var pv = IsIndex(code) ? 100 : 1;
77+ result[code] = new NewDailyData
78+ {
79+ open = (int)(double.Parse(tokens[3]) * pv),
80+ high = (int)(double.Parse(tokens[4]) * pv),
81+ low = (int)(double.Parse(tokens[5]) * pv),
82+ close = (int)(double.Parse(tokens[6]) * pv),
83+ volume = (int)(double.Parse(tokens[7]) * vv),
84+ };
85+ }
86+ }
87+ return result;
88+ }
89+
90+ private bool CheckMarketOld(MarketType market, string name)
91+ {
92+ switch (int.Parse(name))
93+ {
94+ case 1:
95+ return market == MarketType.T1 ||
96+ market == MarketType.B; // 指数は東証1部
97+ case 2:
98+ return market == MarketType.T2;
99+ case 3:
100+ return market == MarketType.J;
101+ }
102+ return false;
103+ }
104+
105+ private bool CheckMarket(MarketType market, string name)
106+ {
107+ switch (int.Parse(name))
108+ {
109+ case 1:
110+ return market == MarketType.T1 ||
111+ market == MarketType.B; // 指数は東証1部
112+ case 2:
113+ return market == MarketType.T2;
114+ case 3:
115+ return market == MarketType.M;
116+ case 4:
117+ return market == MarketType.J;
118+ case 6:
119+ return market == MarketType.O1;
120+ case 7:
121+ return market == MarketType.O2;
122+ case 8:
123+ return market == MarketType.H;
124+ }
125+ return false;
126+ }
127+
128+ private bool IsIndex(int code)
129+ {
130+ return code == (int)BuiltInIndex.Nikkei225 ||
131+ code == (int)BuiltInIndex.TOPIX;
132+ }
133+ }
134+}
\ No newline at end of file
--- a/zanetti.csproj
+++ b/zanetti.csproj
@@ -119,6 +119,7 @@
119119 </Compile>
120120 <Compile Include="DownloadOrder.cs" />
121121 <Compile Include="DreamVisor.cs" />
122+ <Compile Include="Edatalab.cs" />
122123 <Compile Include="EnumDescription.cs" />
123124 <Compile Include="Env.cs" />
124125 <Compile Include="EnvironmentDialog.cs">