i...mqlinvestmentlab.com2022.09.11改めて前回の内容をおさらいをしておくと、フィルポリシーとは、流動性が極端に低下する等の事情で、発注した量のロット数では約定できないときの対応方法のことである。FOKポリシーは発注した後、指定したロット数でのオーダーをサーバーが受け付けられないときは注文自体がキャンセルになる、というフィルポリシーである。IOCポリシーは、指定したロット数でのオーダーをサーバーが受け付けられないとき、約定可能なロット分だけ約定させ、残りはキャンセルとなるフィルポリシーである。RETURNポリシーは指定したロット数でのオーダーをサーバーが受け付けられないとき、約定可能なロット分だけ約定させ、残りの約定できなかったロット分も継続して注文処理を行うフィルポリシーである。どのフィルポリシーを選択すればよいのかは、執行方式によって変わる。フィルポリシーを指定しないと自動的にReturnポリシーを選択したことになる。market執行方式口座では、Returnポリシーは無効である。」エラーが発生し売買をしてくれないので、適切なフィルポリシーを選択できるようなコーディングをしてEA(自動売買プログラム)を作る必要がある。いうことをお伝えしました。ついて解説していきます。EAとは自動売買プログラムなわけですから、注文を出すプログラムコードをかければ、その時点で「EA(自動売買プログラム)を作れるようになった」とさえ言えるかもしれません。逆に言えば、今回解説していく部分を中途半端な理解で済ませてしまうと、損失ばかり膨らむ駄目EA(自動売買プログラム)さえ作ることができないということです。多くの方がMQL5を勉強していて、苦しんでいるのがこの部分なのではないか?と考えています。・MqlTradeResult構造体について解説しています。今回解説する内容を理解する為の前提知識に関するリンクも細かく張り巡らせているので、「聞いたことあるけどなんだっけ?」みたいなモヤモヤを抱かなくても済むような工夫を凝らして執筆しております。→待機注文のチケット番号を入力・設定する。→取引銘柄を設定する。→取引数量(ロット)を設定する。→オーダー種類を設定するORDER_TYPE_BUYは成行買い注文のことORDER_TYPE_SELLは成行売り注文のことORDER_TYPE_BUY_LIMITは買い指値注文のこと。ORDER_TYPE_SELL_LIMITは売り指値注文のこと。ORDER_TYPE_BUY_STOPは買い逆指値注文のこと。ORDER_TYPE_SELL_STOPは売り逆指値注文のこと。ORDER_TYPE_BUY_STOP_LIMITは買いのストップリミット待機注文のこと。ORDER_TYPE_SELL_STOP_LIMITは売りのストップリミット待機注文のこと。→フィルポリシーを設定するORDER_FILLING_FOK→FOKポリシーを設定するORDER_FILLING_IOC→IOCポリシーを設定するORDER_FILLING_RETURN→RETURNポリシーを設定する.type_time→注文の有効期限を設定するORDER_TIME_GTC→有効期限なしORDER_TIME_DAY→待機注注文が出された取引日中のみ有効ORDER_TIME_SPECIFIED→指定した特定の期限まで有効ORDER_TIME_SPECIFIED_DAY→指定した特定の期日の23:59まで有効.expiration→有効期限の時刻を設定する.comment→注文コメントを設定する.position→ポジション番号を設定するポジション番号とは?.position_by→close_by決済における反対ポジションのポジション番号を設定するまとめOrderSend関数についてMQL5でEA(自動売買プログラム)を作るにあたり、注文を出すには、OrderSend関数を使います。OrderSend関数の引数構成は以下のようになっています。MqlTradeResult構造体を渡します。MqlTradeResult構造体もMQL5側で事前に定義済みの構造体です。※MqlTradeResult構造体については、今回の記事では触れません。OrderSend関数の引数に構造体が設定されているという事は、構造体を理解していないと、注文さえままならないということです。構造体について「なんだったっけ?・・・」という方は↓の記事をご覧ください。Enum列挙型について解説しました。Enum列挙型は定数リストを格納できるデータ型...mqlinvestmentlab.com2022.07.01また、MqlTradeRequest構造体とMqlTradeResult構造体のところに&(アンパサンド)がついているのは、引数が参照渡しでOrderSend関数に渡される事を意味しています。※参照渡しについては覚えていますでしょうか?参照渡しの場合、関数に渡すのは元のデータのある場所(アドレス)です。これは渡した関数の処理によって、元のデータが変わる事を意味します。詳しくは↓の記事をご覧ください。値渡しは、関数の引数(パラメーター)に、値のコピーを渡す際の記述方法の種類である。値渡しの場合、データのコピーを渡しているので、関数内での処理がどのようなも...mqlinvestmentlab.com2022.08.06※併せて値渡しも確認したい場合は↓をご覧ください。OrderSend関数の引数は↓のようになっております。出典:MQL4公式リファレンスよりこれに比べると、MQL5の引数はった2つ。人によっては「4に比べて簡単そう(^^♪」そう思うかもしれません。!残念ながら、そんな単純な話でもありません。引数が大幅に変わっているのは、注文の概念自体もMQL4から変わっているからですそのあたりのことも、これから解説するMqlTradeRequest構造体の中で触れていきたいと思います。※MQL4のOrderSend関数は戻り値としてチケット番号を返しますが、MQL5のOrderSend関数の戻り値は「トレードサーバーの受入可否」です。trueだからと言って注文成功を意味しませんので注意しましょう。注文成功可否はあくまで次回解説するMqlTradeResult構造のリターンコードで確認します。コンパイル警告回避以外に受皿となるbool型の変数は用意した方がいい気がしますが、今のところ他に有効な利用方法は思いつきません。MqlTradeRequest構造体についてそもそも、MQL4におけるOrderSend関数は、新規にポジションを持つための要求をトレードサーバーにするだけの機能しかありません。MQL4において、ポジションの決済やSLTP修正、待機注文の削除などの要求はOrderClose,OrderClose,OrderModify,OrderDeleteなどの別の関数を使って行う必要がありました。サーバーへの要求を包括的に「注文」と捉え、MQL4では分散していたOrder~系の関数をOrderSend関数に集約させました。その代わりMqlTradeRequest構造体にて、サーバーへの要求内容を調整していくことになります。};OrderSend関数の引数は2つ。「2つなら簡単そう(^^♪♪」と一瞬思わせといてのこの所業です・・・。一瞬「うわっ」となりますが、よく見ればほとんどがMQL4でも扱っていた項目であることがわかります。一つ一つゆっくり見ていけば大丈夫です。詳細に触れる前に1点だけ。これも構造体を理解する事と同じ話ですが、MqlTradeRequest構造体のインスタンスを生成して、そのメンバを呼び出して値を埋め、その集積をOrderSend関数に一括で渡す形式ですから、インスタンスの仕組みも理解している必要があります。仮想関数とは、「派生クラスでは、継承した関数の処理内容を少し変えたい」「大まかな処理内容だけ元のクラスで決めて、細かい処理内容は、各派生クラスで決めたい」と...mqlinvestmentlab.com2022.09.02MqlTradeRequest構造体は、定義済み構造体につき、メンバの定義は不要です。OrderSend関数のようにの順番に気を配る必要はない反面、それゆえにコンパイルが通っても、入力漏れ等で、正常に売買しない事態が発生しやすいです。.actionは取引の種類を設定するのに利用します。.actionにて、それを設定します。.actionへの値の入力は必須です。データ型の種類は、ENUM_TRADE_REQUEST_ACTIONSです。定義済みのEnum列挙型ですね。多次元配列について解説しました。配列が複数連なったものである。多次元配列はデータを表形式に整理・利用できる。多次元配列は4次元まで作ることができる。多次元配列において...mqlinvestmentlab.com2022.07.01ちょっと面倒くさいですが、ENUM_TRADE_REQUEST_ACTIONS列挙の定数値を見ていきましょう。.actionに設定する定数値です。.actionに設定する定数値としては一番使われるものになるでしょう。※、公式リファレンスにはTRADE_ACTION_DEALのサンプルコードがあり、これを利用することで、メンバ変数の埋め方などの参考にすることができます。・・・が!現在、実はこれをそのまま実行してもMarket執行方式口座だと売買されません。フィルポリシーが記述されていない為です。自身で適切なフィルポリシーを記述する必要があります。第62回「実際に注文を出すコードを書いてみる」も参考にして頂ければと思います。.actionに設定する定数値です。※待機注文というのは、成行注文のようにマーケットの現在値でポジションを持つのではなく、特定の価格に到達したらポジションを持つような要求をトレードサーバーにする注文方式です。以下の講座記事を参考にして頂ければと思います。.actionに設定する定数値です。.actionに設定する定数値です。注意したいのが、先述したTRADE_ACTION_SLTPとの違いです。TRADE_ACTION_SLTPはすでに保有しているポジションに対してのSLTP変更をしたい時に使うのに対して、TRADE_ACTION_MODIFYは、注文は出したものの、まだ指値価格に到達しておらず、ポジション保有に至っていない待機注文の変更をしたい時に使うものです。第66回「待機注文の注文修正」を参考にして頂ければと思います。.actionに設定する定数値です。この後解説する.orderだけです。↓の動画は公式リファレンスにあるTRADE_ACTION_REMOVEのサンプルコードをそのままコンパイルして、待機注文がある状態のデモ口座に適用した様子です。待機注文が削除されているのがお分かりいただけたかと思います。第67回「待機注文の削除」でもTRADE_ACTION_REMOVEを使った待機注文削除について解説しているので、参考にして頂ければと思います。.actionに設定する定数値です。MQL5になってから追加された新機能です。反対方向にポジションを保有する事ができないネッティングシステム口座では使いません。↓の動画は公式リファレンスのCLOSEBYサンプルコードを拝借して、その挙動を試したものです。BuyとSellが同時に決済されているのがわかります。int型と同じく整数型ではありますが、負の値は保有することができず、正の方向にint型より大きな値を所持できるデータ型です。詳しくは↓の記事をご覧ください。使うんだ、ということを説明しました。整数型の変数を作るには最初に「int」と書いて、その後半角スペースを1個以上入れて、変数名を入力し、最後...mqlinvestmentlab.com2022.06.18マジックナンバーとは?マジックナンバーとはEA(自動売買プログラム)固有の識別番号です。1つのメタトレーダー5(MT5)で複数のEA(自動売買プログラム)を運用する時、保有しているポジションやオーダーがどのEA(自動売買プログラム)に由来するものかをえり分けるための番号となります。.magicへのマジックナンバー記述は必須ではありません。1つのメタトレーダー5(MT5)で複数のEA(自動売買プログラム)を運用する時は、誤動作を招く可能性があるため設定する必要があります。↓の動画は、.magic部分を最初はコメントアウトし、注文→その後コメントアウトを削除して再度注文を出しなおしたものです。.magicをコメントアウトして無効化しても注文自体はできていますね。※マジックナンバーはinput変数でパラメータ化しておくと便利です。input変数については↓の記事をご覧ください。タイプキャスト(型変換)について解説しました。タイプキャスト(型変換)とはあるデータ型の値を、異なるデータ型に変換するプロセスのことである。→待機注文のチケット番号を入力・設定する。待機注文のオーダー番号を入力・設定するのに使います。オーダー番号は、待機注文のSLTP等を修正したり、待機注文自体を削除したりするときに使います。.actionで指定した取引種類がTRADE_ACTION_MODIFY(待機注文内容を修正する)またはTRADE_ACTION_REMOVE(待機注文を削除する)の時は入力が必須になります。オーダー番号とは?オーダー番号とは、注文ごとに与えられる認識番号です。「どの注文に対して、指定した処理を施すのか?」を選り分ける為に使われます。ORDER_TICKETを設定するなどの方法で取得します。.positionの項で解説予定のポジション番号との違いには注意が必要です。OrderGetTicket関数は、特定のインデックスに対応する待機注文のオーダー番号を取得するために使用されます。5(MT5)プラットフォームで取引注文の特定の整数型情報を取得するために使用されます。→取引銘柄を設定する。取引銘柄を設定する時に使います。ユーロドルに対して処理を実施したいのであれば、”EURUSD”のように記述します。EA(自動売買プログラム)をチャートに挿入した銘柄に対して処理を実施したいのであれば、定義済み変数の_Symbolを使います。.symbolへの値入力は必須です。static変数とは、中で変数宣言をした関数が処理を終えても、変数の値の記憶を保つことができるローカル変数のことである。→取引数量(ロット)を設定する。取引数量(ロット)を設定する時に使います。.Volumeへの値入力は必須です。ポジションを保有する価格の設定をする時に使います。成行注文の時は現在のAsk値(買い注文の時)、かBid値(売り注文の時)しか指定できません。.Priceへの入力は必須ではありません。待機注文の時は、現在値より上か下の価格を、自分の希望で決めて入力します。※待機注文時、ストップレベルに抵触しないようにする必要はあります。ストップレベルについては講座記事78回、79回、80回で解説予定なので、もうしばらくお待ちください。ここまでの説明を言い換えれば、Market執行方式か、Exchange執行方式以外の執行方式における成行注文(=TRADE_ACTION_DEAL)TRADE_ACTION_PENDINGTRADE_ACTION_MODIFYの時は、.Priceへの入力は必須ということです。ネッティングシステムは、1つの取引銘柄にたいして1ポジションしか保有することができまない(両建てができない)。.stoplimitはstoplimit待機注文のリミット価格を設定する時に使います。stoplimit待機注文はMQL5から追加された注文方式でストップとリミットを両方設定します。ブレイクアウト後少し戻すことを想定した待機注文です。現在値の500ポイント上に逆指値注文(Stop注文)を入れ、もし逆指値注文(Stop注文)に到達したら、現在値の300ポイント下に指値注文(Limit注文)でポジションをとるようなスクリプトの挙動です。.stoplimitには指値注文(Limit注文)を入れます。.stoplimitに入れた指値注文(Limit注文)を有効化させるためのトリガーになっています。limit→buylimitに変わります。ORDER_TYPE_BUY_STOP_LIMITかORDER_TYPE_SELL_STOP_LIMITが入ります。.stoplimitへの値入力は必須です。ストップロス(損切り価格)を設定する時に使います。第58回「成行注文と執行方式について」でも書いたことですが、MQL5を学習した時期によっては、「market執行方式においては発注時にストップロスとテイクプロフィットの設定はできない」という認識の人もいるかもしれませんが、現在はmarket執行方式でも成行注文時、ストップロスとテイクプロフィットの設定はできます。.tpは、テイクプロフィット(利益確定価格)を設定する時に使います。.tpへの値入力は必須です。スリッページを設定する時に使います。※スリッページとは、発注後に激しく価格が変動した局面において、現在値と発注前のレートとの乖離がどれくらいまでなら取引を許容するか、という設定値です。オーダー種類を設定する時に使います。ENUM_ORDER_TYPEの定数値は以下の通りです。出典:MQL5リファレンスORDER_TYPE_BUYは成行買い注文のことORDER_TYPE_BUYは成行買い注文のことです。現在のAsk値でポジションを持つよう要求します。TRADE_ACTION_DEALが入ります。.Priceには現在のAsk値を入れます。Ask値の取得にはSymbolInfoDouble関数を使います。発注価格ORDER_TYPE_SELLは成行売り注文のことORDER_TYPE_SELLは成行売り注文のことです。現在のBid値でポジションを持つよう要求します。TRADE_ACTION_DEALが入ります。.Priceには現在のBid値を入れます。Bid値の取得にはSymbolInfoDouble関数を使います。発注価格ORDER_TYPE_BUY_LIMITは買い指値注文のこと。ORDER_TYPE_BUY_LIMITは買い指値注文のことです。現在値よりも有利な価格(=安く)でポジションを持つよう要求します。TRADE_ACTION_PENDINGが入ります。.Priceには希望する価格が格納されるよう記述します。発注価格ORDER_TYPE_SELL_LIMITは売り指値注文のこと。ORDER_TYPE_SELL_LIMITは売り指値注文のことです。現在値よりも有利な価格(=高く)でポジションを持つよう要求します。TRADE_ACTION_PENDINGが入ります。.Priceには希望する価格が格納されるよう記述します。発注価格ORDER_TYPE_BUY_STOPは買い逆指値注文のこと。ORDER_TYPE_BUY_STOPは買い逆指値注文のことです。現在値よりも不利な価格(=高く)でポジションを持つよう要求します。※逆指値注文は、指定した価格の方向へ、そのままトレンドが形成されることを想定した注文方法になります。TRADE_ACTION_PENDINGが入ります。.Priceには希望する価格が格納されるよう記述します。発注価格ORDER_TYPE_SELL_STOPは売り逆指値注文のこと。ORDER_TYPE_SELL_STOPは売り逆指値注文のことです。現在値よりも不利な価格(=安く)でポジションを持つよう要求します。TRADE_ACTION_PENDINGが入ります。.Priceには希望する価格が格納されるよう記述します。発注価格ORDER_TYPE_BUY_STOP_LIMITは買いのストップリミット待機注文のこと。ORDER_TYPE_BUY_STOP_LIMITは買いのストップリミット待機注文のことです。.stoplimitの項で説明をしました。価格がブレイクアウトした後、長期的にはブレイクアウトした方向に向かうが、若干押し目をつくるという想定をしている時に利用する注文方法になります。TRADE_ACTION_PENDINGが入ります。.Priceには希望するストップ注文価格が格納されるよう記述します。この価格でポジションを保有する訳ではないので注意しましょう。.stoplimitには希望するリミット価格が格納されるよう記述します。この価格でポジションを保有します。.Priceに格納されている価格に到達する事がトリガーとなって、.stoplimitに格納されている価格のリミット買い注文が発動するイメージです。リミット注文価格ORDER_TYPE_SELL_STOP_LIMITは売りのストップリミット待機注文のこと。ORDER_TYPE_SELL_STOP_LIMITは売りのストップリミット待機注文のことです。.stoplimitには希望するリミット価格、をそれぞれ入力します。.actionの定数値TRADE_ACTION_CLOSEBYの項でも出てきました。詳しくはそちらを参照してください。この定数値を入力していなくても現状CLOSE_BY注文は成立するのでは?というのが現時点での、私の理解です。なにぶんORDER_TYPE_CLOSE_BYについては公式リファレンスも含めて、ほとんど情報がない為、今後も検証・注視していきたいと思います。.positionと.position_byについてはこの後解説をします。フィルポリシーを設定する時に使います。フィルポリシーとは、流動性が極端に低下する等の事情で、発注した量のロット数では約定できないときの対応方法を指します。