さて前回は、突如予定を変更して「OrderSelect問題パート2」再発した時の分析と対応方法を検討している様子を書きました。今回は、予定していた設計書を書いてよかったと思った点と、今後の計画について書いてみたいと思います。
まず、そもそもデモ口座で既にEAを動かしているのに、なんで今更設計書を書いているのかという事から。
これは、以前の「テスト計画」にのっとった形で、トレードパフォーマンスのテストではなく、EAのプログラム品質強化が目的。
この時のテスト計画の大枠を抜粋して再掲すると。
【テスト計画】(再掲)
----------------------------
1.細かいレベルの機能を洗い出す
ブログ記事に書いた機能は割りと大雑把な内容。
本当はプログラム書く前に、これをさらに詳細な内容にした設計書を作る必要がある。
でも、なんせ初めてのMT4。結局先にプログラムをちょっとずつ作って、
テスタとデモ口座で動かしながら、気付いた必要機能も追加していってた。
2.上記「1.」を元に、プログラムを目視で1行1行確認する
これが実は一番バグをたくさん摘出できるから、目視確認する事に。
本当は、上記「1.」を元に、関数ごとにプログラムの流れを書いた設計書を
書いて、それを元に実施するんやけど、そこまでようせん。。
3.テスタで確認できる機能は、プロパティをいじる等して機能しているか確認する
これは、「1.」を元に項目を洗い出して、テスタでできるものはテスタで実施する。
本当は、上記「2.」で触れてた、今回割愛した設計書を元にテストしてから
することだけど、作らないから、無理。
4.一定の確率でエラーを返す関数を用意する
OrderSend/OrderModify/OrderClose/OrderSelect/IsConnected/IsTradeAllowed等を
テスト用の関数に置き換える。一定の比率で正常に本当の関数呼出しをして、結果を
返すが、一定の確率でエラーを乱数で決めて返却して評価。5分足でテスタで評価する。
5.デモ環境で動作させて、いろんな障害とかを発生させる
これで実際の擬似障害とかを発生させたり、想定している運用手順を実際にしてみたりする。
---------------------
今まで、MT4用EA開発用共通部品「ahfw」に添付していた「ユーザーズ ガイド」は、上記「1.」の一部。今は、それを更に詳細化した設計書を一旦書き終わった段階。
#以前の記事の「PC障害対応時の設計漏れ」に関する設計書への反映はまだだけど。。
じゃあ、「設計書書いて良かった点」ってなんなんや?って事なんですが、
設計書を書いただけで、いろんなバグや改善点が見つかった事。
しかも、プログラム・ミスだけじゃなくて、設計ミスも発覚。
【設計書執筆で摘出したバグ・改善点】
-------------------------------------
●仕様変更/改善
・デモ口座期限切れ対策として、アカウント変更時に、関連大域変数を自動的に削除
する様修正。
また、内部管理しているチケット番号では、オーダ保有と認識してないにも関わらず、
同じMAGIC+通貨ペアのオーダを見つけた場合は、決済/削除する様仕様変更。
→ 以前の記事で書いた内容の反映
・EAInitがFALSEを返却した場合、クリティカルレベルのエラー通知する仕様を追加
・SL/TP変更時に、EAから渡されたSL/TP価格を補正する様に改善。
・発注時にEAから指定された発注価格/SL価格/TP価格/ロット数を補正する様に改善
・トレードログ出力時のファイル名の年月に、決済時のPC時刻を使用していたが、
サーバ側で認識している決済年月を使う様に仕様変更
・発注時に「ERR_TRADE_TIMEOUT/142/143」が返却された後、次回発注までの間に、
同じMAGIC+通貨ペアのオーダを見つけた場合、該当オーダを決済/削除する様に仕様改善
・決済時に、回線切断状態で、IsConnected()リトライループがリトライアウトした場合、
決済をリトライせずに一旦次ティックデータ受信を待ってしまう仕様だったのを、再度決済を
リトライする様に仕様を変更
●その他改善
・トレーリング時のCPUコスト削減
無駄にEAコールバック関数を呼び出していた
・発注及び、SL価格/TP価格変更で、オーダ操作したかったバーで結局できなかった場合に、
Barsの情報を出力する様に仕様を追加
●中程度のバグ
・SL/TP両方変更をする場合、指定されたSLが現在のSLより遠くなる場合、TP価格
が変更されないバグ
・SL/TP変更時に、TP価格が設定されていないと、価格補正の際、凍結レベルが考慮されて
いなかったバグ
・オーダ操作時に「ERR_TRADE_PROHIBITED_BY_FIFO」が返却された場合、リトライしていたバグ
クリティカルレベルのエラー通知すべき
・オーダ操作(発注、SL/TP変更)時に、回線切断状態で、IsConnected()リトライループが
リトライアウトした場合、オーダ操作が結局できなかったかどうかの通知が出来なかったバグ
●軽微なバグ
・大域変数の保存/クリア処理時にムダな処理があったため削除
・テスター実行後、大域変数の一部が残ってしまうバグを修正
・新規発注停止状態の場合に鳴らす音声が、プロパティで指定した音声にならなかったバグ
・int型であるはず変数がdatetime型になっていた。
・未使用変数を削除
・コメントの誤りを訂正
・テスター実行後、削除されない大域変数があったバグを修正
-------------------------------------
摘出したバグの内容はともかく、要はこんだけ色んな事が見つかったのが良かった点。
次に、改めて前述の「テスト計画」を振り返ると、計画も見直したい点も出てきた。
【テスト計画で見直したい点】
-------------------------------------
1.設計書自体の設計バグ観点のレビューを追加
設計書を書いてると、そもそも設計自体が間違えていたり、統一感が無かったり
する点が多々あったので、設計バグをまずは潰したい。
2.「4.一定の確率でエラーを返す関数を用意する」
これはやらない事にした。理由はデモ口座で動かしていると、結構サーバ側の
エラーを経験できたから。もう1つの理由は、エラーコードが返却されても、
実際どういうケースで発生し、その後どうなるのかは実際のサーバでやらないと
解らないから、このテストをしたとしてもあんまり意味がない。
3.「3.テスタで確認できる機能は、プロパティをいじる等して機能しているか確認」
これは、デモ口座で発生した事象を整理して、実際にデモ口座で動いた箇所は、マシンテスト
を実施しない様にする事で、効率化を図る。
あと、テスターでできないテストはデモ環境も使う。
-------------------------------------
来年(2012年)頭から本番を開始する予定なので、
なんとか間に合わせたい。。
なんとか間に合わせたい。。
今はデモ口座で結構安定的に1wk連続実行できているので、元もとのテスト計画の「3.テスタで確認できる機能は、プロパティをいじる等して機能しているか確認」は、テスト項目に優先度を付け、項目数も最低限に抑えて、期間内に実施できる項目を優先度順に実施。早めに「5.デモ環境で動作させて、いろんな障害とかを発生させる」を開始させて、年内に準備完了を間に合わせる。
そして残り少ない時間をどう過ごすかテストスケジュールを立てて見た。
#以前のブログ記事で「システム開始計画」という本番開始後の計画を検討してたけど、今回は本番開始までの具体的な計画。
【テストスケジュール計画】
--------------------------------
おおざっぱに言うと、9月末までに基本的な試験をして、10月に異常系テストしてEAとしては完成。あとは、本番開始に向けた手続きと環境構築がメイン。
●その他
・上記の「機能テスト」は、前述の「3.テスタで確認できる機能は、プロパティをいじる等して機能して
いるか確認」に相当。
いるか確認」に相当。
・8月の「トレード用PCクリアインストール」は、今デモ環境を動かしているトレード用の
PCが、今まで普段使いしていたちょっと古いPCなので、いろんな不要アプリとかがはいっている。
動かないサービスとかもあったりして、決して安定した状態ではない。
なので、一旦クリアインストールして、プリインストールされた不要なアプリは削除して、
トレードに必要なソフトだけを追加インストールすることにした。
・直近のデータまで取得して最適化する手順は、9月頭に実施予定のAUDUSD再最適化の時に
雰囲気はつかめるはず。
雰囲気はつかめるはず。
・「★利用するビルド決定」は、今使ってるMT4のBuildは229だけど、アップデート可能な状態に
なってて、Build401も選べる状態。でも、今までBuild229で評価してたし、出たばっかりのBuildを
使うのも怖いので、数ヶ月間新しいBuildをデモ口座で動かしてから、本番用MT4にするつもり。
8月中には一旦最新Buildにしてみて、10月末時点でのトラブル発生状況でBuild229か401かを
決める予定。
--------------------------------
ちょっとのんびりした感じだけど、またどこかではつまづくと思うし、多少前後しながらも、
区切りがいい2012年年初から始めようという寸法。
あと素朴な疑問は、最適化で使うForexTester2の過去データは1ヶ月毎に入手可能だけど、2011年末までのデータ取得できるタイミングはいつ?って点。つまり、サイト上では「毎月1日に各月のデータベースを更新します。」と書いてあるけど、年初でも同じ?という疑問。
これが事実なら、1月1日はマーケットが閉じてるみたいなので、1月2日から最適化後の
パラメータを適用できそうだけど、そうでなければ最適化後パラメータ適用のタイムラグが発生してしまう。
コト、今回の売買ルールで言うと、最初の発注まで時間かかると思うので大丈夫とは思うし、
まぁ、あんまり細かい事を気にしないで、多少のタイムラグは目をつぶることにした。
元旦に最適化実施とは風情が無いけど。。。
そして、無事運用開始の目処をたてて、「FXシステムトレード初心者奮闘記」の「MT4用EA開発時代」は、AccountNumber()ではまった小ネタについて進むのでした。
#PC障害対策のプログラミングは完了~ 市場開いたらテストしよっと。
0 件のコメント:
コメントを投稿