ブログトップ 記事一覧 ログイン 無料ブログ開設

とあるMetaTraderの備忘秘録 RSSフィード Twitter

忙しいです。ネタもないし・・・

2009-07-22

EAのプログラム内から無理やりEAを止める方法。

何かの条件を満たしたらEA を止めたい場合…というのはよくあります。

正攻法では、

bool EAenable = true;//グローバルにEA実行可否判定変数を宣言
int start()
{
   if(!EAenable){
      ClosePositions();
      return(0);
   }
//
//条件を満たしたらfalseに
if(????) EAenable = false;

といった感じで、start()関数は呼ばれるけれど、何もしないで(あるいは、ポジションクローズだけして)return;するのが良いと思います。



ただ、世の中には start()関数すら呼ばせたくないという人も居ると思うので、他のEAの止め方をいくつか紹介しておきます。





その1 EA内でエラーを発生させて無理やり止める。

EA内部で、プログラム上のエラーが発生するとEAが止まります。

これを利用したのが以下のコードです。以前は、ゼロ割の発生でも止まっていたらしいのですが、今はEAを止められるエラータイプが限られているようです。


#import "dummy.dll" //存在しないDLLから、存在しない関数を宣言
  void    EA_STOP();
#import
bool EAenable = true;//グローバルにEA実行可否判定変数を宣言
int start()
{
   if(!EAenable){
      ClosePositions();
      EA_STOP();//ここで、存在しないDLLが呼ばれてエラー発生
   }
//
//条件を満たしたらfalseに
if(????) EAenable = false;

このコードでEAを止めると、Expertログに

17:42:55 MACD Sample EURUSD,M5: cannot load library 'dummy.dll' (error 126)

17:42:55 MACD Sample EURUSD,M5: expert stopped

というメッセージが残ります。




その2 チャートの強制クローズで止める。

チャートが閉じられれば、EAは止まりますので、それを利用します。

#include <WinUser32.mqh>
bool EAenable = true;//グローバルにEA実行可否判定変数を宣言
int start()
{
   if(!EAenable){
      ClosePositions();
      //以下のチャートクローズメッセージを送信
      PostMessageA(WindowHandle(Symbol(),Period()), WM_COMMAND, 57602, 0);
   }
//
//条件を満たしたらfalseに
if(????) EAenable = false;

このコードでEAを止めると、Expertログに

17:50:19 MACD Sample EURUSD,M5: uninit reason 4

17:50:19 MACD Sample EURUSD,M5: removed

というメッセージが残ります。




他にもShellExecute から、ExpertAdvisorボタンを押させる等が考えられますが、とりあえず今日はこの辺で・・・。

KiririKiriri 2009/07/23 22:51 DLLの呼び出しエラーのアイデア使わせていただきます。そうか、この手があったのかぁ。と・て・も参考になりました。サーバの一覧 GMTのデータもとても助かります。MT4はサーバのTZまちまちだし、おまけに夏時間も 欧州タイプ、米国タイプ、夏時間なしと様々で、ロンドン8時にトレード開始!みたいなEA作るのに結構面倒くさく、いまいちです。GMTに対してマイナスのTZをもつサーバもあるんですね。う〜ん。

fai_fxfai_fx 2009/07/24 01:28 コメントどうもです。このアイデアはMetaQuotesの人がコメントしていたものなので、かなりトリッキーだとは思います。^^;
ロンドン時間については、http://blog.xe.bz/archives/50917591.html の手法が知られていますが、個人的には手動で季節ごとにサーバごとにその都度設定すれば十分かなぁと思ってます..。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/fai_fx/20090722/1248226354
Connection: close