前回までの改造でOmegaChartで10年分のデータをダウンロードできるようになったのですが
2つほど気に入らない部分があったのでさらに改造しました。
データファイルが存在しない時に10年分の株価データをダウンロードしようとすると
「配列のオフセットおよび長さが範囲を超えているか、
カウンターがソース コレクションのインデックスから最後までの要素の数より大きい値です。」
というエラーが発生します。
これは配列を200日分しか確保していないのに
10年分のデータを追加しようとしたからだと思われます。
UpdateDataFarm()の初期化部を以下に変更しました。20年分くらいは格納できると思います。
_farm = new byte[RECORD_LENGTH * 5000]; //この上限はどこかで取得すべきだが
もうひとつが全銘柄の株価データをダウンロードした後で
全銘柄のファイルを更新するようになっているのを改造して
個々の銘柄をダウンロードするたびに更新するようにしました。
私の環境では10年分のデータをダウンロードするのに1銘柄に3分以上かかることもあります。
100銘柄だと何時間もかかりそうです。
100銘柄の株価データをダウンロードした後でdataフォルダの個々のファイルを更新するように
なっていると途中で何か起きた時にそれまでダウンロードしたデータが使用されず
時間が無駄になってしまいます。
個々の銘柄の株価データをダウンロードする度にdataフォルダのファイルを更新すれば
もし途中でエラーが発生したりしてもそれまでにダウンロードしたデータは適用済みとなります。
単純に処理を移動すれば実現できました。
以下の処理がdataファイルを更新する処理です。
DownloadOldDate(br, startDate, endDate)もしくは DownloadCurrentDate(br) の
直後に実行するようにコピペするだけでした。
Hashtable tr = (Hashtable)newdata[br.Code];
if (tr == null)
{
continue;
}
ArrayList dates = new ArrayList(tr.Keys);
dates.Sort();
bool trace_flag = false;
using (DailyDataFarm f = (DailyDataFarm)br.CreateDailyFarm(dates.Count))
{
foreach (int day in dates)
{
NewDailyData td = (NewDailyData)tr[day];
if (td == null)
{
if (!trace_flag)
{
trace_flag = true;
Debug.WriteLine("Data not found(yahoo) : code=" + br.Code + " market=" + br.Market.ToString());
}
}
else
f.UpdateDataFarm(day, td);
}
f.Save(Util.GetDailyDataFileName(br.Code));
}
こうすることで途中でキャンセルしても
ダウンロードの終わった銘柄はindex.txtから削除して
次の日に続きの銘柄からダウンロードするということが可能となります。
ダウンロードの終わった銘柄をindex.txtから勝手に削除する処理を追加すれば
楽かもしれませんが1度全銘柄の10年分のデータが揃ってしまえば
index.txtを元に戻して月に1度くらい最新データをダウンロードをするだけで維持できるので
データが揃うまではちまちまと手作業でindex.txtから削除します。
以上の処理は10年分の株価データをOmegaChartでダウンロードするための改造で
他の方法で過去の株価データを用意すればいいだけなので真似しなくていいです。
これまでの改造は
OmegaChartのコードを利用して長期の株価データをダウンロードするだけの専用ツールを作成できないか
を考えた結果です。index.txtを手作業で変更する必要はありますが自分用としては使えそうです。
ただのプログラミングの勉強です。
トラックバック
12 | 2025/01 | 02 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
自分で売買ルールを作成してテストして自信をもってリアルトレードしたいです。
コメント
トラップイフダンというEA?の成績を拝見したのですが、どこかで入手可能なものなのでしょうか?もし宜しければ御教授頂ければ幸いです。よろしくお願いいたします。
毎日手動でLIMIT50pipsのIFD注文をしているだけです。
このやり方は誰でも真似できますが膨大な含み損を抱えることになるので真似しないことをお勧めします。
今でも2000pipsくらいの含み損があります。