MT4 チャート上にボタンを作る、シダの葉を作る、動画を作る

(MQL4)MT4のチャート上にボタンを作るやり方[EA自作]

現在のMT4は比較的いろいろな機能が追加されていて、DLLや拡張ファイルを使わずに、EA単体でボタンやフォームを作ることが可能です。

昔はオブジェクト表示の専用のdllとかが必要で、高額で販売されていたんですけどね~(それだけをやっている会社とかあったんですけど、どうなったことやら…)

 

MT4のチャートのボタン

ボタンをただ表示するだけでなく、
「ボタンを押したら××を実行する」
などのようなインタラクティブな機能を実装することができます。

ボタン操作は、OnChartEvent内に記述します。

逆に言うとこれまでスルーされていたOnChartEventの唯一と言っても過言ではない出番です。

OnChartEventはティック更新のイベントとは別で、チャート内でイベントが発生した際に呼び出されます。

ボタンは、
色、大きさ、文字、位置など
すべて自由に変更できます。

また、複数のオブジェクト(ボタン)同時に表示させることもできるので、
EAを稼働させつつ、裁量トレードボタンを表示する、
なんていうことも可能になります。

bandicam-2016-12-28-15-47-06-958

オブジェクトの操作は、作る作業と設定する作業に分かれます。

オブジェクトを作る

これはラベルや矢印やテキストと同じなので問題ないと思います。OBJ_BUTTONを指定するだけです。

(現在のチャートにbuttonIDという名前のオブジェクトを作る。オブジェクトの種類はボタン)

オブジェクトのプロパティを設定する

ってな感じで一個一個関数を呼び出して設定する必要があります。めんどくさいですね。しかし、これも他のオブジェクトと同じなので特に引っ掛かる要素はないと思います。

 

ボタンが押されている状態

id, lparam, dparam, sparamはOnChartEvent上で使える変数です。

ObjectGetInteger(0,buttonID,OBJPROP_STATE)でボタンの状態を取得することができます。押されている場合はif文の中で処理を書けばOkです。

 

 

押したボタンを押してない状態にするには

ボタンが押されているかどうかを判定するにはOnChartEvent内で記述を行います。

先に言っておくと、MQLでのボタンの挙動は押すと勝手に押してない状態に戻る訳ではなく、

「”押された状態”から”押されていない状態”に戻す記述」が必要です。

(ちょっとややこしくなってきましたね。)

つまり、そもそもボタンというものには

押された場合に”押された状態”を維持し続けるタイプのボタンと

押されたら押されていない状態に勝手に戻るボタン

の二種類があるという前提があります。

MQLでは後者がデフォルトになっているので、

押したら”押されていない状態”に戻るボタンを作るには、押されたら1秒後に押されていない状態に勝手に戻る記述を別途しなくてはなりません。

ObjectGetInteger(0,buttonID,OBJPROP_STATE)がtrueの時がボタンが押されている状態です。

 

ボタンが押されていない状態に戻す

これでオブジェクトの状態を元に戻せます。ボタンが押されてすぐにこの状態に戻してしまうと、押されたかどうかユーザーが分からないくらいすぐに戻ってしまうので、少し時間をおいてから(0.5秒とか1秒とか)、ボタンの状態を戻すのが良いと思います。

 

応用版:外部ソフトなしでチャート上に操作パネルを表示する

 

[Q&A]チャート上に複数のボタンオブジェクトを設置して…(MQL4)

Q.

ラベルの上に複数のボタンオブジェクトを設置して、ラベルを選択状態にして、ドラックしたら上に乗っているオブジェクトも移動するようなことは可能でしょうか

A.

チャートオブジェクトの関数群を使えば可能だと思います。build610以降のMT4ではオブジェクト関数群が追加されているので、従来と比較して簡単に実装することができます。

ただ、ちょっと気になることとして、ドラッグというのが ”マウスの左クリックを押し続けた状態で、マウスカーソルを移動させること”を意味していると思うのですが、これはUIを変えた方がよさそうな雰囲気はしています。

 

最近のITの世界ではリアルタイムGUIによる操作が標準になりつつありますが、MQL4はそもそもCをベースにした低級言語のため、GUIにはあまり向いていないという性質があります。

そのため、ちょっと古臭いUI(入力ボックスと)決定ボタンのようなUIにした方がいいんじゃないかな~とは思います。

 

ただ、グラフィカルオブジェクトをいじるということはMQL4の経験がそこそこある方だと思いますので、ドキュメントがあればなんとかなると思います。

 

チャートイベントに関するドキュメントはこちら

https://docs.mql4.com/eventfunctions/eventchartcustom

 

チャート上にシダの葉を出力する(理工系あるある)

今回のフラクタルはインジケーターとしてのフラクタルではなく、理工系で使われるフラクタルの話です。

 

トレードの世界のフラクタルしか知らない人にとっては、フラクタルがそもそも何なのかというところから入るべきですが、要するに自己相似形のことを指します。図で見るとわかりやすいです。

forex-mt4-mt5-ea

リアス式海岸とか、カリフラワーとかシダの葉っぱとかそういうやつです。

相場もフラクタルなところがあって、どの時間枠で見ても同じような形になることがあります。

 

話は変わりますが、筆者が大学に入りたてのときにコンピュータサイエンスの授業がありました。

講義が始まるまでは、てっきりパソコンの基本的な使い方から入るような ”下のレベルの人に合わせた内容”かな、と予想していたのですが、

初日の課題が「じゃあ、TeXでアフィン変換を使ってフラクタルの例としてシダの葉っぱを出力してください」というものでした。

 

当時はできなかったんですよね、これが。友達に手伝ってもらって何とか提出しました。そもそもTeXを触ったことがなかったんですよね。

 

という訳で、今回はたまたまシダの葉っぱを出力するというコラムを見つけたので、乗っかってみようと思います。

 

最終結果は下記のような感じです。

forex-mt4-mt5-ea

こちらのmqhファイルのインクルードが必要です。

 

だから何だと言われると、別にこれ以上のことはありません。

これでチャートのフラクタルの分析ができる訳でもなければ、カオスの判定ができる訳でもありません。

 

(MQL4)MT4チャート上で動画を表示するやり方[EA自作]

MT4にはチャート上に画像を表示させる機能があります。
しかし、動画を表示させる機能はありません。

今回は無理やりMT4のチャート上にルーレットを表示し、
そのルーレットを回転させてみます。

アイディアは簡単で、
中心から1度ずつずらした画像を360枚用意し、
それぞれの画像をコマ送りで表示させるだけです。

チャートに表示させる画像のファイル形式はbmpだけなので、
jpg, png, gifの場合は、bmpに変換が必要です。

bmpということは、透明化も無効なので、
ルーレットだけが動いているように見せるには、

ルーレットの背景と、チャートの背景を同色にする必要があります。

今回は、たまたま拾った画像の背景が白だったので、
白背景に統一しました。

360枚の画像を用意する途中で、
数十枚で試したところ、360枚なくても回って見えることが判明したので、
今回は36枚で妥協しました。

画像の保存先は、
データフォルダ¥MQL4¥Images
の中です。

bandicam-2016-12-28-15-37-50-426

画像を何度も呼び出すのは面倒なので、
連番の名前にし、for文で呼び出します。

bandicam-2016-12-28-15-25-20-547

パソコン上で見ると、比較的きれいに回っていたのですが、
gifにする際にコマ割りのタイミングの関係で

少しイビツになってしまいました。

現在のMT4では標準でボタンを設置したりすることもできるので、
これを応用すれば、

チャート上で疑似カジノなんかを作ることも不可能ではないですね。

 

 

チャート上にバイナリーオプションのようなボタンパネルを作ってみた

注:これは、MT4のチャート上でバイナリーオプションのような操作パネルを表示させているだけで、実際にバイナリーオプションそのものができる訳ではありません。

以前の記事で、チャート上にボタンを表示するというテーマを扱いました。

今回は、その応用編のサンプルとして、
チャート上に操作パネルを表示しました。

完成版は、
bandicam-2016-12-28-15-54-28-991

こんな感じです。

プットボタン、コールボタン
ロット変更ボタン
時間設定ボタン
を作成しました。

指定時間後に勝手に決済します。

コーディングした当初はOnTimerがありませんでしたが、今はあるので、OnTickではなくOnTimerに書き換えた方が良いかもしれません。

 

(トレードを実行するので、インジケーターではなく、EAです。)

このファイル単体で稼働します。

 

EAのダウンロード

ソースコードのダウンロード

 

この投稿は役に立ちましたか? 役に立った 役に立たなかった 13 人中 12 人がこの 投稿 は役に立ったと言っています。
 

コメント

  1. 山崎 より:

    ボタンスイッチすごく重宝しています
    しかしスイッチを複数同時に表示させる方法がどうしてもわからなく
    初めてメールさせていただきました

    お手数だとは思いますがどのように作ればいいのか教えてはいただけないでしょうか?
    よろしくお願いします

  2. 管理人 より:

    ボタンオブジェクトはオブジェクトの名前でそれぞれ区別することができます。
    http://fxantenna.com/post-1417/
    を例にすると、
    BUYボタン、SELLボタン、△、▽、各種時間足ボタンがありますが、
    それぞれ名前と座標を変えれば別物として扱えます。


    CreateButton("▲ CALL/BUY",200,70,30*1,30*10,clrRed,20);
    CreateButton("▼ PUT/SELL",200,70,30*1,30*6,clrBlue,20);

    CreateButton("1min", 40,20,20, 30*1+10,clrNavy,8);
    CreateButton("3min", 40,20,20+45*1,30*1+10,clrNavy,8);
    CreateButton("5min", 40,20,20+45*2,30*1+10,clrNavy,8);
    CreateButton("10min",40,20,20+45*3,30*1+10,clrNavy,8);
    CreateButton("60min",40,20,20+45*4,30*1+10,clrNavy,8);

    CreateButton("▲",15,15,110,80,clrNavy,5);
    CreateButton("▼",15,15,110,64,clrNavy,5);
    //CreateButtonはオリジナル関数

    あとはOnChartEvent内で

    if(id==CHARTEVENT_OBJECT_CLICK)
    {
    if(clickedChartObject==IntegerToString(30*1,3)+IntegerToString(30*10,3))
    {
    selected=ObjectGetInteger(ChartID(),IntegerToString(30*1,3)+IntegerToString(30*10,3),OBJPROP_STATE);
    if(selected)
    {
    //ボタン(BUY)が押された時の処理
    }
    }
    if(clickedChartObject==IntegerToString(30*1,3)+IntegerToString(30*6,3))
    {
    selected=ObjectGetInteger(ChartID(),IntegerToString(30*1,3)+IntegerToString(30*6,3),OBJPROP_STATE);
    if(selected)
    {
    //ボタン(SELL)が押された時の処理
    }
    }

    のときのようにifで分けて処理すればOKです。

  3. シホウ より:

    横瀬 様
    お世話になります。シホウと申します。
    ボタンを元に戻す記事が大変参考になりました。

    ここで、もう一つご教授頂ければ有難く存じます。

    市販のあるIndicator(MT4)で、ユーザーに操作ボタンがあります。そのボタンのクリック操作をEAに取り込みたい。ボタンのObjectNameやPropertiesなどの取得はできていますが、力不足でそのボタンに対してEAコードでクリックや押下といった操作の実現はできておりません。

    何かヒントを教えていただけないでしょうか?

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

入門者のEA自作のための作り方講座(MQL4/MT4)

プログラミング初心者の方が初めてでもEAを開発できるように解説したページです。このページの内容をマス

記事を読む

[MT4]EAに口座縛り/期間限定縛りをかける種類と方法(MT5)

良いEAができた場合、身内で配布したい場合があります。しかし、知らない間に自分のEAが出回っていた場

記事を読む

とある両建てロジックのEA検証(コードあり)

今回はちょっとしたシンプルな実験を行います。 お題は両建てです。 ポジションが0の場合SLTP付

記事を読む

(MQL4)インジケーターをEA化するやり方[EA自作]

iCustomでZigZagをEA化する(初歩編) インジケーターとiCustom 今回はインジ

記事を読む

短いコードでも右肩上がりのグラフにできることの証明(MT4EA)非実用

バックテスト結果   ソースコードはこちら 33行あるやんけ...

記事を読む

 

上に戻る