FX自動売買「Dr.EAのブログ」

最新情報

MQL4セミナー開催のお知らせ

【MQLセミナー】

日にち:2012年2月11日(土・祝)
時間: 13:00 ~ 17:45

セミナー会場:東京都墨田区錦糸町周辺

募集人数:20名
(先着順となりますので、お早めにご連絡ください。)

セミナー内容: これからMQLプログラミングを習得する方のための入門編から
高度なEAを作成するための応用編までです。
(EA作成のセミナーです。インジケータ作成の内容は含まれておりません。)

【懇親会】

同日 18:30~20:30 懇親会開催

両方参加でも、どちらか片方でもOKです^^

日中は都合が都合が悪くセミナーに参加できない方でも、夜の懇親会にご参加いただけます。
また、セミナーのお申し込みを頂いた方は、当日不参加であっても特典は得られます。
特典のみ欲しい方は、お申し込み時にセミナー不参加というご連絡をください。

お申し込みページ
→EA作成マスターセミナー お申し込み

2012年1月21日|

カテゴリー:MT4 EAセミナー

csvファイルで指定した時間にEAを休止させるインジケータ

EAの休止時間をcsvファイルで指定する方法

で紹介したEAで、稼働中のすべてのEAを休止状態にしたいというお問い合わせがありました。
確か・・・
faiさんが以前に・・・
http://d.hatena.ne.jp/fai_fx/20091201/1259610071

同じ感じですが、一応インジケータを作りました^^; ファイルはこちら→NoTrade_ReadFile_Ind.zip

インジケータですので、experts→indicatorsフォルダに保存してくださいね。

faiさんがおっしゃっているように、
エントリ後に、ストップ値変更でストップを入れるEAを稼動させている場合は、
決済(ストップ設定)用のEAが必要になります。

実際に使用される場合は、十分動作確認をしてから使用してください^^;
パラメータ『SwitchEAs』をfalseにした場合は、EA休止機能が無効になり、テキスト表示だけになります。
でわでわ^^

タグ

2011年2月 6日|コメント (5)

カテゴリー:indicators

EA Sample_NoTrade_ReadFile.mq4の解説

今回のテーマは、

EAの休止時間をcsvファイルで指定する方法

で紹介したサンプルEAファイルの説明です。

→Sample_NoTrade_ReadFile.mq4とNoTradeTime.csvをダウンロード

Sample_NoTrade_ReadFile.mq4の解説

まずは、『NoTradeTime.csv』ファイルを見てみましょう。

2010.02.18 01:30
2010.02.18 03:00
2010.02.18 04:30

というように、『yyyy.mm.dd hh.mm』の日付フォーマットで、
トレードしない時間が入力してあります。

『Sample_NoTrade_ReadFile』は、
この時間データを読み取り、その前後の何分間は、
No Trade Time Zone
とチャート上に表示させるようになっています。

早速、メタエディタでSample_NoTrade_ReadFile.mq4の中身を見てみましょう^^

パラメータ

extern int     NoTradeBeforeMin  = 20;
extern int     NoTradeAfterMin   = 30;
extern string  NoTradeFileName   = "NoTradeTime.csv";
NoTradeBeforeMin ・・・ 指定時間の何分前からかを指定
NoTradeAfterMin  ・・・ 指定時間の何分後までかを指定
NoTradeFileName  ・・・ データのファイル名を指定

です。

そして、記憶用変数(グローバル変数)で

int BeforSecond;
int AfterSecond;

パラメータ『NoTradeBeforeMin』と『NoTradeAfterMin』の
『分指定』を『秒指定』に変換したものを格納しておく変数です。

その下に、どの関数からも共通で使える変数(グローバル変数)で

datetime LastNoTradeData;
datetime NextNoTradeData;

『LastNoTradeData』は、
csvファイルで指定した時間データのうち、
過去のもので現在の時間に一番近い時間データを格納しておく変数です。

『NextNoTradeData』は、
csvファイルで指定した時間データのうち、
未来のもので現在の時間に一番近い時間データを格納しておく変数です。

その下に、

bool NoData;
datetime Now;

『NoData』は、
もうcsvファイルの指定時間をチェックする必要がなくなったら、
NoDataをtrueにして、ファイルを開かないようにするための変数です。

『Now』は、
現在の時間データを代入する変数です。

次は、EA開始時に1度だけ実行されるinit()関数です。

int init()
{
   BeforSecond = NoTradeBeforeMin * 60;
   AfterSecond = NoTradeAfterMin  * 60;
   
   LastNoTradeData = -1;
   NextNoTradeData = -1;
   
   NoData = false;
   return(0);
}

『BeforSecond』『AfterSecond』に、
パラメータ『NoTradeBeforeMin』『NoTradeAfterMin』の、
秒に換算したものを代入します。

今後、時間の比較を、秒単位で進行する時間データで行うためです。

パラメータ『NoTradeBeforeMin』『NoTradeAfterMin』の役割は、
ここで終了し、もう使いません^^;

『LastNoTradeData』『NextNoTradeData』に、マイナス値を入します。
これらの変数にマイナス値が入っている場合は、
それに対応するデータが空っぽというルールにするためです。

『NoData』にfalseを代入しておきます。

ここで、グローバル変数の宣言部分に初期値を代入しておくのと、
init()関数内で値を代入するのでは、若干動作が違います。

グローバル変数は、記憶力を持った変数で、
EAをチャートから外したときに、はじめて格納されている値がなくなります。

もし、仮に『NoData』を、
グローバル変数宣言
bool NoData = false;
として、init()関数ではfalseを代入しなかった場合、
EA稼動中、NoDataがtrueになったあと、 csvファイルの時間データを更新して、 再読込させようと、EAのパラメータ等を入力するプロパティウィンドウを開き、 OKボタンで再スタートさせたとします。
しかし、EAは前回稼動していたグローバル変数の値が残っていますので、 NoDataがtrueのままで、csvファイルを読まないようになってしまいます。

そうならないためにも、init()関数の中で
稼動開始時にグローバル変数に入っていて欲しい値を代入しておきます。

次に、ティック毎に実行されるstart()関数です。

int start()
{
   Now = TimeCurrent();

一番最初に、『Now』に現在の時間データ(時刻1秒ごとに付けられている整数)を代入しておきます。

次に、

   if(Now >= NextNoTradeData && !NoData) SetNoTradeData();

として、

もし現在の時間が、前回記憶していた『未来の直近の時間データ』に到達し、
かつ、まだファイルをチェックする必要がある場合は、
 SetNoTradeData()関数を実行する。

という意味です。
SetNoTradeData()関数では、時間指定のcsvファイルを開いて、
『LastNoTradeData』『NextNoTradeData』『NoData』に
それぞれの値を代入する関数として、start()関数の下に作ってあります。
後で、見てみましょう。

次に、

   static datetime PrintData;
   if(NextNoTradeData > 0 && NextNoTradeData != PrintData)
   {
      Print("No Trade: ", TimeToStr(NextNoTradeData - BeforSecond, 
                 TIME_DATE | TIME_MINUTES), " - ",
                          TimeToStr(NextNoTradeData, 
                 TIME_DATE | TIME_MINUTES), " - ",
                          TimeToStr(NextNoTradeData+AfterSecond, 
                 TIME_DATE | TIME_MINUTES));
      PrintData = NextNoTradeData;
   }

として、

記憶用変数『PrintData』を宣言。
もし、『NextNoTradeData』に指定時間が入っていて、その値が『PrintData』と違う場合、
 『No Trade: 取引停止開始時刻 - 取引停止指定時刻 - 取引停止終了時刻』を出力。
 『PrintData』に『NextNoTradeData』の値を代入。

という意味です。
新しく『未来の直近の時間データ』になった場合は、
1度、操作履歴にその時刻と停止開始・終了時刻を出力するということです。

次に、

   if(IsNoTradeTime()) return(0);
IsNoTradeTime()関数がtrueを返したら、ここで実行終了。

という意味です。

IsNoTradeTime()関数は、それぞれの時間データから
現在取引停止の時間かどうかを判断し、停止の時間の場合、
チャート上に『No Trade Time Zone』と表示させ、trueを返します。
そうでない場合は、falseを返します。後で、見てみましょう。

そして、return(0)で実行終了とならなかった場合は、次の

   Comment("Trade Time Zone");

チャート上に『Trade Time Zone』と表示させます。

これで、start()関数は終了ですね。

つぎは、SetNoTradeData()関数とIsNoTradeTime()を見ていきます^0^

つづく^^

タグ

2010年10月 1日|

カテゴリー:EAの作成方法

FXDDの8%入金ボーナスでEAプレゼント

FXDDの8%入金ボーナス
に新規口座開設で参加された方で、

お問い合わせフォーム
に、お名前・メールアドレスをご記入の上
参加口座のアカウントIDと特典EA希望とご記入頂いた方全員に
EAプレゼントいたします!!

EAは、レンジ相場に有効なあの手法です^^

是非、ご参加ください^^

でわ、このへんで^^

2010年3月 3日|コメント (5)

カテゴリー:FXブローカー

和訳MQL言語リファレンス(日本語翻訳)(その2)

今回は前回和訳MQL言語リファレンス(日本語翻訳)で紹介したファイルの改良版です^^

→metaeditor2.zipをダウンロード

前回の記事で

語句をマークして、F1でリファレンスを見ているのですが
今回は、それはできないようなので、
これができるように、是非とも改良をお願いします!!

といったコメントを頂きましたので、
語句を選択してF1ボタンを押したら和訳のページを表示するようにしました。

ファイルの保存先等は、前回の記事を参考にしてください^^;

でわ、このへんで^^

和訳MQL言語リファレンスの関連記事

タグ

2010年2月28日|コメント (12)

カテゴリー:MQL言語リファレンス

EAの休止時間をcsvファイルで指定する方法

今回のテーマは、csvファイル等で指定した時間の前後は
取引をしないようにする方法です。

サンプルファイルはこちら→Sample_NoTradeTime.zip

2つのmq4ファイルと、2つのcsvファイルがありますが、
2つの対になっていて、それぞれやり方が違っています^^

どのように違うかは、
・・・^^;

また、次の機会に書きますm(_ _;)m

通常稼動で使う場合は、csvファイルをMT4→experts→filesフォルダに保存してください。
バックテストで使う場合は、MT4→tester→filesフォルダに保存してください。

でわ、このへんで^^

タグ

2010年2月19日|コメント (2)

カテゴリー:EAの作成方法

和訳MQL言語リファレンス(日本語翻訳)

今回のテーマは、MetaEditor(メタエディタ)でEAを作成・編集中に参照する
MQL言語リファレンスについてです。

メタエディタでMQLリファレンスを参照するには、

  • NavigatorウィンドウのDictionaryタブで選択
  • ToolboxウィンドウのHelpタブで選択
  • EA内の調べる語句をダブルクリックしてF1ボタン

などがありますが、
英語で説明されていて、よく解らなかったりします^^;

そんな時は、Google検索などで
使い方を調べる旅にでることになります^^;

和訳MQLリファレンスがあったらいいなぁ・・・
と思っていましたが!!

ありました!
メタシス・シーカーのMQL言語リファレンスの日本語翻訳マニュアル
ほとんどの部分が翻訳されています^^

さらに、メタエディタで参照できるようにしたいと思い、
サイトオーナーのMIYAさんに翻訳部分を使わせていただけるようお願いしたところ

サイトお手軽参照システム?についても歓迎です。
ゼロサムゲームの厳しい世界で、矛盾したことを言いますが、
システムトレードで人々に幸せを与えれるお手伝いになるのであれば歓迎です。

と、ありがたいお言葉を頂きました^^

メタエディタで和訳MQL言語リファレンスを参照できるようにする方法

→metaeditor.zipをダウンロード

metaeditor.zipを解凍し、中のmetaeditor.xmlを
MT4フォルダ内のlanguagesフォルダに保存します。(上書きで構いません^^;)

メタエディタを開いていた場合は、再起動させてください。

メタエディタのToolboxのHelpタブで、【和訳リファレンス】という項目をクリックすると
web上の和訳リファレンスを参照できます^^
リファレンスのトップに戻るときは、ToolboxのHomeボタンで戻ってください。

今後、バージョンアップする可能性ありです^^;

でわ、このへんで^^

和訳MQL言語リファレンスの関連記事

タグ

2010年2月13日|コメント (18)

カテゴリー:MQL言語リファレンス

決まった時刻に残高情報をメールするインジケータ

今回は、毎日決まった時刻に残高情報ををメールするといったインディケータです。
また、残高変動がなかったらメールしないという条件も加えます。

サンプルファイルはこちら→Sample_AccountBalanceCheckMail.zip

中身の解説等は、また後日じっくり書きます^^;

この記事を編集するか、改めて記事を書くかは未定ですm(_ _;)m

もし、ファイルの中身を見て疑問に思ったりした場合は、
質問してくださいね^^;

でわ、このへんで^^

タグ

2010年1月29日|コメント (3)

カテゴリー:indicators

複数のシグナル・複数のフィルタを搭載し選択できるEA

今回のテーマは、EAの中で複数のシグナル・複数のフィルタを搭載し、
それを使うかどうかパラメータで選択できるようにする方法です。

サンプルファイルはこちら→Sample_SwitchSignal.zip
(↑'10.01.22 午前 一部修正)

Start()関数の中身は上から、

  • シグナル計算2つ
  • フィルタ計算3つ
  • エントリシグナル計算
  • エグジットシグナル計算
  • ポジション確認
  • エグジット処理
  • エントリ処理

という感じです。

シグナルが2種類、フィルタが3種類あり、
それぞれどれを使うか[Use~]というパラメータで選択できるようにしています。

シグナル計算やフィルタ計算はそれぞれ[~sign]や[~filter]といった
個別の変数に計算結果を代入します。

そして、サンプルファイル132行目~140行目を見てください。

   int sign;
   
   if((!UseMaCrossSignal || MaCrossSign==1) &&
      (!UseMacdCrossSignal || MacdSign==1) &&
      (!UseMaTrendFilter || MaFilter==1) &&
      (!UseAdxFilter || AdxFilter) &&
      (!UseAtrFilter || AtrFilter)) sign=1;
      
   if((!UseMaCrossSignal || MaCrossSign==-1) &&
      (!UseMacdCrossSignal || MacdSign==-1) &&
      (!UseMaTrendFilter || MaFilter==-1) &&
      (!UseAdxFilter || AdxFilter) &&
      (!UseAtrFilter || AtrFilter)) sign=-1;

エントリ用のシグナルを代入する整数変数 sign を宣言。
もし、
UseMaCrossSignal が false または、MaCrossSign が1で
UseMacdCrossSignal が false または、MacdSign が1で
UseMaTrendFilter が false または、MaFilter が1で
UseAdxFilter が false または、AdxFilter が true で
UseAtrFilter が false または、AtrFilter が true の場合、
signに1を代入
もし、
UseMaCrossSignal が false ・・・(省略)
・・・の場合、
signに-1を代入

といった感じにします。

これで、選択されたシグナルやフィルタのみを使ったシグナルが
sign に入ります^^

フィルタのシグナル用の変数でtrue/falseのbool型の場合は、
外でif文で書いてもいいですね^^

その下のエグジット用のシグナルの条件では
サンプルではフィルタ用の条件は含めてませんが、
書き方としては、同じ感じですね^^

そのほかで、ちょっと分かりづらいところがありますが^^;
コメントで質問してくださいね^^;

でわ、このへんで^^

タグ

2010年1月21日|コメント (19)

カテゴリー:EAの作成方法

MQL4からMQL5への移植(その2)

前回【MQL4からMQL5への移植(その1)】のつづきです^^

MT4では、BidやBarsといった変数には自動的にその値が入っていましたが、
MT5では、SymbolInfoDouble(_Symbol,SYMBOL_BID)や
Bars(_Symbol,PERIOD_CURRENT)といった感じに関数で呼び出さなくてはなりません。

Close[1]やHigh[0]といった配列にいたっては、
データを入れる配列をつくって、
そのなかにデータをコピーして、
どのデータを知りたいか選択してやっと呼び出せます^^;

そのうえ、MT4のように1本前の足の高値をHigh[1]といったように、
シフトの数で指定するようにする場合は、
ArraySetAsSeries(...)という関数を使って『最新の足を0として数えますよ』と
書いておかないといけません。

例えば、ArraySetAsSeries(Open,true)を書き忘れてしまっていて、
MT4のように、最新の足の始値を取得しようとOpen[0]と書いたら、
最古の始値を取得しちゃいます^^;

慣れるまで大変ですので、頭に

#include <mql4to5_timeseries_array.mqh>

と、start()に替わるOnTick()(EAの場合)の中の最初に

   CopyCurrent();

を、書き込むだけでよいインクルードファイルを作りました^^

今回は、前回よりも書き換え手順が楽ですね^^

ダウンロードはこちらから→mql4to5_timeseries_array.zip

そのサンプルEA→timeseries_sample1.zip

でわでわ^^

MQL4からMQL5への移植の関連記事

タグ

2009年10月24日|コメント (41)

カテゴリー:MQL5