2011/08/01

MT4用EA開発時代 - 設計書を書いてよかった事と今後の予定



さて前回は、突如予定を変更して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 件のコメント:

コメントを投稿