MT4/MQL4
MT4でMTF分析(マルチタイムフレーム分析)をする時、以下の5チャートを開いてから「ウィンドウの整列」ボタンを押して並び変えるのですが、これが手間なのでスクリプトで行うことにしました。 ・5分足チャート ・15分足チャート ・1時間足チャート ・4時間…
時々、最後に開いたチャートのIDを調べることがあるので、関数にしました(めっちゃ短い関数ですが)。 この記事からコピペして使おうかと^^;。 // 最後に開いたチャートのチャートIDを返す関数 long LastChartID() { long lastChart = 0; long nextChart = …
MT4の水平線ボタンを使用して水平線を作成した場合、横方向に延長されて(チャートの端から端まで)描画されます。しかし、延長して描画したくない場合もあります。 そこで、トレンドラインを水平線代わりに使用することにしました。トレンドラインなら、ラ…
任意の足のvolume値が、過去N本のvolume値の上位 X番目までにランクインしているか調べる関数を書いてみました。ただ、これは依頼されて作った関数なので、私は使用していません^^;。(関数のコードは本記事の末尾にあります) 関数が行っていること a本目の…
EAのバックテストをするために自分が使用している業者のヒストリカルデータをインポートしたのですが、手順を忘れてしまいそうなので、メモ代わりに作業内容を残しておくことにしました。 通常は1分足のヒストリカルデータが配布されていると思うので、それ…
MQL4でチャートにインディケーターを配置する関数を作るにはどうしたら良いか調べたところ、以下のページを見つけました。 【ネタ元 Source URL】 https://www.mql5.com/en/forum/73391 https://www.forexfactory.com/thread/981735-issues-with-postmessage…
使うインディケーターによっては、ロンドンやNYがサマータイム期間かどうかで制御を変える場合があるので、各市場がサマータイム期間なのか調べる関数を書いてみました。 サマータイムの開始日時と終了日時 ■ロンドン 開始日時は 3月最終日曜日 UTC 1:00 終…
やっていることは大したことないのですが、たまに他のチャートの情報を取ってくることがあるので、開いているチャートの数に応じた動作をするスクリプトをブログに貼り付けておくことにしました。(ここからコピペして使おうと思います)。 以下のコードは開…
以前はたまにしかMTF(MultiTimeFrame)の移動平均線をチャートに表示していなかったので、必要になったら、その都度、移動平均線を描画するインディケーターを作っていました。 しかし、最近MTFの移動平均線をチャートに入れてあれこれ調べることが増えまし…
【追記】 初めてこの記事をアップした当時はロンドンやニューヨークがサマータイム期間かどうかをパラメーターで指定する仕様になっていましたが、その後、サマータイム期間かどうかを調べる関数を作成したので、このインディケーターにもその関数を組み込み…
タイトル通りの疑問が浮かんだので実験してみました。 必要に応じて配列の要素数を増やそうと思っているのですが、ArrayResizeで配列の要素数を増加させた場合、それ以前に存在した要素の値に影響があるのか調べました。 実験に使用したスクリプト #property…
タイトル通りのコードです。ラウンドナンバーになっている価格に水平線を描画します。MQLの勉強も兼ねて書いてみました。 チャート・リーディングをする時にどのラウンドナンバーが意識されているか調べることが主な使用目的です。 使い方 基本的にはデフォ…
[追記:2020/08/07] C言語での実験結果(for文中のcontinue)を本記事末尾に追記しました。 今更ながら初歩的なことを確認してみました。 MQLのcontinueの挙動です。 for文の中でcontinueを使った場合、continueより後ろに続くコードは処理されずfor文の先頭…
この記事は、先日の記事(2020年7月14日)に載せた修正版eVLDMI関数を前提にして書いています。 MT4用のインディケーター等を作成する場合、値の計算に必要なローソク足の本数を予め除外しますよね。たとえば、以下のコードにおける counted_bars をイメージ…
MT4用のインディケーター等を作っていると、特定の機能のONとOFFを切り替えたい場面があると思います。これをパラメーターに反映する時、今まではbool型を使って true または false を選ぶようにしていました。 しかし、自分以外の人が使うインディケーター…
この記事では、チャート画面のスクリーンショットを撮る自作関数のコードにコメントを書き加えたものを掲載しています。 なお、スクリーンショットは、自分のトレードを振り返る時に使っています。 3つの引数 第1引数と第2引数は、スクリーンショット画像の…
MQL4のヘルプで float型の最大値を調べると 3.402823466e+38 と書かれています。最初、この表記を見た時、意味が分かりませんでした。 ネットで調べた情報に基づいて解釈すると、「3.402823466e+38」は 3.402823466 × 10の38乗 のようです。 わざと冗長に書…
前回の記事で行った実験から、MQL4の判定文について、C言語と同様に0以外は「真」として扱われることが分かりました。 そこで、0が「偽」として扱われることをfor文に利用できるか実験してみました。 for文の実験結果 void OnStart(){ for(int i = 3; i; i--…
MQLの勉強に役立つので、CやC++の本をたまに寝っ転がって読んでいます。Cの本を読んでいたら、if文やfor文の判定条件について、0以外は「真」として扱われるという記述がありました。 そこで、MQL4でも同じ仕様になっているのかScriptを使って調べてみました…
計算結果をファイルに出力して検証したかったので、CSVファイルを出力する方法を調べました。FileOpen関数、FileWrite関数、FileClose関数を使います。 この記事内のコードで使われているeVLDMI関数 このブログの過去記事にもeVLDMI関数が登場しますが、それ…
MQL4に関するネット上の記事を読んでいたら、ラベルオブジェクト内のテキストは改行できないと書かれていました。 では、テキストオブジェクトの中では改行ができるのだろうかという疑問が浮かび、以下のコードで実験してみました。 int x, y; datetime uhoT…
追記:2020年7月14日の記事に修正版eVLDMI関数を記載しています。 (1)VLDMIの計算式 FXなどで使われるVLDMIというテクニカル指標をコード化してみたくて計算式を探したのですが、ネット上にはVLDMIの計算式について情報が余りありませんでした。 どうにか見…
MetaEditorでMQLコードを書いている時に調べたい単語の上でF1キーを押すとヘルプが表示されますよね。それと同じことをMeryでもできるようにしたいと思います。 (1)hhh.exeをダウンロードする 以下のサイトから hhh.exe というファイルをダウンロードします…
今回はMeryでMQL4の入力補完をする方法を書いてみます。 入力補完ってどんなもの? 入力補完がどんなものか簡単に説明します。たとえば、SetIndexBufferという単語を入力しようとしているとします。SetIndeまで入力した時点でCTRL + SPACE を押すと、SetInde…
MeryでMQL4を書くことにしたものの、快適に作業するためにまずは下準備から始めました。自分がやったことは以下のことです(^^)。 MQL4特有のワード(関数など)に色付けする 途中まで入力したワードを補完できるようにする(例: iOp と入力した時点で特定の…
MQL4を学び始めてから一つ困っていることがあります。それはMT4の標準エディタであるMetaEditorの編集機能が貧弱なことです。 もちろんMetaEditorにも良い所はあります。たとえば、 画面上部のボタンですぐにコンパイルできる。 予約語を途中まで入力すると…