成行注文を閉じるときは、現在の市場価格で取引を終了します。これは、買い注文の場合は現在のビッド価格、売り注文の場合は現在のアスク価格になります。 この完全な MQL4 OrderClose 関数の記事で、終了条件が満たされたときにオープン注文をクローズするように EA をプログラムする方法を学びましょう。
成行注文を閉じるために使用されるコードは OrderClose() 関数で、その構文は次のとおりです。
bool OrderClose (int Ticket、double Lots、double Price、int Slippage、color Arrow);
次の表でそれぞれについて説明します。これらのパラメータのうち 1 つ:
範囲 | 説明 |
---|---|
Ticket | ポジションを決済するための成行注文のチケット番号 |
Lots | 閉店予定のロット。 |
Price | 取引を成立させるための優先価格。 |
Slippage | 終値の許容スプレッド。 |
Color | 閉じた矢印の色定数。 |
以下の例では、MACD の例から借用した成行買い注文をクローズします:
for(cnt=0; cnt<total ;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
if(OrderType()==OP_BUY) // long position is opened
{
// should it be closed?
if(MacdCurrent>0 && MacdCurrentSignalPrevious &&
MacdCurrent>(MACDCloseLevel*Point))
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
return(0); // exit
}
説明
ここでの終了コードは for 演算子で始まり、コード ブロックをループして終了条件を評価します。
関数 OrderSelect() は、オープン注文のプールをチェックし、一致するシンボルと注文タイプ (OP_BUY または OP_SELL) を探すために使用されます。
このコード ブロックの最後で最も重要な条件は、出口戦略条件 (上記の例では MACD 出口条件) を観察することです。
オープンポジションと注文タイプが決定され、MACD 終了条件が満たされると、OrderClose() 関数をデプロイでき、そのパラメーターが指定されます。上の表で議論します。
カスタムクローズ関数
カスタム close 関数を使用すると、一連の条件に基づいて注文をクローズする必要があるときに Start() 関数から簡単に呼び出すことができるため、便利な場合があります。 カスタムクローズ関数は、オープン注文の現在のプールを確認し、注文タイプとそのマジックナンバーを特定する必要があります。
MT4 コードスニペット
void close(int type){
if(OrdersTotal()>0){
for(Counter=OrdersTotal()-1;Counter>=0;Counter–){
OrderSelect(Counter,SELECT_BY_POS,MODE_TRADES);
if(type==OP_BUY && OrderType()==OP_BUY){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) {
RefreshRates();
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits), vSlippage);
} }
if(type==OP_SELL && OrderType()==OP_SELL){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) {
RefreshRates(); OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),vSlippage);
}}
}}}
MT4の使用
if (OType==0 && CloseBuy==true)
{
close (OP_BUY); // Close Buy
説明
カスタム close 関数の名前として close() を選択し、それを呼び出したいときはいつでも、上記の使用例のように、close 条件の後に単語を挿入するだけです。
2 行目は、オープンポジションの合計がゼロより大きい場合に関数を開始します。 3 行目は、現在オープンしている注文プールをチェックし、それらをカウントします。 4 行目は OrderSelect() 関数を呼び出して、これらのカウントされた注文をさらなる処理のために選択します。
カスタム close 関数のパラメータは 1 つだけ作成します。これは、括弧 () 内の変数 int 型です。 このパラメータは注文タイプの識別子になります。 カスタム関数では、タイプが OP_BUY または OP_SELL と等しい (==) ことを示しているため、close() を呼び出すときは、使用法のように close() がクローズ (OP_BUY) であるかクローズ (OP_SELL) であるかを示す必要があります。上記の例。 関数では、type==OP_BUY と OrderType==OP_BUY をシンボル (&&) に関連付けます。
また、6 行目で行ったように、正しいコードとマジック ナンバーを使用して買い注文を選択したことを確認したいと思います。
< p>if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) {
Refresh Rates() は、通貨ペアのレートを更新して最新のレートが入力されるようにする関数です。
最後に、OrderClose() 関数をデプロイします。この関数のパラメータは上の表にあります。