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

 
Koldun Zloy #:

誰も使うことができない。あなたのコードには重大な誤りがあります。そして、それらを修正することに意味はありません。

わざわざ言語の基礎を学ぼうとせず、何かを書こうとする。

真剣に取り組むか、あきらめるか、どちらかです。

彼の間違いは何なのか、説明してください。簡単に、注意すべき点を説明します。また、コードが動作するとして、その「バグ」は何なのか?

 
Ivan Butko #:

彼の間違いが何なのか説明してください。注意すべき点を簡単にまとめていただけますか?また、もしそのコードが動作するとしたら、その「バグ」は何でしょうか?

//+------------------------------------------------------------------+
//| Функция IsMainPendingOrder (установлен отложенный ордер):        |
//| возвращает истину, если в советнике не установлен отложенный     |
//| ордер, в противном случае возвращает ложь.                       |
//| Применим для функции тип данных bool, чтобы хранить              |
//| логические значения true (истина) или false (ложь).              |
//+------------------------------------------------------------------+
bool IsMainPendingOrder()
  {
   int orders_total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебираем все установленные отложенные ордера
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong  order_ticket=OrderGetTicket(i); // тикет ордера
      /* если отложенного ордера нет, значит и у нашего советника отложенного ордера нет */
      if(OrderSelect(i)==false)
         return true; // поэтому возвращаем значение истина
      else // в противном случае
         return false; // возвращаем значение ложь
     }
   /* если отложенный ордер уже есть и его мэджик совпадает с мэджиком нашего советника */
   if(OrderGetInteger(ORDER_MAGIC)==Magic_Number)
      return true;  // то возвращаем истину
   /* в противном случае, если отложенный ордер уже есть, но его мэджик не совпадает с мэджиком нашего советника */
   else
      return false; // значит это чужой ордер, поэтому возвращаем значение ложь

ドキュメントによると...受信トレイにはインデックスではなくチケットがあるはずです

bool  OrderSelect( 
   ulong   ticket      // тикет ордера 
   );

異なるシンボルに対して複数のオーダーがあり、探しているものがリストの2番目にある場合、それを見つけることはできません。あるいは、マジックが1つしかないのに、それを別の記号で求めると、関数から間違った答えが出てしまう...。

 
Alexey Viktorov #:

ドキュメントによると、受信箱にはインデックスではなく、チケットがあるはずです。

Alexeyさん、ありがとうございます。夜中にパソコンの前に座っていると、とても悪い影響を受ける。昨日、オーダーチケットから始めて、すでにコードに一行書き込んだつもりだった。

ulong  order_ticket=OrderGetTicket(i); // тикет ордера

と言って、"オフ移動 "した。

Alexeyさん、このような変形コードでも良いですか?

//+------------------------------------------------------------------+
//| Функция IsMainPendingOrder (установлен отложенный ордер):        |
//| возвращает истину, если установлен отложенный ордер,             |
//| в противном случае возвращает ложь.                              |
//| Применим для функции тип данных bool, чтобы хранить              |
//| логические значения true (истина) или false (ложь).              |
//+------------------------------------------------------------------+
bool IsMainPendingOrder()
  {
   int orders_total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебираем все установленные отложенные ордера
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong order_ticket=OrderGetTicket(i); // тикет ордера
      /* если отложенного ордера нет, значит и у нашего советника отложенного ордера нет */
      if(order_ticket==0)
         return false; // поэтому возвращаем значение ложь
      else // в противном случае
         return true; // возвращаем значение истина
     }
   /* если отложенный ордер уже есть и его мэджик совпадает с мэджиком нашего советника */
   if(OrderGetInteger(ORDER_MAGIC)==Magic_Number)
      return true;  // то возвращаем истину
   /* в противном случае, если отложенный ордер уже есть, но его мэджик не совпадает с мэджиком нашего советника */
   else
      return false; // значит это чужой ордер, поэтому возвращаем значение ложь
  }

一文字のEAを想定したコードなので、Magicはまだ触っていません。

ウラジミール、

 
MrBrooklin #:

Alexeiさん、ありがとうございます。夜中にパソコンの前に座っていると、とても悪い影響を受ける。昨日、オーダーチケットから始めて、すでにコードに一行書いたつもりだったのですが。

と言って、"オフ移動 "した。

Alexeyさん、このような変形コードでも 良いですか?

一文字のEAを想定したコード なので、Magicはまだ触っていません。

Sincerely, Vladimir.
.

このやり方は、私には受け入れられません。Magikのチェックとシンボルを追加し、2行のコードで、見返りとしてタスクを解決するための通常のアプローチを得ることができます。そして、私の原則を無視すると、コードは全く正しくありません。

この方が論理的だ。

//+------------------------------------------------------------------+
//| Функция  IsMainPendingOrder (установлен отложенный ордер):        |
//| возвращает истину, если установлен отложенный ордер,             |
//| в противном случае возвращает ложь.                              |
//| Применим для функции тип данных bool, чтобы хранить              |
//| логические значения true (истина) или false (ложь).              |
//+------------------------------------------------------------------+
bool IsMainPendingOrder()
  {
   int orders_total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебираем все установленные отложенные ордера
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong order_ticket=OrderGetTicket(i); // тикет ордера
      /* если отложенный ордер есть */
      if(order_ticket > 0)
         return true; // поэтому возвращаем истину
     }
      return false; // если нет открытого отложенного ордера…
  }

そして、このコードでは、空白のチェックを置き換えるだけでよいのです

      if(order_ticket > 0)

をチェックして、魔法使いとキャラクターを

      if(OrderGetString(ORDER_SYMBOL) == _Symbol && OrderGetInteger(ORDER_MAGIC) == Magic_Number)

と、すでにより普遍的な機能になっているのですが......。

 
Alexey Viktorov #:

ドキュメントによると、受信箱にはインデックスではなく、チケットがあるはずです。

異なるシンボルに対して複数のオーダーがあり、探しているものがリストの2番目にある場合、それを見つけることはできません。あるいは、魔法はひとつしかないのに、それを別の記号で探すと、また答えが違ってしまう...。

感謝

 
Alexey Viktorov #:

このやり方は、私には受け入れがたいものです。マジシャンとシンボルチェックを追加し、2行のコードを書き、それと引き換えに問題を解決するための通常のアプローチをとる。そして、私の原則を無視すると、コードは全く正しくありません。

この方が論理的だ。

そして、このコードでは、空白のチェックを置き換えるだけでよいのです

をチェックして、魔法使いとキャラクターを

と、すでに汎用性の高い機能になっているのですが...。

皆さん、おはようございます!ご機嫌いかがでしょうか?

アレクセイ、辛抱強いアプローチと私の誤りに関する明確な説明に対して、心から感謝します。

ウラジミールさん、ありがとうございます。

 
Ivan Butko #:

彼の間違いは何なのか、説明してください。注意すべき点を簡単にまとめていただけますか?また、コードが動くとしたら、その「間違い」は何なのか。

間違いは、初歩的なことを誤解していることにある。

もし、あなた自身がそれらを見なければ、あなたも:学び、学び、学びましょう。

 
Koldun Zloy #:

初歩的なことを理解できていない間違い。

自分で見ていない人は、あなたも:学んで、学んで、学びましょう

停止する。初心者の方からの質問を集めたスレッドです。だから、このスレッドで出された質問に答えるか、モラルを守らずに通り過ぎるか、どちらかです。

何のために姿を現したのか?人々が見たいのは質問への答えであって、写真の中のきれいな顔ではありません。

 
Artyom Trishkin #:

停止する。このスレッドは、初めての方からの質問を集めたものです。だから、このスレッドで出された質問に答えるか、モラルを守らずに通り過ぎるか、どちらかです。

何のために姿を現したのか?人々が見たいのは質問への答えであって、写真の中のハンサムな男性ではありません。

ただ、その人が何かを学びたいと思っているのなら、その手助けをしたいと思っただけなんです。

 
Koldun Zloy #:

ただ、その人が何かを学びたいと思っているのなら、その手助けをしたいと思っただけなんです。

よかったです。何もできないから、勉強して覚えろ」という、自分のやりたいことの見つけ方そのものが不思議に思えたのです。

でも、それはそれとして...。