初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 765

 
Alexey Kozitsyn:

マウスの移動イベントは確実に発生しません。他の人たちとは、同じだと思います。

EAでは?
 
Artyom Trishkin:
参事官では?

同じだ...

 
Alexey Viktorov:

その答えが先に出たのは...。

でも、フロムアライトの量ではなく、1枚でなんとかしようとするのが限界くらいがいいんです。

サンプルコードは書きません。普通のプログラマーは、ヒントがあればいいんです。ここでは、近似的なアルゴリズムを紹介します。

  1. チャネルが交差するバーのおおよその本数を決定します。15とする。
  2. インジケーターの両バッファーをコピーします。
  3. CopyRates()を使ってバーの値をコピーします。
  4. ループの中では、チャンネルの上限と高いバーの値を比較すると同時に、低いバーとチャンネルの下限を比較することを開始します。そのうちの1つが見つかれば、そのバーインデックスが変数に格納され、続けて2つ目のクロスを探す。交差点バーの両方の変数に値があるとき、ループを終了する。

このように、必要に応じて1コピー1サイクルで2つの交点を見つけることが可能です。ArraySetAsSeries() では、交差を見つけることが可能で、私の意見では、その番号ではなく、バーの時間を覚えて おく方が良いので、必要ないくらいです。しかし、バーの時間を知っていれば、その数を決定することに困難はない。

質問:インジケーターバッファを1値分コピーし、ハイバーを1値分コピーしてそれらの値を比較するサイクルと、一定量だけコピーして2つの配列の値を互いに比較するサイクルと、どちらが速いでしょうか?

私が理解したところでは、コードの最初に一定量のバーデータをコピーし、このデータを使って作業するというコンセプトから逸脱しないように提案するのですが、それとも例外を提案するのでしょうか。

それと、なぜ私がプログラマーだと思うのですか?

何が速くなるのか、その答えが明らかでない場合もあります。


 
Vladimir Karputov:

ちょうど昨日、これを書いたところです。

タスク

各ティックで"InpCountCopy "要素のopen、high、low、close、timeを取得する。

実施する。

  1. 0 "から "InpCountCopy-1 "までのループ - ループは一度に1つのオープン、ハイ、ロー、クローズと時間を取得します。
  2. 一度に「InpCountCopy」要素をMqlRates構造体に取得し、その構造体をループしています。

特徴

OnTickとOnTimer(1秒)のどちらでチェックするか選択できます。

ありがとうございます。コードの意味を理解するようにします。
 

このコードが履歴にないチケットを見つける理由を教えてください。

  HistorySelect(0,TimeCurrent()); 
  for(int i=HistoryOrdersTotal()-1; i>=0; i--) {
   string OrdTick=IntegerToString(HistoryOrderGetTicket(i));
   if(OrdTick=="63425010") Print(OrdTick);
  }
2017.07.24 23:58:33.514 RE (EURGBP.m,H1)      63425010


 
Vitaly Muzichenko:

このコードが履歴にないチケットを見つける理由を教えてください。


クローズド・トレード(OUT)の検索を試されましたか?オーダーがあったんです。見てください。

 
Vitaly Muzichenko:

このコードが履歴にないチケットを見つける理由を教えてください。


そうなんです。

あなたは注文を探していますが、ポジション=63425010をオープンする注文はすでに行われ、それは履歴に残っています。

そして、Ticket OrderとTicket Positionが同じであることが誤解を生んだと思います。

ポジションを解析したい場合は、 PositionSelect() を使用し、そのプロパティを解析します。

 

必要なもの

注文を出し、その応答としてポジション・チケットを受け取り、「ポジション・チケット」という名前のオブジェクトをチャートに描画する(置換は指定しない)。複数のポジションをそれぞれオープンした場合、チャート上にはチケット名を持つオブジェクトが複数存在し、そのうちの1つをクローズすると、すべてのオブジェクトが削除され、クローズしたチケットのオブジェクトだけをヒストリーから削除すればよいことになります。削除機能はOnTradeで動作します

 
Vitaly Muzichenko:

必要なもの

注文を出し、その応答としてポジションチケットを受け取り、「ポジションチケット」というオブジェクトをチャート上に描画する(置換は指定しない)。複数のポジションをそれぞれオープンした場合、チャート上にはチケット名を持つオブジェクトが複数存在し、そのうちの1つをクローズすると、すべてのオブジェクトが削除されますが、クローズしたチケットのオブジェクトは履歴から削除すればよいのです。削除機能はOnTradeで動作します


では、注文のチケットと ポジションのチケット、どちらが必要なのでしょうか?

 
prostotrader:

では、オーダーチケット とポジションチケット、どちらが必要なのでしょうか?

履歴に残っているチケット付きのオブジェクトは削除する必要がありますが、履歴に残っているオブジェクトは削除できません

重複している

  HistorySelect(0,TimeCurrent()); 
  for(int i=HistoryOrdersTotal()-1; i>=0; i--) {
   string OrdTick=IntegerToString(HistoryOrderGetTicket(i));
   if(OrdTick=="63425010") Print(OrdTick);
  }
2017.07.24 23:58:33.514 RE (EURGBP.m,H1)      63425010


理由: