MT4用EA開発用共通部品「ahfw」



【製品化のお知らせ(2012/10/19)

この度、「MT4用EA開発共通関数『ahfw』」は、「COMFFERED MT4 EA Framework」として製品化させていただきました。リンク先では「無料お試し版」もご提供していますので、ダウンロードして、ご利用頂ければ幸いです。

また今回の開発は、当方ブログ「FXシステムトレード初心者奮闘記」やTwitterを通して、皆様からのご指導・ご支援が無ければ成しえなかったと思います。失礼とは思いますが、この場をお借りして、皆様に御礼申し上げます。

今後とも、よろしくお願いいたします。


【MT4用EA開発共通関数「ahfw」の特徴】
------------------------------
「ahfw」は、MetaTrader4用EAを開発する際に、複雑な制御プログラムを書かなくても24時間安心して動作させる事ができる様に、運用性/耐障害性を高めるフレームワーク型共通部品群です。
この「ahfw」を利用することにより、EA開発時はトレードルールの実現だけに集中する事ができます。また、致命的なエラーの発生や、ドローダウンが一定率以上になった場合等の異常時は、メールと音で通知するとともに、自動的に新規発注停止状態に遷移する等の機能があるため、パソコンを使用していなくても、被害の拡大が自動的に防止され、異常が発生したことを知る事ができます。

1.共通部品構造


2.運用イメージ

3.機能概要
  1.処理順序制御機能
    オーダの発注、ポジションのストップ・ロス(以下SL)/テイク・プロフィット
    (以下TP)価格変更、ポジション決済という一連の処理の順序を制御します。
    この部品を使ってEAを開発する場合は、既定された関数を用意するだけで、自動的に
    共通部品側から呼び出されるので、複雑な処理順序を考えなくてもEAを開発
    することが可能になります。
  2.監視/運用機能
    システムやトレード結果で異常を検出した場合は、メールとアラート音で通知し、
     ログを出力します。
    「トレードログ」として、トレード結果をCSV形式でログに出力できます。
    システムの異常レベルに応じて新規発注を停止させます。
    特定の通貨ペアのみ新規発注を手動で計画的に停止させる事ができます。
    ポジション保有中にMT4を再起動させても、停止前の状態からトレードを再開する
     ことができます。
  3.マネージメント管理機能
    「最大ドローダウン率」が指定した一定率をオーバーした場合、自動的に新規発注を停止
     するとともに、メールで通知することができます。
    「証拠金維持率」が指定した値を下回った場合、自動的に新規発注を停止するとともに、
     その旨をメールで通知することができます。
    ロット数を計算する関数を用意しており、また、ロット数を証拠金維持率の一定率以下
     に制限することができます。
  4.通信/エラー制御機能
    ・トレードサーバから返却されるエラーの種類毎に、必要に応じてオーダ操作のリトライを
     行います。
    ・リトライ回数が一定回数を超過した場合や、リトライ中に次のバーに進んでしまった場合
     は、その旨がメールで通知されます。
  5.価格計算/補正機能
    ・価格計算時に、桁数やAsk/Bidとの上下関係を考慮しなくても、自動的に補正する
     関数を用意しています。
    ・発注やSL/TPの変更時に、実際の市場価格との不整合によるエラーが発生した場合は、
     補正される様な仕組みになっています。補正された場合はその旨をログ出力します。
 ------------------------------




【MT4用EA開発共通関数「ahfw」正式版Ver1.06リリース(2011/12/26)】
------------------------------
1.改修の背景
2.ダウンロード
  以下のリンクをクリックすると、13MBぐらいのzip形式ファイルのダウンロード
  が始まります。

  → ahfw0106.zip(13,421KB)
    ★ 無料お試し版「COMFFERED MT4 EA Framework」ダウンロードへ 

3.リリースメモ(前回からの差分)
 A.共通部品「ahfw」変更点(Ver1.28)
   ●重要度-大
    ・OrderModify実行時に該当オーダがSL/TPにより決済されていた場合、通常は
     ERR_INVALID_TRADE_PARAMETERSが返却されるが、通信遅延やPCスローダウンして
     いる場合にERR_INVALID_TICKETが返却される事があることが判った。
     該当ERR_INVALID_TICKET発生時は、プログラム・バグとしてクリティカルエラー
     として扱っていたが、上記ケースを勘案し、ERR_INVALID_TRADE_PARAMETERSと同等の
     扱いとする様修正。
    ・OrderModifyで、ERR_INVALID_TRADE_PARAMETERSが返却された場合、サーバ時刻が変わ
     ってから次ティックデータ受信するまで待った後、OrderSelect()のループで保有中
     オーダが存在していた場合、クリティカルエラーとして扱っていた。
     この背景には、ティックデータ受信時に、OrderSelect()の情報がクライアント側に
     反映されるという仮説に基づいたロジックであったが、実際には異なり、ティック
     データ受信時にOrderSelect()情報は最新化されない事が判明。
     従って、該当条件になった場合は、警告レベルのエラーとして通知する様修正。
    ・MT4強制再起動後一部の通貨ペアしか起動しなかった場合、メール通知する様に修正
     PC+NW過負荷の状態の場合、init()コールバック関数処理がMT4規定の処理時間
     で完了されずに、init()処理が強制終了される事がある。障害監視システム「ahfw_hc」
     に追加したEA起動監視機能に対応。
    ・NW負荷95%近辺の際、MT4監視システムがEAフリーズを検出し再起動発生
     ERR_INVALID_TRADE_PARAMETERSが返却さた場合、次ティックデータ受信を待つ処理が
     無限ループになっていたため、NW過負荷の状態では、延々と次ティックデータ受信を
     待つ事になり、結果的に障害監視システム「ahfw_hc」のEAストール監視にひっかかり
     MT4が再起動された。
   ●重要度-中
    ・決済失敗によりクリティカル/警告レベルのメール通知した後、決済成功した場合には
     通知しないと該当オーダがどうなったのかが不安になるので、決済成功時に通知する様
     に修正。
    ・ECNの発注時のOrderModify失敗時にエラーコードが設定されていなかったのを設定する
     様に修正
 B.「ahfwユーザーズ ガイド」(Ver1.05)
   上記設計バグに伴う修正。
------------------------------
【MT4用EA開発共通関数「ahfw」ベータ版1.05リリース(2011/9/15)】
------------------------------
1.改修の背景
2.ダウンロード
  以下のリンクをクリックすると、13MBぐらいのzip形式ファイルのダウンロード
  が始まります。

  → ahfw0105.zip(13,413KB)

3.リリースメモ(前回からの差分)
 ・今回EA開発にあたって、ソース修正が必要な場合があります。
 ・ドキュメントは一部設計改善及び誤記修正をしています。

 A.共通部品「ahfw」変更点(Ver1.27)
   ●設計変更/改善
   ・証拠金観点で発注失敗した際、クリティカルエラーとして該当EA+通貨ペアを発注禁止状態
    にしていたが、警告レベルのエラーに変更。発注可能な証拠金の状態となり、発注に成功した場合は、
    その旨もメール通知する様に変更。
   ●重要度-大
   ・GetMaxLotSize()で証拠金維持率の計算式が間違えていたのを修正
   ●重要度-中
   ・CalcLotSize()の第一引数が不正な場合に、-1が返却されないバグを修正
   ・CheckLotSize()の第一引数が不正の場合、FALSEを返却していないバグを修正
   ・EAをチャートから削除しても大域変数の"FW_ThreadStartTime" が残ってしまうバグを修正
   ・トレードログで、オーダ保有中にプロパティ変更したら、変更後のプロパティが出力されるバグを修正
   ●重要度-小
   ・提供テンプレートでEAToOrder()のロット数を求めるコメントアウトしたロジックの、vCmdとすべき箇所
    がcmdになっているバグを修正
   ・FWModifyOrderでSLが凍結レベルにある場合でSL補正された場合に毎回ログ出力されるバグを修正
   ・FWModifyOrderでSL補正されてなくても、補正した旨の運用ログが出力される事があるバグを修正
 B.「ahfwユーザーズ ガイド」(Ver1.04)
   ・上記設計変更に伴う修正
   ・保有中オーダ決済後からEAパラメータ変更後の値を変更する方法に関する記述の訂正
   ・その他誤りを修正。詳細は改版履歴参照の事。
------------------------------

【MT4用EA開発共通関数「ahfw」ベータ版1.04リリース(2011/8/27)】
------------------------------
1.改修の背景
  ・ブログ記事:設計書を書いてよかった事
  ・ブログ記事:ソースコードレビューで摘出したバグ(2011/8/27 11:30投稿予定)

2.ダウンロード
  以下のリンクをクリックすると、13MBぐらいのzip形式ファイルのダウンロード
  が始まります。

  → ahfw0104.zip(13,405KB)

3.リリースメモ(前回からの差分)
 ・今回EA開発にあたって、ソース修正が必要な箇所が一部あります。
 ・ドキュメントは機能詳細を追加し、大幅に拡充しています。
 
 A.共通部品「ahfw」変更点(Ver1.26)
   前述の通り多数あります。詳細はダウンロードしたファイル内のリリースメモを
   参照ください。
 B.「ahfwユーザーズ ガイド」(Ver1.03) 
   大幅に追加修正しています。詳細は改版履歴を参照ください。
------------------------------

【MT4用EA開発共通関数「ahfw」ベータ版1.03リリース(2011/7/7)】
------------------------------
1.改修の背景
  以下のブログ記事を参照ください。
  EA開発共通部品「ahfw」/障害監視システム「ahfw_hc」バージョンアップと、スレッド障害対応

2.ダウンロード
  以下のリンクをクリックすると、40MBぐらいのzip形式ファイルのダウンロード
  が始まります。
  → ahfw0103.zip(40,633KB)

3.リリースメモ(前回からの差分)

 ・今回EA開発にあたって、ソース修正が必要な箇所はありません。
  新しい[ahfw.mqh」を「include」フォルダにコピーし、リコンパイルするだけでOKです。
 ・ドキュメントに変更点はありません。

 A.共通部品「ahfw」変更点(Ver1.1V)
   ・障害監視システム「ahfw_hc」のスレッド障害検出機能に対応
   ・start()全体を排他制御する設定(プロパティ「LockStart」がTRUE)していた場合に、
    MT4が強制終了させられると、次回起動後EAが動作しないバグを修正
   ・OrderModify() / OrderDelete() / OrderClose()呼出しで「ERR_TRADE_TIMEOUT」が
    返却されていた場合、start()関数を抜けずにリトライしていた仕様を、
    一旦start()関数を抜けてからリトライする様に変更
 B.「ahfwユーザーズ ガイド」(Ver1.02) 
   変更無し
------------------------------


 【MT4用EA開発共通関数「ahfw」ベータ版1.02リリース(2011/6/30)】
------------------------------
1.ダウンロード
  以下のリンクをクリックすると、40MBぐらいのzip形式ファイルのダウンロード
  が始まります。
  → ahfw0102.zip(40,632KB)

2.リリースメモ(前回からの差分)

 ・今回EA開発にあたって、ソース修正が必要な箇所はありません。
  新しい[ahfw.mqh」を「include」フォルダにコピーし、リコンパイルするだけでOKです。
 ・ドキュメントは、仕様変更に伴うメール通知メッセージが主な変更点です。

 A.共通部品「ahfw」変更点(Ver1.1S)
    1. OrderSend()実行時に、「ERR_NO_RESULT」が返却された場合、クリティカルエラーとしていた
     仕様を以下の動作となる様修正。
     ・警告レベルでメールとログ出力し、新規発注停止にはしない様に修正。
     ・一旦start()関数を抜けて、1分(プロパティ「OrderLongRetryIntvl」の値)経過後
      再度OrderSend()する。
     ・OrderSend()成功したチケット以外に残存ポジションが残っていたら削除/決済する。
    2. OrderClose() / OrderDelete()時に、「ERR_NO_RESULT」が返却された場合、
      クリティカルエラーとしていた仕様を、以下の動作となる様修正。
     ・警告レベルでメールとログ出力。新規発注停止状態にはしない様に修正
     ・一旦start()関数を抜けて、次ティックデータ受信時にリトライする様に修正

 B.「ahfwユーザーズ ガイド」(Ver1.02)変更点
   1. 上記「A.」の仕様変更に伴うメール通知メッセージを追加
   2. コールバック関数の説明で、誤解を招く表現があったため、正確な表現に修正。
   3. その他誤植/不自然な文章を修正。詳細は改版履歴参照の事
------------------------------

 【MT4用EA開発共通関数「ahfw」ベータ版1.01リリース(2011/6/26)】
------------------------------
0.関連ブログ記事
  MT4用EA開発時代 - 共通部品「ahfw」のベータ版バージョンアップのお知らせ
1.ダウンロード
  以下のリンクをクリックすると、40MBぐらいのzip形式ファイルのダウンロード
  が始まります。
  → ahfw0101.zip(40,627KB)

2.リリースメモ(前回からの差分)

 ・今回EA開発にあたって、ソース修正が必要な箇所はありません。
  新しい[ahfw.mqh」を「include」フォルダにコピーし、リコンパイルするだけでOKです。
 ・ドキュメントは、EA開発後に運用するための内容を追記しました。

 A.共通部品「ahfw」変更点
   1.init()関数でエラーを検出した際は、start()関数が動作しない様に変更
   2.start()関数冒頭でIsTradeAllowed()チェックをしていたのを削除
   3.OrderDelete()時に「ERR_TRADE_TIMEOUT/142/143」が返却されたが、実際は処理が成功
    していた場合、クリティカルエラーとなり、新規発注停止状態となってしまう
    バグを修正
   4.OrderClose()後に、OrderSelect(SELECT_BY_TICKET)がFALSEの場合は、クリティカル
    エラー扱いとなる様に修正。
   5.OrderDelete()後に、OrderSelect(SELECT_BY_TICKET)がFALSEの場合は、成功扱いに
    なる様に修正。
   6.ログ出力で、実際と異なる出力をしていたバグを修正
   7.エラー発生時のログ出力時に、チケット番号や通貨ペアを出力していなかった箇所があった
   ため、出力する様修正
   8.ロジック上、バグ以外では発生しない条件となった場合に、警告エラーとしていた箇所があった
    ため、クリティカル・エラーとなる様に修正
   9.EAが使う共通関数の引数チェックで、明らかに使用方法が間違えているケースで、警告エラー
    となっていたが、方針と異なるため、クリティカルエラーとなる様に修正
 B.「ahfwユーザーズ ガイド」変更点
   1.「5.開発したEAの利用」の章に、以下を追加
    ・「5.2 メール通知を受信した場合」
    ・「5.3 運用手順について」
   2.「3.4 デモ口座/ライブ口座MT4への設定と実行」に、「チャートの最大バー数」設定
    が必要な旨追記
   3.その他誤記修正(詳細は本編改版履歴参照)
------------------------------  


 【MT4用EA開発共通関数「ahfw」ベータ版1.00リリース(2011/6/18)】
------------------------------
0.本リリースの関連ブログ記事
   「MT4用EA開発時代 - 共通部品「ahfw」のベータ版リリースのお知らせ
1.ダウンロード
  以下のリンクをクリックすると、40MBぐらいのzip形式ファイルのダウンロード
  が始まります。
  → ahfw0100.zip(40,521KB)

2.ダウンロードしたファイルの中身
  ●共通部品本体(ahfw.mqh)
   空白行やコメント行含めて、2000行ぐらい
  ●テンプレートmq4形式ファイル
   この共通部品を使うためのテンプレートファイル
  ●ユーザーズ ガイド(PDF)形式
   「MetaTrader4EA開発用フレームワーク「ahfw」ユーザーズ ガイド.pdf」
   というファイルがアーカイブの直下にありますので、ご一読ください。
   EA開発にあたって必要な事は網羅しているハズです。。
   今後もっと増量していく予定です。今でも40ページぐらいありますが。。
  ●サンプル2種類
   ・SmoothMADILong
    「旧SmoothMADI」システム。実際に使おうとしているEA。
    独自インジケータもソース込みで入ってます。
    今回のトレーディング・プラン通りに最適化したプロパティは以下の通りになります。
    USDJPY ・・・ PrShortPeriod(17)、PrLongPeriod(24) → 年末まで
    GBPJPY ・・・ PrShortPeriod(3)、PrLongPeriod(51) → 年末まで
    USDCHF ・・・ PrShortPeriod(11)、PrLongPeriod(24) → 年末まで
    AUDUSD ・・・ PrShortPeriod(11)、PrLongPeriod(36) → 今年8月末まで
   ・Sample1
    成行き注文で、決済指値を使用したサンプル。とっても綺麗な資金残高曲線を描きます。
    しかも、サンプル通りのルールでも、逆のルールにしても、とっても綺麗な右肩下がりです。
    まさにマジック!!
------------------------------


0 件のコメント:

コメントを投稿