最新情報
- 01月21日・・・MQL4セミナー開催のお知らせ
- 02月06日・・・csvファイルで指定した時間にEAを休止させるインジケータ
- 10月01日・・・EA Sample_NoTrade_ReadFile.mq4の解説
- 03月03日・・・FXDDの8%入金ボーナスでEAプレゼント
- 02月28日・・・和訳MQL言語リファレンス(日本語翻訳)(その2)
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で、稼働中のすべての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ファイルの説明です。
→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は、レンジ相場に有効なあの手法です^^
是非、ご参加ください^^
でわ、このへんで^^
和訳MQL言語リファレンス(日本語翻訳)(その2)
今回は前回和訳MQL言語リファレンス(日本語翻訳)で紹介したファイルの改良版です^^
前回の記事で
語句をマークして、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フォルダに保存してください。
でわ、このへんで^^
タグ
和訳MQL言語リファレンス(日本語翻訳)
今回のテーマは、MetaEditor(メタエディタ)でEAを作成・編集中に参照する
MQL言語リファレンスについてです。
メタエディタでMQLリファレンスを参照するには、
- NavigatorウィンドウのDictionaryタブで選択
- ToolboxウィンドウのHelpタブで選択
- EA内の調べる語句をダブルクリックしてF1ボタン
などがありますが、
英語で説明されていて、よく解らなかったりします^^;
そんな時は、Google検索などで
使い方を調べる旅にでることになります^^;
和訳MQLリファレンスがあったらいいなぁ・・・
と思っていましたが!!
ありました!
メタシス・シーカーのMQL言語リファレンスの日本語翻訳マニュアル
ほとんどの部分が翻訳されています^^
さらに、メタエディタで参照できるようにしたいと思い、
サイトオーナーのMIYAさんに翻訳部分を使わせていただけるようお願いしたところ
ゼロサムゲームの厳しい世界で、矛盾したことを言いますが、
システムトレードで人々に幸せを与えれるお手伝いになるのであれば歓迎です。
と、ありがたいお言葉を頂きました^^
メタエディタで和訳MQL言語リファレンスを参照できるようにする方法
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文で書いてもいいですね^^
その下のエグジット用のシグナルの条件では
サンプルではフィルタ用の条件は含めてませんが、
書き方としては、同じ感じですね^^
そのほかで、ちょっと分かりづらいところがありますが^^;
コメントで質問してくださいね^^;
でわ、このへんで^^
タグ
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
でわでわ^^


