- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.IO;
- using System.Text;
- using Zanetti.Data;
-
- namespace Zanetti.DataSource.Specialized
- {
- internal class DatadownloadDataSource : DailyDataSource
- {
- public DatadownloadDataSource(int[] dates) : base(dates)
- {
- }
-
- public override void Run()
- {
- var newdata = new Dictionary<int, Dictionary<int, NewDailyData>>();
- var mindate = 20171207;//データがこれ以前は存在しない。
- foreach (var date in _dates)
- {
- if (date < mindate) continue;
- newdata[date] = FillData(date);
- SendMessage(AsyncConst.WM_ASYNCPROCESS, date | DATE_MASK, AsyncConst.LPARAM_PROGRESS_SUCCESSFUL);
- }
- foreach (AbstractBrand br in Env.BrandCollection.Values)
- {
- if (br.Market == MarketType.B && !IsSupportedIndex(br.Code) || br.Market == MarketType.Custom)
- continue;
- using (var farm = (DailyDataFarm)br.CreateDailyFarm(_dates.Length))
- {
- var traceFlag = false;
- foreach (var date in _dates)
- {
- if (date < mindate) continue;
- NewDailyData td;
- if (newdata[date].TryGetValue(br.Code, out td))
- {
- farm.UpdateDataFarm(date, td);
- }
- else
- {
- if (traceFlag)
- continue;
- traceFlag = true;
- Debug.WriteLine("Data not found(datadownload.xdomain.jp) : code=" + br.Code + " market=" + br.Market);
- }
- }
- farm.Save(Util.GetDailyDataFileName(br.Code));
- SendMessage(AsyncConst.WM_ASYNCPROCESS, br.Code, AsyncConst.LPARAM_PROGRESS_SUCCESSFUL);
- }
- }
- }
-
- private readonly Dictionary<DateTime, int> _marketVolume = new Dictionary<DateTime, int>();
- private readonly Dictionary<DateTime, NewDailyData> _nikkei225 = new Dictionary<DateTime, NewDailyData>();
- private readonly Dictionary<DateTime, NewDailyData> _topix = new Dictionary<DateTime, NewDailyData>();
-
- private void InsertIndices(DateTime date, Dictionary<int, NewDailyData> result)
- {
-
- result[(int)BuiltInIndex.Nikkei225] = _nikkei225[date];
- result[(int)BuiltInIndex.TOPIX] = _topix[date];
- }
-
- private Dictionary<int, NewDailyData> FillData(int date)
- {
- var result = new Dictionary<int, NewDailyData>();
- var d2 = Util.IntToDate(date);
- var url = string.Format("http://datadownload.php.xdomain.jp/data/daily/{0:D8}.txt", date);
- using (var reader = new StreamReader(Util.HttpDownload(url), Encoding.GetEncoding("shift_jis")))
- {
- //InsertIndices(d2, result);
- string line;
- while ((line = reader.ReadLine()) != null)
- {
- var tokens = line.Split(',');
- if (tokens.Length != 6 || tokens[0].Length != 4)
- continue;
- var code = int.Parse(tokens[0]);
- var br = Env.BrandCollection.FindBrand(code) as BasicBrand;
- if (br == null)
- continue;
- var volume = (int)ParseField(tokens[5]);
- var shift = 10; // 株価は10倍で記録
- if (code < 1000) shift = 1;
- var td = new NewDailyData
- {
- volume = volume,
- open = (int)(ParseField(tokens[1]) * shift),
- high = (int)(ParseField(tokens[2]) * shift),
- low = (int)(ParseField(tokens[3]) * shift),
- close = (int)(ParseField(tokens[4]) * shift)
- };
- result[code] = td;
- }
- }
- return result;
- }
-
- private bool CheckMarket(MarketType market, string name)
- {
- switch (name)
- {
- case "東証":
- case "東証1部":
- return market == MarketType.T1;
- case "東証2部":
- return market == MarketType.T2;
- case "東証マザーズ":
- case "東証マザーズ外国":
- case "東証マザーズ審査": //20150119 k-db仕様変更にて追加
- return market == MarketType.M;
- case "東証TPM":
- return market == MarketType.Custom;
- case "東証1部外国":
- return market == MarketType.T1;
- case "東証2部外国":
- return market == MarketType.T2;
- case "大証":
- case "大証1部":
- return market == MarketType.O1;
- case "大証2部":
- return market == MarketType.O2;
- case "東証JQグロース":
- case "東証JQスタンダード":
- case "東証JQスタンダード外国":
- case "JQ":
- case "JQスタンダード":
- case "JQスタンダード外国":
- case "JQグロース":
- case "JQNEO":
- return market == MarketType.J;
- case "HCスタンダード":
- case "HCスタンダード外国":
- case "HCグロース":
- return market == MarketType.H;
- case "福証":
- case "福証Q-Board":
- case "札証":
- case "札証アンビシャス":
- case "名証":
- return false;
- }
- return false;
- }
-
- private bool IsSupportedIndex(int code)
- {
- return code == (int)BuiltInIndex.Nikkei225 ||
- code == (int)BuiltInIndex.TOPIX;
- }
-
- private double ParseField(string s)
- {
- // 空文字列を0として扱う。
- return s == "" ? 0 : double.Parse(s);
- }
- }
- }
Raw text
Are you sure to delete this paste? (You can not revert deletion.)
|
|
1 |
FFFTP (22,502)
|
|
2 |
CrystalDiskInfo (12,382)
|
|
3 |
Manjaro Linux (7,265)
|
|
4 |
CrystalDiskMark (6,779)
|
|
5 |
TortoiseSVN (5,072)
|
|
6 |
Android-x86 (4,747)
|
|
7 |
Clonezilla (2,817)
|
|
8 |
Dumpper v.60.3 (2,359)
|
|
9 |
Tera Term (2,239)
|
|
10 |
Manjarolinux Community (2,135)
|
|
11 |
PeaZip (2,131)
|
|
12 |
7-Zip (868)
|
|
13 |
HandBrake Japanese Language Version (515)
|
|
14 |
Seto Font (456)
|
|
15 |
ffdshow (405)
|
|
More >> |
|