事象の水平線

横を無理やり伸ばしたので、デザインがおかしいけど、気にしない。完璧に時代に取り残されたHTMLをいまさらいじるのがめんどくさい。個人的ブックマーク代わりなメモ書きブログ。

StockDataLoader+ Beta ver1.xxに対応する為のOmegaChart改変ソースをアップしました。

http://invest.nm.land.to/sdlplus/#sdlpomegasrc

お待たせしました。
久しぶりにソース見たので間違い有るかもしれません。

最近メールのチェックすらまともに出来ないような状況です。
SDL+やHPのメンテナンスも続けられるか解りません。

みんなタクチコに移動したのかな?株価データ買ってるんでしょうか・・・?<<激しく気になる。コメントおくれ・・・
スポンサーサイト



PageTop

コメント

 ※
 ※
管理者にだけ表示を許可する
  ※ 必須項目です

こんにちは。
株価はOmegachartに蓄積して、詳細に見たいものはcsv経由でMetaTraderに持っていって見ていたのですが、つい先日Indexを更新しなくてはと探していてSDLplusを知って以来活用させていただいています。0151の価格が1桁多く取得されている以外は快調です。

koo | URL | 2008年12月18日(Thu)01:47 [EDIT]


お疲れさまです!ありがとうございます。

株価データ買ってません。

gug | URL | 2008年12月19日(Fri)14:28 [EDIT]


StockDataLoader+ 使わせてもらっています。(感謝)
『ベータ期間終了です』のアラート発生してます。
よろしくお願いします。

名無し | URL | 2008年12月31日(Wed)00:55 [EDIT]


大変重宝させてもらっています。

上記同様、『ベータ期間終了です』とメッセージが表示されて先に進めません。
よろしくお願いします。

papa | URL | 2008年12月31日(Wed)09:48 [EDIT]


チャートを見るときはオメガ中心で見ていますので、大変助かっています。

私も上記の方と同様に『ベータ期間終了です』のアラート発生してます。

よろしくお願いします。

tubo | URL | 2008年12月31日(Wed)14:48 [EDIT]


StockDataLoader+を毎日重宝して使わせて頂いて下ります。有難う御座います。

NYダウ、S&P500、NASDAQの30日を収得したかつたのですが上記と同じく『ベータ期間終了です』のアラートが発生しました。

PCの時計を前日に戻したらとりあえず動作しました。
よろしくお願いします。

Air | URL | 2008年12月31日(Wed)18:12 [EDIT]


データ取得元の改修

StockDataLoaderを大変便利に使用
させて頂いて下ります。
最近のデータ取得元の改修で
StockDataLoaderでマザーズ指数が
ダウンロードできない問題が発生しています。
開発の当面休止の解除かSDLplus_omegaのソース
の開放をお願い致します。

web | URL | 2011年02月23日(Wed)21:40 [EDIT]


Re: データ取得元の改修

> StockDataLoaderを大変便利に使用
> させて頂いて下ります。
> 最近のデータ取得元の改修で
> StockDataLoaderでマザーズ指数が
> ダウンロードできない問題が発生しています。
> 開発の当面休止の解除かSDLplus_omegaのソース
> の開放をお願い致します。


すいません。本業が忙しくて・・・・
なんせ少なくとも今のところ(いや、おそらく永遠に)フリーウェアなのでタイムリーなサポートに関してはあきらめてください(´・ω・`)

それと、ソースの開放ということですが、結論から言うと無理です。
何故かというと、SDLplusはマルチスレッド(ってわかりますかね・・?)で動くようになっています。
簡単に言うとダウンロードを早くするために並列処理によりいくつものダウロードをいっぺんに行っています。
(いうなれば、SBの株価をDLしているとなりで、みずほFGの株価をDLしてる感じです。)
これは、もともと、必要なデータだけを集めた、ダウンロード用に用意されたデータ取得先(無尽蔵さんみたいな)からではなく、HTMLのデータの中から情報を解析して必要なデータを収集するため、不要な部分も一度は読み込まなくてはならず、並列処理をせず一つ一つデータをダウンロードしたのでは時間がかかるためです。
そのために、SDLplusはマルチスレッドで動くようになっているのですが、今のところ、その同時接続数はHTTP/1.1の仕様通り2本に制限しています。
そして、ソースを公開するとこの同時接続数は簡単に無制限にいじれてしまいます。
たとえば、同時接続数を200にするとダウンロードは今の100倍速くなります。(それ以前に回線速度がボトルネックになるでしょうが・・・)
今現在の状況でおそらくダウンロードにかかる時間は15~20分程度だと思いますが、実験で同時接続を20まであげた時は、回線速度6Mbps(いまだにADLSです;;)をフルに使い切って、2分強でダウンロードが終わりました。
さて、それのなにがだめなのか といいますと、そんなことを何人もにやられるとサイバーテロ とまではいわないまでも、相当にサーバーに負担がかかり、SDLplusを作った私がテロリストにされてしまう。ということです。
ですので、自作できる人が自作ソフトでサーバーに負担をかけてダウンロードをするのは勝手なこと(少なくとも私の関知しないこと)ですが、私の作ったアプリケーションでそれをされては私が困るので、ソースを公開することは少なくとも今の状態ではできません。

えーとそれと、
>データ取得元の改修
ということですが 何がどうなったか 情報をもらえれば、すぐにとはいえませんが修正版を出す(かもしれない;;)ので コメント入れておいてください。

stray_nora | URL | 2011年02月26日(Sat)00:22 [EDIT]


こんにちは。
コメントされていた方とは違うのですが、「最近」というのは先物のJ-GATEの影響なのだと思いますが、2/10を最後に日経平均や先物の指数が取得できなくなっていることだと思います。為替やダウ、個別銘柄などは正常に取得されています。

koo | URL | 2011年02月26日(Sat)23:35 [EDIT]


Re: データ取得元の改修

お仕事お忙しいところ御丁寧な回答大変申し訳ありません。
データ取得元
国内指数: http://k-db.com/site/default.aspx
が2月10日以降大証の変更に伴いいろいろ変更している事とのことでJASDAQ MOTHER等の指数データがとれなくなっています。
何がどうなったかは更新履歴をみていますが具体的に変更点等はよく解かりません。
申し訳ありません。

web | URL | 2011年02月26日(Sat)23:59 [EDIT]


Re: Re: データ取得元の改修

> お仕事お忙しいところ御丁寧な回答大変申し訳ありません。
> データ取得元
> 国内指数: http://k-db.com/site/default.aspx
> が2月10日以降大証の変更に伴いいろいろ変更している事とのことでJASDAQ MOTHER等の指数データがとれなくなっています。
> 何がどうなったかは更新履歴をみていますが具体的に変更点等はよく解かりません。
> 申し訳ありません。


えーと。
ソースをHDDの底のほうからサルベージしてきました;;;;;何年かC#さわってない気がする・・・・

kooさんもありがとうございます。
新興指数の一部だけ取れてないってことなんですかね・・・
k-db.comさんはcsvのデータを用意してくれていてそれを使ってますので、ソースは相当簡単なのですが、HPを解析する元気がないので(´・ω・`)、該当箇所のソースを公開します。
解析してもらえれば新しいverをアップします。(多少時間いただきますが・・・・)
まぁ、おそらく指数の番号が変わっただけだと思いますけどデータ形式も変わったのなら解析してもらえれば対応します。(たぶん;;;;;)
DailyDataクラスはたんに始値高値安値終値出来高信用買い残売り算を格納してるクラスだし、そのほかも、名前から想像つくと思いますんで・・・
あと、オメガのソースを相当参考にし(というか、プログラムなんて全くできない私はオメガのソースで勉強させていただき)ましたんで、クラスの名前を共通にしている部分が多々あります。
なので、技術的にもdotnet2どまりで作ってます;;


//指数はここで指定
class Index {
public static string URLIndex(int ocIndex) {
if(ocIndex >= 1000) { return ocIndex.ToString(); }
string no;
switch(ocIndex) {
case 101: no = "67"; break; // 225
case 102: no = "10"; break; // TOPIX
case 103: no = "18"; break; // 2部指数
case 104: no = "68"; break; // N500
case 105: no = "69"; break; // N300
case 106: no = "65"; break; // JQ_INDEX
case 108: no = "66"; break; // J_STOCK
case 114: no = "19"; break; // MOTHER
case 115: no = "60"; break; // HC
case 116: no = "61"; break; // HCS
case 117: no = "62"; break; // HCG
case 151: no = "1011"; break; // 225F
case 152: no = "1041"; break; // TOPIXF
//case 153: no = "57"; break; // 225FOS→訂正
case 154: no = "1021"; break; // 225miniF
case 155: no = "1031"; break; // 300F

case 201: no = "usdjpy=x"; break; // \$ USD
case 202: no = "eurjpy=x"; break; // \E EUR
case 203: no = "audjpy=x"; break; // \豪$ AUD
case 204: no = "gbpjpy=x"; break; // \英£ GBP
case 205: no = "cadjpy=x"; break; // \カナダ$ CAD
case 206: no = "chfjpy=x"; break; // \スイスフラン CHF

case 301: no = "DJI"; break; // Dow
case 302: no = "IXIC"; break; // NASDAQ
case 303: no = "GSPC"; break; // S&P

case 501: no = "24"; break; // 水産
case 502: no = "25"; break; // 鉱業
case 503: no = "26"; break; // 建設
case 504: no = "27"; break; // 食品
case 505: no = "28"; break; // 繊維
case 506: no = "29"; break; // パルプ
case 507: no = "30"; break; // 化学
case 508: no = "31"; break; // 医薬
case 509: no = "32"; break; // 石油
case 510: no = "33"; break; // ゴム
case 511: no = "34"; break; // ガラス
case 512: no = "35"; break; // 鉄鋼
case 513: no = "36"; break; // 非鉄
case 514: no = "37"; break; // 金属
case 515: no = "38"; break; // 機械
case 516: no = "39"; break; // 電気
case 517: no = "40"; break; // 輸送
case 518: no = "41"; break; // 精密
case 519: no = "42"; break; // 製造
case 520: no = "43"; break; // ガス
case 521: no = "44"; break; // 陸運
case 522: no = "45"; break; // 海運
case 523: no = "46"; break; // 空運
case 524: no = "47"; break; // 倉庫
case 525: no = "48"; break; // 情報
case 526: no = "49"; break; // 卸売
case 527: no = "50"; break; // 小売
case 528: no = "51"; break; // 銀行
case 529: no = "52"; break; // 証券
case 530: no = "53"; break; // 保険
case 531: no = "54"; break; // 金融
case 532: no = "55"; break; // 不動産
case 533: no = "56"; break; // サービス

case 551: no = "11"; break; // TOPIXコア30
case 552: no = "12"; break; // TOPIXラージ70
case 553: no = "13"; break; // TOPIX100
case 554: no = "14"; break; // TOPIXミッド400
case 555: no = "15"; break; // TOPIX500
case 556: no = "16"; break; // TOPIXスモール
case 557: no = "17"; break; // TOPIX1000
case 558: no = "20"; break; // 東証REIT指数
case 559: no = "21"; break; // 東証規模別_大型
case 560: no = "22"; break; // 東証規模別_中型
case 561: no = "23"; break; // 東証規模別_小型

default: no = null; break;
}
return no;
}
}




internal abstract class DataGet {
protected string _header = "\t\t始値\t高値\t安値\t終値\t出来高\t信用売残\t信用買残\r\n";
protected virtual Hashtable LoadFullData(int code) { return null; }
protected virtual ArrayList ImportFullData(int code, Hashtable data) { return null; }
public abstract string Save(int code);
}






//DLモードの基底クラス
internal abstract class NetDataGet : DataGet {
protected override Hashtable LoadFullData(int code) {
ArrayList price = new ArrayList();
MemoryStream ms = Util.HttpDownload(NetDataGetURL(code, 0, false), 3);
TextReader r = null;
try {
r = new StreamReader(ms, Encoding.Default);
string line = r.ReadLine();
while(line != null) {
price.Add(line);
line = r.ReadLine();
}
}
finally {
ms.Close();
if(r != null) r.Close();
}

if(price.Count == 0) { return null; }

Hashtable data = new Hashtable();
data["price"] = price;

return data;
}

protected override ArrayList ImportFullData(int code, Hashtable data) {
if(data == null) { return null; }

ArrayList result = new ArrayList();
ArrayList price = (ArrayList)data["price"];
decimal pv = 1M;
decimal vv = 1M;
if(code < 1000) {
pv = 100M;
vv = 100M;
}
for(int i = price.Count - 1; i >= 0; i--) {
string line = (string)price[i];
string[] t = line.Split(',');

DailyData dd = new DailyData();

if(DateTime.TryParse(t[0], out dd.date)) {
if(Validation.IsNumeric(t[1])) { dd.open = (int)(decimal.Parse(t[1]) * pv); }
if(Validation.IsNumeric(t[2])) { dd.high = (int)(decimal.Parse(t[2]) * pv); }
if(Validation.IsNumeric(t[3])) { dd.low = (int)(decimal.Parse(t[3]) * pv); }
if(Validation.IsNumeric(t[4])) { dd.close = (int)(decimal.Parse(t[4]) * pv); }
if(Validation.IsNumeric(t[5])) { dd.volume = (int)(decimal.Parse(t[5]) / vv); }

Hashtable ht = new Hashtable();
ht["data"] = dd;

result.Add(ht);
}
}
return result;
}

public override string Save(int code) {
ArrayList result = ImportFullData(code, LoadFullData(code));

StringBuilder sb = new StringBuilder();
sb.Append(Util.GetFourDigitsCode(code));
if(result != null) {
sb.Append(_header);
decimal pv = 1M;
decimal vv = 1M;
if(code < 1000) { pv = 100M; vv = 100M; }//指数は常に小数点第二位まで

DataFarm f = new DataFarm(result.Count);
f.LoadFor(code);

foreach(Hashtable ht in result) {
DailyData dd = (DailyData)ht["data"];
f.UpdateDataFarm(dd);

sb.Append(dd.date.ToString("yyyy/MM/dd")).Append("\t");
sb.Append((decimal)dd.open / pv).Append("\t");
sb.Append((decimal)dd.high / pv).Append("\t");
sb.Append((decimal)dd.low / pv).Append("\t");
sb.Append((decimal)dd.close / pv).Append("\t");
sb.Append(dd.volume).Append("\t");
sb.Append(dd.creditshort).Append("\t");
sb.Append(dd.creditlong).Append("\r\n");
}
if(MainFrame.Instance.OmegaCheckBox) {
f.SaveBinary(Util.GetOmegaDataFileName(code));
}
if(MainFrame.Instance.CSVCheckBox) {
f.SaveCSV(code, pv, vv);
}
}
return sb.ToString();
}

protected abstract string NetDataGetURL(int code, int count, bool mode);
}


internal class k_dbDataGet : NetDataGet {
protected override string NetDataGetURL(int code, int count, bool mode) {
return "http://k-db.com/site/jikeiretsuFI.aspx?c=" + Index.URLIndex(code) + "&hyouji=1&download=csv"; //dl→download//20080812
}
}

stray_nora | URL | 2011年02月27日(Sun)12:39 [EDIT]


大きな変更は見つけられませんでしたが以下の変更があるのでは。

URLの変更?


URLの変更点はttp://k-db.com/site/jikeiretsuFI.aspx?c=xx&hyouji=
のjikeiretsuFIがjikeiretsuIに変更か?

ヘラクレスの変更


HC,HCS,HCGヘラクレスがなくなりJQ-INDEX---91やJQ-スタンダード--92
JQ-グロース---93に変更か?


----に新URLを記載(記載不可になるためhttpの頭のhは削除してあります)

//指数はここで指定
class Index {
public static string URLIndex(int ocIndex) {
if(ocIndex >= 1000) { return ocIndex.ToString(); }
string no;
switch(ocIndex) {
case 101: no = "67"; break; // 225 -------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=67&hyouji=
case 102: no = "10"; break; // TOPIX------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=10&hyouji=
case 103: no = "18"; break; // 2部指数----------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=18&hyouji=
case 104: no = "68"; break; // N500-------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=68&hyouji=
case 105: no = "69"; break; // N300-------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=69&hyouji=
case 106: no = "65"; break; // JQ_INDEX---------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=91&hyouji=
case 108: no = "66"; break; // J_STOCK----------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=66&hyouji=
case 114: no = "19"; break; // MOTHER-----------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=19&hyouji=
case 115: no = "60"; break; // HC---------------------------削除
case 116: no = "61"; break; // HCS--------------------------削除
case 117: no = "62"; break; // HCG--------------------------削除
case 151: no = "1011"; break; // 225F-----------------------ttp://k-db.com/site/jikeiretsuF.aspx?c=101&hyouji=
case 152: no = "1041"; break; // TOPIXF---------------------ttp://k-db.com/site/jikeiretsuF.aspx?c=104&hyouji=
//case 153: no = "57"; break; // 225FOS→訂正
case 154: no = "1021"; break; // 225miniF-------------------ttp://k-db.com/site/jikeiretsuF.aspx?c=102&hyouji=
case 155: no = "1031"; break; // 300F-----------------------ttp://k-db.com/site/jikeiretsuF.aspx?c=103&hyouji=

case 201: no = "usdjpy=x"; break; // \$ USD
case 202: no = "eurjpy=x"; break; // \E EUR
case 203: no = "audjpy=x"; break; // \豪$ AUD
case 204: no = "gbpjpy=x"; break; // \英£ GBP
case 205: no = "cadjpy=x"; break; // \カナダ$ CAD
case 206: no = "chfjpy=x"; break; // \スイスフラン CHF

case 301: no = "DJI"; break; // Dow
case 302: no = "IXIC"; break; // NASDAQ
case 303: no = "GSPC"; break; // S&P

case 501: no = "24"; break; // 水産------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=24&hyouji=
case 502: no = "25"; break; // 鉱業------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=25&hyouji=
case 503: no = "26"; break; // 建設------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=26&hyouji=
case 504: no = "27"; break; // 食品------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=27&hyouji=
case 505: no = "28"; break; // 繊維------------------------tp://k-db.com/site/jikeiretsuI.aspx?c=28&hyouji=
case 506: no = "29"; break; // パルプ----------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=29&hyouji=
case 507: no = "30"; break; // 化学------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=30&hyouji=
case 508: no = "31"; break; // 医薬------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=31&hyouji=
case 509: no = "32"; break; // 石油------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=32&hyouji=
case 510: no = "33"; break; // ゴム------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=33&hyouji=
case 511: no = "34"; break; // ガラス----------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=34&hyouji=
case 512: no = "35"; break; // 鉄鋼------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=35&hyouji=
case 513: no = "36"; break; // 非鉄------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=36&hyouji=
case 514: no = "37"; break; // 金属------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=37&hyouji=
case 515: no = "38"; break; // 機械------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=38&hyouji=
case 516: no = "39"; break; // 電気------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=39&hyouji=
case 517: no = "40"; break; // 輸送------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=40&hyouji=
case 518: no = "41"; break; // 精密------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=41&hyouji=
case 519: no = "42"; break; // 製造------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=42&hyouji=
case 520: no = "43"; break; // ガス------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=43&hyouji=
case 521: no = "44"; break; // 陸運------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=44&hyouji=
case 522: no = "45"; break; // 海運------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=45&hyouji=
case 523: no = "46"; break; // 空運------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=46&hyouji=
case 524: no = "47"; break; // 倉庫------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=47&hyouji=
case 525: no = "48"; break; // 情報------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=48&hyouji=
case 526: no = "49"; break; // 卸売------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=49&hyouji=
case 527: no = "50"; break; // 小売------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=50&hyouji=
case 528: no = "51"; break; // 銀行------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=51&hyouji=
case 529: no = "52"; break; // 証券------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=52&hyouji=
case 530: no = "53"; break; // 保険------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=53&hyouji=
case 531: no = "54"; break; // 金融------------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=54&hyouji=
case 532: no = "55"; break; // 不動産----------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=55&hyouji=
case 533: no = "56"; break; // サービス--------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=56&hyouji=

case 551: no = "11"; break; // TOPIXコア30-----------------ttp://k-db.com/site/jikeiretsuI.aspx?c=11&hyouji=
case 552: no = "12"; break; // TOPIXラージ70---------------ttp://k-db.com/site/jikeiretsuI.aspx?c=12&hyouji=
case 553: no = "13"; break; // TOPIX100--------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=13&hyouji=
case 554: no = "14"; break; // TOPIXミッド400--------------ttp://k-db.com/site/jikeiretsuI.aspx?c=14&hyouji=
case 555: no = "15"; break; // TOPIX500--------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=15&hyouji=
case 556: no = "16"; break; // TOPIXスモール---------------ttp://k-db.com/site/jikeiretsuI.aspx?c=16&hyouji=
case 557: no = "17"; break; // TOPIX1000-------------------ttp://k-db.com/site/jikeiretsuI.aspx?c=17&hyouji=
case 558: no = "20"; break; // 東証REIT指数----------------ttp://k-db.com/site/jikeiretsuI.aspx?c=20&hyouji=
case 559: no = "21"; break; // 東証規模別_大型-------------ttp://k-db.com/site/jikeiretsuI.aspx?c=21&hyouji=
case 560: no = "22"; break; // 東証規模別_中型-------------ttp://k-db.com/site/jikeiretsuI.aspx?c=22&hyouji=
case 561: no = "23"; break; // 東証規模別_小型-------------ttp://k-db.com/site/jikeiretsuI.aspx?c=23&hyouji=

default: no = null; break;
}
return no;
}
}




internal abstract class DataGet {
protected string _header = "\t\t始値\t高値\t安値\t終値\t出来高\t信用売残\t信用買残\r\n";
protected virtual Hashtable LoadFullData(int code) { return null; }
protected virtual ArrayList ImportFullData(int code, Hashtable data) { return null; }
public abstract string Save(int code);
}






//DLモードの基底クラス
internal abstract class NetDataGet : DataGet {
protected override Hashtable LoadFullData(int code) {
ArrayList price = new ArrayList();
MemoryStream ms = Util.HttpDownload(NetDataGetURL(code, 0, false), 3);
TextReader r = null;
try {
r = new StreamReader(ms, Encoding.Default);
string line = r.ReadLine();
while(line != null) {
price.Add(line);
line = r.ReadLine();
}
}
finally {
ms.Close();
if(r != null) r.Close();
}

if(price.Count == 0) { return null; }

Hashtable data = new Hashtable();
data["price"] = price;

return data;
}

protected override ArrayList ImportFullData(int code, Hashtable data) {
if(data == null) { return null; }

ArrayList result = new ArrayList();
ArrayList price = (ArrayList)data["price"];
decimal pv = 1M;
decimal vv = 1M;
if(code < 1000) {
pv = 100M;
vv = 100M;
}
for(int i = price.Count - 1; i >= 0; i--) {
string line = (string)price[i];
string[] t = line.Split(',');

DailyData dd = new DailyData();

if(DateTime.TryParse(t[0], out dd.date)) {
if(Validation.IsNumeric(t[1])) { dd.open = (int)(decimal.Parse(t[1]) * pv); }
if(Validation.IsNumeric(t[2])) { dd.high = (int)(decimal.Parse(t[2]) * pv); }
if(Validation.IsNumeric(t[3])) { dd.low = (int)(decimal.Parse(t[3]) * pv); }
if(Validation.IsNumeric(t[4])) { dd.close = (int)(decimal.Parse(t[4]) * pv); }
if(Validation.IsNumeric(t[5])) { dd.volume = (int)(decimal.Parse(t[5]) / vv); }

Hashtable ht = new Hashtable();
ht["data"] = dd;

result.Add(ht);
}
}
return result;
}

public override string Save(int code) {
ArrayList result = ImportFullData(code, LoadFullData(code));

StringBuilder sb = new StringBuilder();
sb.Append(Util.GetFourDigitsCode(code));
if(result != null) {
sb.Append(_header);
decimal pv = 1M;
decimal vv = 1M;
if(code < 1000) { pv = 100M; vv = 100M; }//指数は常に小数点第二位まで

DataFarm f = new DataFarm(result.Count);
f.LoadFor(code);

foreach(Hashtable ht in result) {
DailyData dd = (DailyData)ht["data"];
f.UpdateDataFarm(dd);

sb.Append(dd.date.ToString("yyyy/MM/dd")).Append("\t");
sb.Append((decimal)dd.open / pv).Append("\t");
sb.Append((decimal)dd.high / pv).Append("\t");
sb.Append((decimal)dd.low / pv).Append("\t");
sb.Append((decimal)dd.close / pv).Append("\t");
sb.Append(dd.volume).Append("\t");
sb.Append(dd.creditshort).Append("\t");
sb.Append(dd.creditlong).Append("\r\n");
}
if(MainFrame.Instance.OmegaCheckBox) {
f.SaveBinary(Util.GetOmegaDataFileName(code));
}
if(MainFrame.Instance.CSVCheckBox) {
f.SaveCSV(code, pv, vv);
}
}
return sb.ToString();
}

protected abstract string NetDataGetURL(int code, int count, bool mode);
}


internal class k_dbDataGet : NetDataGet {
protected override string NetDataGetURL(int code, int count, bool mode) {
return "http://k-db.com/site/jikeiretsuFI.aspx?c=" + Index.URLIndex(code) + "&hyouji=1&download=csv"; //dl→download//20080812
}
}


web | URL | 2011年02月28日(Mon)00:18 [EDIT]


Re: タイトルなし

> 大きな変更は見つけられませんでしたが以下の変更があるのでは。
>
> URLの変更?
>
> ①
> URLの変更点はttp://k-db.com/site/jikeiretsuFI.aspx?c=xx&hyouji=
> のjikeiretsuFIがjikeiretsuIに変更か?
>
> ヘラクレスの変更
>
> ②
> HC,HCS,HCGヘラクレスがなくなりJQ-INDEX---91やJQ-スタンダード--92
> JQ-グロース---93に変更か?
>
>

えーと。
数字はそのままで大丈夫ですかね・・・・ちゃんと見てないんですみません・・・
aspのファイルネームが変わったんですね・・・じゃぁ全部取れてなかったのか・・・

えーっとどうしよう;;
とりあえずα版あげようかと思います。

さていつやるか・・・;;;;;;;;;;;;;;;;;;;;

いまからやるか??やるのか???(´・ω・`)うしみつどきだよ;;

しばしお待ちください。

stray_nora | URL | 2011年02月28日(Mon)01:29 [EDIT]


感謝です。(>_<)

take | URL | 2011年03月05日(Sat)22:21 [EDIT]


α版有難う御座います。
試して見ましたが下記のエラーが出ます。
お忙しいところ申し訳御座いません。

----------------------------------------------
2011/03/06 10:41:05 // SDL+ >> : インデックスが配列の境界外です。 561
場所 SDLplus.NetDataGet.ImportFullData(Int32 code, Hashtable data)
場所 SDLplus.NetDataGet.Save(Int32 code)
場所 SDLplus.ThreadControl.Control()

web | URL | 2011年03月06日(Sun)11:43 [EDIT]