2011/05/12

MT4用EA開発時代 - EA内部構造の設計と共通部品



さて前回は、MT4用EAプログラミングに必要な基礎知識等をまとめたところまで話しました。今回は、EAプログラミングにあたって、どういう関数構成にするかを検討している様子を書いて見たいと思います。

今回の一番のこだわりポイントは、以前の記事で書いた、売買ルール以外で必要な機能(監視/運用関連機能や、障害対策/リトライ制御、価格のサーバとのズレへの対策等)を共通部品化して、今後新たなEAを作るときは、純粋に売買ルールだけ書けばいい様にする事。

売買ルールに直結しない部分なんて、何回も書きたくない。

今回の共通部品の特徴は、いくつかの関数を用意すれば、共通部品側から必要に応じて呼び出されるので、処理順序とかも含めて、余計な事を考えなくて済むという点。

ただ、簡単にEAを作れる様にした代わりに、いろいろ制約事項が。

【制約事項】
----------------------
1.バーが完成したタイミングでしか発注できない
2.発注方法は、逆指値か成り行きだけ
3.トレーリングは、SL価格をタイトにする方にしか変更できない。(これは意図的に組み込んだ)
  また、1バー進む毎にしか変更できない。 
4.1つのポジションを段階的に建て玉を増やしていくとか、減らしていくとか
  できない。
5.1EAで複数MAGICには対応していない。
6.同じEA+同じ通貨ペアで同時に複数ポジションを持てない。
7.スキャルピングには不向きかもしれない。(処理速度等の理由で)
----------------------

で、関数群を大まかに分類すると以下の様に。

【関数の分類】
-------------------------
1.共通部品(メイン制御部)
  ・1回ティックデータを受信するごとに動かす処理の流れの制御
  ・MT4の再起動や、プロパティの変更、時間軸の変更等のイベントが発生したときの制御
2.共通部品(オーダ関連制御部)
  ・オーダ関連関数呼出しを行い、エラー判定を行い、必要に応じてリトライ
  ・売買ルール固有部の関数から得られた価格を補正。
   Ask/Bidと逆指値指定時の離さなければならないpips数から、整合性が取れる様に補正。
   価格の桁数を補正
  ・ロット数の補正
   最小ロット数や、ロット単位、最大ロット数抑制機能にもとづいた、ロット数の補正。
   ロット数の桁数を補正
  ・エラーの内容に応じて、ログ出力やメール通知
  ・不正な利用方法(つまり売買ルール固有部のバグ)をチェック
3.共通部品(大域変数制御部)
  MT4を再起動しても、データが消えない様にファイル出力したり、
  読み込んだり、削除したりする関数群
4.売買ルール固有部
  売買ルールに応じて、必要な判断や、各種価格/ロット数等を決定する関数群。
  共通部品を使ってEAを作る時に、売買ルールを書くところ。 
-------------------------


要は、上記「4.売買ルール固有部」だけを書けば、新たなEAを作れる様になるということ。







制約事項が許容できるなら。





そして、それらの関数の呼び出し関係を絵にしてみると以下の様に。

【関数間の呼び出し関係】
---------------------------
矢印の方向に関数呼出しを行う。
下図の右のオレンジ色の部分が、売買ルール固有部で実際に売買ルールを書く関数群。 
多分ちっちゃくて読めないので、画像クリックして拡大してください。。。

実は、start()関数冒頭の「状態確認」については、要否そのもので未だ悩み中
ちょっと流動的な部分もあるけど、おおまかにはこんな感じ、という事。
---------------------------


他にも、「売買ルール固有部分」から呼び出せる共通部品があったり、今後の構想では、「EA固有部分」を呼び出すタイミングを増やすつもり。なので、もうちょっと柔軟な売買ルールが実現できるんじゃないかと思う。









こんな共通部品ですが、

使いたい人いますか?







今の段階で、

判るわけないやろ。



そして自己満足状態で、「FXシステムトレード初心者奮闘記」の「MT4用EA開発時代」は部品の説明等が続くのでした。
#デモ口座上のMT4用EAに戦略ストップ機能追加できた~

0 件のコメント:

コメントを投稿