MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1013

 

MQL5で保留中の注文を 制御するにはどうすればよいですか?


問題は、「ポジションと保留中の注文を混同しない」という以下の機能が必要なことです。


では、その保留中の注文に関する情報を得るにはどうすればよいのでしょうか?

 
Alexandr Sokolov:

MQL5で保留中の注文を 制御するにはどうすればよいですか?


問題は、「ポジションと保留中の注文を混同しない」という以下の機能が必要なことです。


では、その保留中の注文に関する情報はどのように入手すればよいのでしょうか?

保留中の注文を読むだけでいいんです。例えば、この機能は、保留中の逆指値注文にのみ適用されます。

//+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void CalculateAllPendingOrders(int &count_buy_stops,int &count_sell_stops)
  {
   count_buy_stops   = 0;
   count_sell_stops  = 0;

   for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==InpMagic)
           {
            if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
               count_buy_stops++;
            else
               if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
                  count_sell_stops++;
           }
  }
 
Vladimir Karputov:

保留中の注文を読むだけでいいんです。例えばこの機能は、保留中の逆指値注文にのみ適用されます。

ありがとうございました。


例を見ていたら、Positionを貫通している...。

 
Alexandr Sokolov:

ありがとうございました。


ただ、例を見てみると、Positionを通してるんですよね...。

以下は、コンパイルする例です。

//+------------------------------------------------------------------+
//|                                    CalculateAllPendingOrders.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#property script_show_inputs
//---
#include <Trade\SymbolInfo.mqh>
#include <Trade\OrderInfo.mqh>
//---
CSymbolInfo    m_symbol;                     // object of CSymbolInfo class
COrderInfo     m_order;                      // object of COrderInfo class
//--- input parameters
input ulong    InpMagic             = 200;         // Magic number
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CSymbolInfo.Name");
      return;
     }
//---
   int count_buy_stops=0,count_sell_stops=0;
   CalculateAllPendingOrders(count_buy_stops,count_sell_stops);
  }
//+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void CalculateAllPendingOrders(int &count_buy_stops,int &count_sell_stops)
  {
   count_buy_stops   = 0;
   count_sell_stops  = 0;

   for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==InpMagic)
           {
            if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
               count_buy_stops++;
            else
               if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
                  count_sell_stops++;
           }
  }
//+------------------------------------------------------------------+
ファイル:
 
Alexandr Sokolov:

MQL5で保留中の注文を 制御するにはどうすればよいですか?


問題は、「ポジションと保留中の注文を混同しない」という以下の機能が必要なことです。


では、その保留中の注文に関する情報を得るにはどうすればよいのでしょうか?

違いは、mql4の関数OrdersTotal()は、成行注文と保留注文の合計数を返すことです。また、mql5では、保留中の注文数のみが返されます。そして、ポジションの数を得るには、mql4のマーケットオーダーで言えば、関数PositionsTotal()

 
Alexey Viktorov:

掲示板のスレッドは見ていませんが、いくつかの説明書を見た結果、こちらの 方が分かりやすいと思います。試してみたら、うまくいったが、まだ適用する必要性を感じない。全端末の履歴を1つのフォルダにまとめるのは良いアイデアだと思いますが。

リンク先の記事を読みました。見事です。そして、多くの端末をお持ちの方にとっては、スーパーソリューションと言えるでしょう。これにより、異なる端末で1つのmql4フォルダを使用することができ、常にファイルをコピーして行き来する必要がなくなります。

ありがとうございました!!!

 
Sergey Likho:

リンク先の記事を読みました。見事です。そして、多くの端末をお持ちの方にとっては、スーパーソリューションと言えるでしょう。これにより、異なる端末で1つのmql4フォルダを使用することができ、常にファイルをコピーして行き来する必要がなくなります。

本当にありがとうございました!!!

感謝するのは私の方ではない。セルゲイ・タボリンさんの投稿に注目し、その中のいくつかの言葉をSeric29さんの願いと照らし合わせて、まあ自分で調べてみたんですけどね。

 

こんにちは。

コードの整理をお願いします。

グリッドを市場に出そうとしたら悪態をつき始めた:2016.04.01 00:02:00 11111113241135454356146 EURUSD,H1: FreeMarginCheck関数の 無効なロット量です。

添付のExpert Advisorファイル。

よろしくお願いします。

Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
  • www.mql5.com
//| Expert initialization function                                   | //| Expert deinitialization function                                 | //| Expert tick function                                             | //| test1                                                            |...
ファイル:
123.mq4  87 kb
 
Dmitriy Prigodich:

こんにちは。

コードの整理をお願いします。

マーケットにグリッドを入れようとしたら悪態をつき始めた:2016.04.01 00:02:00 11111113241135454356146 EURUSD,H1: FreeMarginCheck関数の 無効なロット量です。

添付のExpert Advisorファイル。

よろしくお願いします。

無効なロットの量も表示されます。

FreeMarginCheck機能はExpert Advisorの引数をチェックせず、正規化されたロットサイズを追加しない。

PS - まあ、市場で行にすべてを入れていない、彼ら自身が使用しないことをより多くのもの。レーティングが必要、より良いコドベースを埋める

 

動画を撮りたかったのですが、カメラを持っておらず、ツァーピーズの頃の古い携帯電話を持っているんです。 そこで、エキスパートを作成し、111.mq4と名付けました。

そのプリミティブコードを紹介する。

#property strict
#import "111б.ex4"//111б.mq4
int Funi(string Soob);
#import

int OnInit(){Funi(Symbol());return(INIT_SUCCEEDED);}
void OnDeinit(const int reason){}
void OnTick(){Funi(Symbol());}


で、ライブラリを作って111b.mq4という名前で、プリミティブなコードで

#property library
#property strict
 string  st_mas[]; //export
 int Funi(string Soob)export
 {st_mas[(ArrayResize(st_mas,ArrayRange(st_mas,0)+1))-1]=Soob;
 Print("Размер массива = ",ArrayRange(st_mas,0));
 for(int i=0;i<ArrayRange(st_mas,0);++i)
 Print("Вывод массива ",st_mas[i]);
 return 2;}

.私はライブラリの中で文字列の配列を宣言したのですが、後で分かったのは、開発者が配列や変数のエクスポートやインポートの可能性を提供していなかったということです。結局、情報を記憶するようなグローバルな配列を取得する方法はないのです。でも、気にしないで、別の方法をとりました。Funi() 関数を作りました。そして、Hキー端子によるハードリンクを作成し、このように設定しました。

元のファイルはForex4youにあり、Forex4you1のリンク私はロボットオリジナルを投げ、チャートにリンクし、最初の計算は得られたが、刻みは元のForex4youだけ行ったときに情報を更新し、配列st_masは サイズが増加したが、刻みはファイルが手動でチャートに取得したときにのみForex4you1何も起こりません。そして、別の道を選びました。333.mq4というExpert Advisorを作ってMT4 Forex4you1にインストールし、111b.mq4というライブラリを接続して、プログラムをチャートに放り込みました。ロボット333.mq4はライブラリリンクに接続することができ、これはオンラインで動作し始めたが、後で判明したように、ライブラリはプロトタイプであり、その中で宣言された配列は単一のチャート内で動作します

この例では、ロボットがグローバル配列でライブラリに接続されていても、その配列は画像として動作し、まだ通信を提供できないため、すべての側から利用できる共有変数を作成する必要があることを示しています。配列と変数のエクスポートが可能かどうかは誰にもわからない。2つ目の選択肢は、ファイルに情報を書き込むことだと思います。ファイルはプロキシにならず、双方から読み込まれるため、端末とロボットが通信できるようになるからです。私はまだその経験を持っていないので、この理論をチェックするファイルを扱う方法を知っている人。

皆さんは、配列や変数をエクスポートできるかどうかご存知ですか?