忍者ブログ

forex tester2のインディケーターを自作

fx(外国為替証拠金取引)のトレードの練習やルールの検証をForex Tester 2というソフトでしてみます。 Meta Trader4(MT4)のインディケーター(indicator)をForex Tester2用に移植できたらしてみます。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


OmegaChartを改造 その4

前回までの改造で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を手作業で変更する必要はありますが自分用としては使えそうです。
ただのプログラミングの勉強です。


PR

トラックバック

トラックバックURL:

コメント

初めまして!トレサポより参りました。
トラップイフダンというEA?の成績を拝見したのですが、どこかで入手可能なものなのでしょうか?もし宜しければ御教授頂ければ幸いです。よろしくお願いいたします。

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字(絵文字)


forex tester2 販売
Forex Tester 2の購入はこちらから。
カレンダー
03 2024/04 05
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
カテゴリー
フリーエリア



最新記事
最新CM
最新TB
RSS
ブログ内検索
アーカイブ
最古記事
プロフィール
HN:
fx練習生
年齢:
49
性別:
男性
誕生日:
1975/04/03
職業:
夢は専業トレーダー
趣味:
fx
自己紹介:
fxの専業トレーダーになって経済的自由と時間的自由を手に入れたいです。
自分で売買ルールを作成してテストして自信をもってリアルトレードしたいです。
P R