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

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

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

2009-12-01

(続々)指定時間帯のみにEAを動かす…。

先日の指定時間帯のみにEAを動かすスクリプトは、1台のPCに1つのMT4で、複数のEA を動かしている環境で、PCの再起動時には MT4 を自動起動しないという暗黙の条件下を想定していました。

ところが、運用形態によっては、PCの再起動後にも備える必要があるようです。


MT4 の script は MT4 を再起動すると停止してしまうので、再起動後に自動でscript を適用させる ( これはちょっと危険.. ) か、そもそもの仕組みを変えるしかありません。ちなみに、EA と script と indicator の特徴をまとめると以下の表のようになります。

種別トレード(クローズ)PC再起動注)
EAEA停止状態では何も実行されない
script×無限ループ
indicator×Tick更新毎に実行される

再起動後にも動き続けるのは、EA か indicator になるのですが、 EA の場合は、一度 ExpertAdvisors ボタンを押して停止状態になると、何も実行されなくなる ( start関数が呼ばれなくなる ) ので、EA 自身にもう一度 ExpertAdvisors ボタンを押させることができません。

( 機械のロボットが、自分で自分の電源を切ってしまうと、ロボット自身は自分で再度電源を入れられない..ということです。)


indicator なら ExpertAdvisors ボタンの状態に関係なく実行されるので、ボタンのON/OFFには適しているのですが、逆にトレード(ポジションの修正やクローズ)ができないという欠点があります。


ODL等のいくつかのブローカーは、ポジションオープン時に StopLoss が入れられません。そのため、ポジションオープン後に、ポジションの修正で StopLoss を入れるのですが、この僅かな時間差の間にindicator がボタンをOFF にしてしまうと、 StopLoss のないポジションが出来てしまう危険性があります。





そんなわけで、1つのプログラムで対応するのは困難なので、1つの口座に対して2つのMT4 を起動して

・1つ目のMT4 では、トレード用の各種 EA と、ボタンのON/OFFをするだけのタイマーインジケータを動かす。

・2つ目のMT4 では、タイマーで指定時刻にポジションを閉じる(or 最低限のSL/TPを入れる) EA を動かす。

とするしかないのかなと思います。

ソースコードは、こちらに置きましたので、十分にテストして挙動を理解した上でお使いください。


注文時に StopLoss が入るサーバであれば、タイマーインジケータだけで済むのですけどね...。

くえくえ 2009/12/01 10:57 いつも参考にさせてもらっています。

これは便利に使えますね!
早速DLさせていただきました。
ありがとうございました。

tamotamosantamotamosan 2010/03/02 22:27 記事を読ませて頂きました。  非常に便利なインジケータだと思います。
MQL4の初心者ですが、 ある特定のマジックナンバーのオープンポジションがある場合、EAを止めず継続させたいのですが、インジケータで作成可能なのでしょうか?
作成するに当たり アドバイス・ヒント頂ければ幸いです。

パパロッテイパパロッテイ 2010/03/28 17:47 いつも御世話になつています。ありがとうございます。EA_Timer3[ind].mq4を指標発表に作動させるシンプルなOCO_EAと連動させて利用しています。EA_Timer3[ind].mq4のパラメーターに時刻を誤入力してセツト後、上書きをしょうとして、EA_Timer3[ind].mq4をもう一度インジーケーターのチャート画面に貼り付けるとパクのようなものが発生して。旨く作動しません。EA_Timer3[ind].mq4は上書きができないのでしょうか?またEA_Timer3[ind].mq4のプログラムを停止するのは 1._他のインジーケーター.mq4ファイルを上書きする 2_インジーケーターチャート画面を削除する
この2点しか方法はないのでしょうか、よろしくご解説をお願いします。献身的な本ブログに感謝しています。ありがとうございます。

cuescuecuescue 2010/07/22 11:48 faiさん こんにちは
便利なツールありがとうございます。
指定時間だけ動作させたいEAが出てきましたので
使ってみようと思っています。

不明な部分があります。このEAの使い方を伺ってよろしいでしょうか。
1.まず、ひとつのMT4に実際に売買を行うEAをひとつ設定しますね
2.次に同じMT4に別のチャートを開き、EA_Timer3[ea]をセットします
3.このとき、指定時間は、GMTではなく、使用する環境の時間。つまり日本だったら
GMT+9の時間で指定する
Q1.上記の認識でであっているでしょうか?
Q2.時間外はどのような表示を行うのでしょうか。
自分の認識では EspertAdbisorsアイコンが緑△から赤■になると思っているのですが。。。
あとログに抑制開始とかでるのでしょうか。

過去のお話で申し訳ありません。

cuescuecuescue 2010/07/22 17:10 連投すいません。
experts\logsに以下のようなログが吐き出されています。
16:24:30 EA_Timer3[ea] GBPUSD,H1: Alert: ERROR Check Allow live trading

インストールは
下記のセットの他にしなければいけないことがあるのでしょうか。
experts\EA_Timer3[ea].mq4
experts\indicators\EA_Timer3[ind].mq4

cuescuecuescue 2010/07/27 15:38 自己解決報告です。
EA_Timer3[ea]とEA_Timer3[ind]は別々にセットしてあげないとだめなんですね。
EA_Timer3[ea]から呼び出すようになっているのだと勝手に勘違いしていました。
無事動作しました。
ありがとうございました。
indicatorは停止することができないので緊急停止ボタンが用意できれば
完璧かなと思いました。

しかし、便利なツールこれから活躍しそうです。

cuescuecuescue 2010/07/27 15:45 >tamotamosanさま
もう見ておられないかもしれませんが。。。

OrderType()とOrderMagicNumber() をうまく組み合わせれば
所望の動作ができると思います。
faiさんのEA_Timer3[ea]のDeletePendingOrders()あたりを参考に
チャレンジしてみてください。

Masa?Masa? 2011/02/20 15:24 はじめまして。
EA_Timer3をダウンロードさせて頂きました。
ありがとうございます。

質問なのですが、例えばDGFXをデフォルト設定で動かしておいて、日本時間14時に残っているポジションを全て強制決済してい場合、下記の設定で良いでしょうか?

EA_Timer3[ea].mq4を、DGFXを動かしているMT4に、新しいチャートを開いてそこに設置する。
StartLocalTime1 06:00
StopLocalTime1 14:00
StartLocalTime2 00:00
StopLocalTime2 00:00
その他はデフォルト

以上、ご教授お願いいたします。

Masa?Masa? 2011/02/22 22:47 自己解決して、使用方法が分かった気がします。
これは便利ですね!
ありがとうございます。
ただ、全決済はしてくれるのですが、下記の様なエラー表示がたくさん出ます。

2011.02.22 22:41:52 EA_Timer3[ea] EURGBP,H1: Alert: ERROR Check Allow live trading

どこの設定が間違っているのでしょう?

Masa?Masa? 2011/02/22 23:39 本当に何度もすみません。
エラーの件、チャートをひとつだけ表示してEAをセットすることで解決しました。
ありがたく使わせて頂きます。
非常にうれしいです。

TAKETAKE 2012/10/24 15:03 はじめまして、いつもこのブログで勉強させていただいております。

質問です。このEA Timer はEAの稼働時間外になるとポジションをすべてクローズにしますよね?
この仕様を、

もし 稼働時間外になる かつ もっているポジションがマイナスでないとき にはすべてクローズにしてEAを止める

もし稼働時間外になる かつ もっているポジションがマイナスの時 ポジションをクローズにはせずEAだけとめる


という形にしたいのですが、どのような記述にすれば良いのでしょうか?

まだまだプログラミングが初心者の為、ご教授いただきますよう、お願いします。

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

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


画像認証

トラックバック - http://d.hatena.ne.jp/fai_fx/20091201/1259610071