全決済ボタンのEAに売りボタンと買いボタンを追加する



前回の「全決済ボタンのEAに通貨ペアとマジックナンバーの処理を追加する」で説明した全決済ボタンのEAに、売りボタンと買いボタンをつけてみます。

売り注文や買い注文は、MT4の標準機能で出来るので、ボタンを作る意味はあまりなさそうですが、自動売買のEAを作る時の参考にもなるので説明しようと思います。

 

売りボタンと買いボタンを配置する

OnInit()に売りボタンと買いボタンを配置するためのコードを追加します。

15行目から25行目までが売りボタンのコードです。

基本的には全決済のボタンと同じです。オブジェクト名(btnSell)とボタンの表示テキスト(売り)とボタンの位置の3か所を変えているだけです。

27行目から37行目までが買いボタンのコードです。

こちらも、全決済ボタンとの違いは、オブジェクト名(btnBuy)とボタンの表示テキスト(買い)とボタンの位置の3か所を変えているだけです。

 


ボタンの削除処理

OnDeinit(const int reason)にボタンを削除するコードを書きます。

「ObjectDelete()」はオブジェクトを削除する関数です。引数にオブジェクト名を指定します。ここでボタンの削除処理をしないとEAを削除した時にチャート上にボタンが残ってしまいます。

 


パラメータを追加する

ロット、ストップ、リミットのパラメーターを追加して、EAをセットするときに設定できるようにします。

マジックナンバーのコードの下にロット、ストップ、リミットのパラメーターを追加するためのコードを書きます。

ストップとリミットはポイント単位の入力にして、現在価格から入力した数値分、離れたところにストップとリミットを入れるようにします。0を入力するとストップまたはリミットは設定なしにします。

 


売りボタンの処理を追加する

OnChartEventに売りボタンの処理を追加します。

35行目から51行目までが追加した売りボタン用のコードです。

35行目 売りボタンが押されたかを判断しています。売りボタンが押された時にif文の中の処理をします。

37行目 ストップ用の変数の宣言で、初期値に0を入れています。

38行目 リミット用の変数の宣言で、初期値に0を入れています。

39行目 Stop(追加したパラメーター)が0以外の時に、if文の中に進みストップの価格を計算するようにしています。0の時はStopPriceは初期値の0のままになります。

41行目 ストップの価格を計算してStopPriceに代入しています。「Bid」は現在の売り価格で、「Point」はEAをセットしたチャートの通貨ペアの最小単位を取得することが出来ます。
Stopはポイント単位なので価格の単位に変更(Stop * Point)して、現在の売り価格(Bid)を足しています。

43行目から46行目はリミットの価格を取得する処理でストップの説明とほとんど同じです。リミットなので、Limitを価格の単位に変更(Limit * Point)して現在の売り価格(Bid)から引いています。

47行目 OrderSendが注文を出すための関数です。引数は左から通貨ペア、注文の種類、ロット、価格、スリッページ、ストップ、リミット、コメント、マジックナンバー、オーダーの有効期限、矢印の色です。

1つ目の引数は、Symbol()でEAにセットしたチャートの通貨ペアを指定しています。
2つ目の引数は、OP_SELLで売り注文を選択しています。
3つ目の引数は、Lots(追加したパラメーター)を指定しています。
4つ目の引数は、売り注文なので現在の売り価格(Bid)を指定しています。
5つ目の引数は、スリッページでポイント単位で指定します。
6つ目の引数は、StopPrice(計算したストップの価格)を指定します。ここを0にするとストップの設定がなしになります。
7つ目の引数は、LimitPrice(計算したリミットの価格)を指定します。ここを0にするとリミットの設定がなしになります。
8つ目の引数は、コメントで使わない場合はNULLを指定します。使う場合は文字列で半角31文字以内で指定します。※半角31文字を超えると空になるようです。
9つ目の引数は、MagicNumber(パラメーター)を指定しています。

 


買いボタンの処理を追加する

OnChartEventに買いボタンの処理を追加します。

53行目から69行目までが追加したコードです。

売りボタンの説明とほとんど同じなので違っているところだけ説明します。

53行目 買いボタンが押されたかを判断しています。

59行目 Stopを価格の単位に変更して、現在の買い価格(Ask)から引いています。

63行目 Limitを価格の単位に変更して、現在の買い価格(Ask)に足しています。

65行目 2つ目の引数をOP_BUYにして買い注文を選択しています。4つ目の引数は買い注文なので、買い価格(Ask)を指定しています。

 


全コード

このコードをコピーして貼り付けてコンパイルすると使うことが出来ますが、エラー処理などを一切していない、あくまでも説明するためのサンプルコードです。

 

※このサンプルコードは、EAが使えない口座では使うことが出来ません。

当サイトに掲載している情報やサンプルコードを利用した結果によって生じるいかなる損害、損失について当サイトは一切の責任を負いません。サンプルコードにはバグなどがある可能性もあります。当サイトの情報やサンプルコードの利用は、自己責任でお願いします。


おすすめ記事

リアル口座のトレード収支結果です。   EA名:KonohaUSDJPY 通貨ペア:USDJPY 使用FX業者:OANDA JAPAN(東京サーバー) バージョン:1.00 パラメーター:すべて初期値 約定日時…

EAの長期間のバックテストをするにはMT4にヒストリカルデータを入れる必要があります。 今回は、一番簡単にできるMetaQuotes社のヒストリカルデータの入れ方と、FXDDのヒストリカルデータをダウンロードしてインポー…

関連記事

今回は、マジックナンバー別の口座履歴をcsvファイルに出力させるスクリプトの作り方を説明します。   目次 スクリプトのテンプレートの作り方口座履歴を出力するスクリプトの作り方今回説明するスクリプトの仕様ファイ…

MT4の標準機能では、複数のボジションを一度に全部決済することが出来ないようです。ないものは作れば良いというのがMT4の最大の特徴ではないでしょうか? 今回は、チャート上にボタンを配置して、そのボタンを押すと保有している…

今回も前回の続きです。 前回の「全決済ボタンのEAに売りボタンと買いボタンを追加する」で説明したEAはコンパイルすると警告メッセージが5つ出ています。この警告メッセージをなくすのと、簡単なエラー処理を追加してみます。 &…

今回は、EAにボタン、テキストボックス、ラベルの配置方法と使い方を説明します。   目次 ボタンの配置方法テキストボックスの配置方法ラベルの配置方法オブジェクトの削除ボタン、テキストボックス、ラベルの使い方全コ…

MT4にはMQLと言うプログラム言語が装備されていて、それを扱うためのメタエディターが付属しています。このメタエディター使うことで自動売買に必要なEAやインジケーター、スクリプトなども作ることが出来ます。 目次 メタエデ…